Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Eine gängige Methode zur Implementierung von TTL besteht darin, eine Ablaufzeit für Elemente festzulegen, die darauf basieren, wann sie erstellt oder zuletzt aktualisiert wurden. Dies kann durch Hinzufügen von Zeit zu den Zeitstempeln createdAt
und updatedAt
Zeitstempeln erfolgen. Beispielsweise kann die TTL für neu erstellte Elemente auf createdAt
+ 90 Tage festgelegt werden. Wenn das Element aktualisiert wird, kann die TTL auf + 90 Tage neu berechnet werden. updatedAt
Die berechnete Ablaufzeit muss im Epochenformat in Sekunden angegeben werden. Um für Ablauf und Löschung in Betracht gezogen zu werden, darf die TTL nicht länger als fünf Jahre zurückliegen. Wenn Sie ein anderes Format verwenden, ignorieren die TTL-Prozesse das Element. Wenn Sie das Ablaufdatum auf einen Zeitpunkt in der future festlegen, an dem der Artikel ablaufen soll, ist der Artikel nach diesem Zeitpunkt abgelaufen. Angenommen, Sie haben das Ablaufdatum auf 1724241326 festgelegt (das ist Montag, 21. August 2024 11:55:26 (GMT)). Der Artikel läuft nach der angegebenen Zeit ab.
Themen
Erstellen Sie ein Objekt und legen Sie die Gültigkeitsdauer fest
Das folgende Beispiel zeigt, wie die Ablaufzeit berechnet wird, wenn ein neues Element erstellt wird, wobei expireAt
der TTL-Attributname verwendet wird. Eine Zuweisungsanweisung ruft die aktuelle Uhrzeit als Variable ab. In diesem Beispiel wird die Ablaufzeit mit 90 Tagen ab der aktuellen Uhrzeit berechnet. Die Zeit wird dann in das Epochenformat konvertiert und als Integer-Datentyp im TTL-Attribut gespeichert.
Die folgenden Codebeispiele zeigen, wie ein Element mit TTL erstellt wird.
- SDK für 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); } }
-
Einzelheiten zur API finden Sie PutItemunter AWS SDK for Java 2.x API-Referenz.
-
Aktualisieren Sie ein Element und aktualisieren Sie die Gültigkeitsdauer
Dieses Beispiel ist eine Fortsetzung des Beispiels aus dem vorherigen Abschnitt. Die Ablaufzeit kann neu berechnet werden, wenn der Artikel aktualisiert wird. Im folgenden Beispiel wird der expireAt
Zeitstempel neu berechnet, sodass er 90 Tage von der aktuellen Uhrzeit abweicht.
Die folgenden Codebeispiele zeigen, wie die TTL eines Elements aktualisiert wird.
- SDK für Java 2.x
-
Aktualisieren Sie TTL für ein vorhandenes DynamoDB-Element in einer Tabelle.
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);
-
Einzelheiten zur API finden Sie unter UpdateItemAPI-Referenz.AWS SDK for Java 2.x
-
Die in dieser Einführung erörterten TTL-Beispiele demonstrieren eine Methode, mit der sichergestellt werden kann, dass nur kürzlich aktualisierte Elemente in einer Tabelle gespeichert werden. Aktualisierte Elemente haben eine längere Lebensdauer, wohingegen Elemente, die nach der Erstellung nicht aktualisiert wurden, ablaufen und kostenlos gelöscht werden, wodurch der Speicherplatz reduziert und die Tabellen sauber gehalten werden.