Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Un metodo comune di implementazione TTL consiste nell'impostare un orario di scadenza per gli elementi in base a quando sono stati creati o aggiornati l'ultima volta. Questo può essere fatto aggiungendo l'ora a createdAt
e i updatedAt
timestamp. Ad esempio, il valore TTL per gli elementi appena creati può essere impostato su createdAt
+ 90 giorni. Quando l'elemento viene aggiornato, TTL può essere ricalcolato a updatedAt
+ 90 giorni.
Il tempo di scadenza calcolato deve essere in formato epocale, in secondi. Per essere considerata valida per la scadenza e l'eliminazione, non TTL possono essere trascorsi più di cinque anni. Se si utilizza un altro formato, i TTL processi ignorano l'elemento. Se imposti la data di scadenza su un periodo futuro in cui desideri che l'articolo scada, l'articolo scadrà dopo tale periodo. Ad esempio, supponiamo di aver impostato la data di scadenza su 1724241326 (ovvero lunedì 21 agosto 2024 11:55:26 ()). GMT L'articolo scadrà dopo il periodo specificato.
Crea un oggetto e imposta il Time to Live
L'esempio seguente mostra come calcolare l'ora di scadenza durante la creazione di un nuovo articolo, utilizzandolo expireAt
come nome dell'TTLattributo. Una dichiarazione di assegnazione ottiene l'ora corrente come variabile. Nell'esempio, l'ora di scadenza viene calcolata come 90 giorni dall'ora corrente. L'ora viene quindi convertita in formato epoch e salvata come tipo di dati intero nell'TTLattributo.
I seguenti esempi di codice mostrano come creare un elemento con. TTL
- SDKper Java 2.x
-
package com.amazon.samplelib.ttl; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.AttributeValue; import software.amazon.awssdk.services.dynamodb.model.DynamoDbException; import software.amazon.awssdk.services.dynamodb.model.PutItemRequest; import software.amazon.awssdk.services.dynamodb.model.PutItemResponse; import software.amazon.awssdk.services.dynamodb.model.ResourceNotFoundException; import software.amazon.awssdk.utils.ImmutableMap; import java.io.Serializable; import java.util.Map; import java.util.Optional; public class CreateTTL { public static void main(String[] args) { final String usage = """ Usage: <tableName> <primaryKey> <sortKey> <region> Where: tableName - The Amazon DynamoDB table being queried. primaryKey - The name of the primary key. Also known as the hash or partition key. sortKey - The name of the sort key. Also known as the range attribute. region (optional) - The AWS region that the Amazon DynamoDB table is located in. (Default: us-east-1) """; // Optional "region" parameter - if args list length is NOT 3 or 4, short-circuit exit. if (!(args.length == 3 || args.length == 4)) { System.out.println(usage); System.exit(1); } String tableName = args[0]; String primaryKey = args[1]; String sortKey = args[2]; Region region = Optional.ofNullable(args[3]).isEmpty() ? Region.US_EAST_1 : Region.of(args[3]); // Get current time in epoch second format final long createDate = System.currentTimeMillis() / 1000; // Calculate expiration time 90 days from now in epoch second format final long expireDate = createDate + (90 * 24 * 60 * 60); final ImmutableMap<String, ? extends Serializable> itemMap = ImmutableMap.of("primaryKey", primaryKey, "sortKey", sortKey, "creationDate", createDate, "expireAt", expireDate); final PutItemRequest request = PutItemRequest.builder() .tableName(tableName) .item((Map<String, AttributeValue>) itemMap) .build(); try (DynamoDbClient ddb = DynamoDbClient.builder() .region(region) .build()) { final PutItemResponse response = ddb.putItem(request); System.out.println(tableName + " PutItem operation with TTL successful. Request id is " + response.responseMetadata().requestId()); } catch (ResourceNotFoundException e) { System.err.format("Error: The Amazon DynamoDB table \"%s\" can't be found.\n", tableName); System.exit(1); } catch (DynamoDbException e) { System.err.println(e.getMessage()); System.exit(1); } System.exit(0); } }
-
Per API i dettagli, vedere PutItemin AWS SDK for Java 2.x APIReference.
-
Aggiorna un elemento e aggiorna il Time to Live
Questo esempio è una continuazione di quello della sezione precedente. L'ora di scadenza può essere ricalcolata se l'elemento viene aggiornato. L'esempio seguente ricalcola il expireAt
timestamp in modo che corrisponda a 90 giorni dall'ora corrente.
I seguenti esempi di codice mostrano come aggiornare un elemento. TTL
- SDKper Java 2.x
-
Aggiornamento TTL su un elemento DynamoDB esistente in una tabella.
import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.AttributeValue; import software.amazon.awssdk.services.dynamodb.model.DynamoDbException; import software.amazon.awssdk.services.dynamodb.model.ResourceNotFoundException; import software.amazon.awssdk.services.dynamodb.model.UpdateItemRequest; import software.amazon.awssdk.services.dynamodb.model.UpdateItemResponse; import software.amazon.awssdk.utils.ImmutableMap; import java.util.Map; import java.util.Optional; // Get current time in epoch second format final long currentTime = System.currentTimeMillis() / 1000; // Calculate expiration time 90 days from now in epoch second format final long expireDate = currentTime + (90 * 24 * 60 * 60); // An expression that defines one or more attributes to be updated, the action to be performed on them, and new values for them. final String updateExpression = "SET updatedAt=:c, expireAt=:e"; final ImmutableMap<String, AttributeValue> keyMap = ImmutableMap.of("primaryKey", AttributeValue.fromS(primaryKey), "sortKey", AttributeValue.fromS(sortKey)); final Map<String, AttributeValue> expressionAttributeValues = ImmutableMap.of( ":c", AttributeValue.builder().s(String.valueOf(currentTime)).build(), ":e", AttributeValue.builder().s(String.valueOf(expireDate)).build() ); final UpdateItemRequest request = UpdateItemRequest.builder() .tableName(tableName) .key(keyMap) .updateExpression(updateExpression) .expressionAttributeValues(expressionAttributeValues) .build(); try (DynamoDbClient ddb = DynamoDbClient.builder() .region(region) .build()) { final UpdateItemResponse response = ddb.updateItem(request); System.out.println(tableName + " UpdateItem operation with TTL successful. Request id is " + response.responseMetadata().requestId()); } catch (ResourceNotFoundException e) { System.err.format("Error: The Amazon DynamoDB table \"%s\" can't be found.\n", tableName); System.exit(1); } catch (DynamoDbException e) { System.err.println(e.getMessage()); System.exit(1); } System.exit(0);
-
Per API i dettagli, consulta la sezione UpdateItemReference AWS SDK for Java 2.x API.
-
Gli TTL esempi discussi in questa introduzione dimostrano un metodo per garantire che solo gli elementi aggiornati di recente siano conservati in una tabella. Gli elementi aggiornati hanno una durata di vita prolungata, mentre gli elementi non aggiornati dopo la creazione scadono e vengono eliminati gratuitamente, riducendo lo spazio di archiviazione e mantenendo le tabelle pulite.