So funktioniert es: DynamoDB Time to Live (TTL) - Amazon DynamoDB

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.

So funktioniert es: DynamoDB Time to Live (TTL)

Wenn Sie TTL für eine DynamoDB-Tabelle aktivieren, müssen Sie einen bestimmten Attributnamen angeben, nach dem der Service suchen soll, wenn bestimmt wird, ob der Ablauf eines Element veranlasst werden soll. Nachdem Sie TTL für eine Tabelle aktiviert haben, wertet ein Scanner-Hintergrundprozess pro Partition automatisch und kontinuierlich den Ablaufstatus von Elementen in der Tabelle aus.

Der Hintergrundprozess des Scanners vergleicht die aktuelle Zeit im Unix-Zeitformat in Sekunden mit dem Wert, der im benutzerdefinierten Attribut eines Elements gespeichert ist. Wenn das Attribut einNumber-Datentyp ist der Wert des Attributs ein Zeitstempel inUnix-Epoche-Zeitformatin SekundenWenn der Zeitstempel älter als die aktuelle Zeit, aber nicht fünf Jahre älter oder älter ist (um ein mögliches versehentliches Löschen aufgrund eines fehlerhaften TTLs zu vermeiden), dann wird das Element auf abgelaufen festgelegt. Weitere Informationen zum Formatieren von TTL-Attributen finden Sie unterFormatieren des TTL-Attributs eines Elements. Ein zweiter Hintergrundprozess scannt nach abgelaufenen Elementen und löscht diese. Beide Prozesse finden automatisch im Hintergrund statt, wirken sich nicht auf die Lese- oder Schreibzugriffe auf die Tabelle aus und sind mit keinen monetären Kosten verbunden.

Wenn Elemente aus der Tabelle gelöscht werden, werden zwei Hintergrundoperationen gleichzeitig durchgeführt:

  • Elemente werden aus jedem lokalen sekundären Index und globalen sekundären Index auf die gleiche Weise wie mit einem DeleteItem-Vorgang entfernt.

  • Ein Löschvorgang für jedes Element tritt in den DynamoDB-Stream ein, ist jedoch als Systemlöschvorgang und nicht als regulärer Löschvorgang gekennzeichnet. Weitere Informationen zur Verwendung eines solchen Systemlöschvorgangs finden Sie unter DynamoDB Streams und Time to Live.

Wichtig
  • Abhängig von der Größe und der Aktivitätsstufe einer Tabelle kann der tatsächliche Löschvorgang eines abgelaufenen Elements variieren. Da TTL als Hintergrundprozess gedacht ist, ist die Kapazität, die zum Veranlassen des Ablaufs und zum Löschen von Elementen über TTL verwendet wird, variabel (aber kostenlos). TTL löscht typischerweise abgelaufene Elemente innerhalb von 48 Stunden nach dem Ablauf.

  • Elemente, die abgelaufen sind, aber noch nicht von TTL gelöscht wurden, werden weiterhin in Lese-, Abfrage- und Scanvorgängen angezeigt. Wenn Sie nicht möchten, dass abgelaufene Elemente in der Ergebnismenge enthalten sind, müssen Sie sie herausfiltern. Verwenden Sie dazu einen Filterausdruck, der nur die Elemente zurückgibt, deren Time to Live-Ablaufwert größer ist als die aktuelle Uhrzeit im Epoch-Format. Weitere Informationen finden Sie unter Filterausdrücke für Scan.

  • Elemente, die ihren Ablauf überschritten haben, aber noch nicht gelöscht wurden, können weiterhin aktualisiert werden, und erfolgreiche Aktualisierungen zum Ändern oder Entfernen des Ablaufattributs werden umgesetzt.

Sie können TTL-Raten auf der Registerkarte der CloudWatch-Metriken für eine Tabelle überwachen und feststellen, wann und mit welcher Rate Elemente gelöscht werden.


            Konsolen-Screenshot mit TTL und CloudWatch.

Beispiel: Time to Live

Angenommen, Sie besitzen eine Tabelle mit dem Namen „Sitzungsdaten“, die den Sitzungsverlauf eines Benutzers verfolgt. Jedes Element in SessionData wird durch den Partitionsschlüssel (UserName) und den Sortierschlüssel (SessionId) identifiziert. Die Sitzungsinformationen werden durch zusätzliche Attribute wie UserName, SessionId, CreationTime und ExpirationTime verfolgt. Das Attribut ExpirationTime wird als TTL-Attribut für die Tabelle festgelegt (nicht alle Attribute für jedes Element werden angezeigt).

SessionData
Benutzername SitzungsID Erstellzeitpunkt Ablaufzeitpunkt (TTL) Sitzungsinfo
Benutzer 1 74686572652773 1571820360 1571827560 {JSON-Dokument} ...
Benutzer 2 6e6f7468696e67 1571820180 1571827380 {JSON-Dokument} ...
Benutzer 3 746f2073656520 1571820923 1571828123 {JSON-Dokument} ...
Benutzer 4 68657265212121 1571820683 1571827883 {JSON-Dokument}
Benutzer 5 6e6572642e2e2e 1571820743 1571831543 {JSON-Dokument} ...
... ... ... ... ...

In diesem Beispiel hat jedes Element einen ExpirationTime-Attributwertsatz, wenn es erstellt wird. Betrachten Sie das folgende Tabellenelement.

SessionData
Benutzername SitzungsID Erstellzeitpunkt Ablaufzeitpunkt (TTL) Sitzungsinfo
Benutzer 1 74686572652773 1571820360 1571827560 {JSON-Dokument} ...

In diesem Beispiel ist das Element CreationTime auf Mittwoch, 23. Oktober, um 08:46 Uhr UTC 2019 und ExpirationTime auf 2 Stunden später am Mittwoch, 23. Oktober, um 10:46 Uhr UTC 2019 festgelegt. Das Element läuft ab, wenn die aktuelle Uhrzeit im Epoch-Zeitformat größer ist als die Zeit im ExpirationTime-Attribut. In diesem Fall wird das Element mit dem Schlüssel{ Username: user1, SessionId: 74686572652773}läuft ab 10:46 Uhr (1571827560).