Funktionsweise: DynamoDB Time to Live (TTL, Gültigkeitsdauer) TTL - Amazon DynamoDB

Sofern wir eine Übersetzung der englischsprachigen Version des Handbuchs bereitstellen, gilt im Fall von Widersprüchen die englischsprachige Version des Handbuchs. Bei der Übersetzung handelt es sich um eine maschinelle Übersetzung.

Funktionsweise: DynamoDB Time to Live (TTL, Gültigkeitsdauer) 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 ein Number Datentyp ist, ist der Attributwert ein Zeitstempel in Zeitformat der Unix-Epoche in (in) Sekunden, und der Zeitstempelwert ist älter als die aktuelle Zeit, aber nicht älter als fünf Jahre (um eine mögliche versehentliche Löschung aufgrund eines fehlerhaften TTL-Werts zu vermeiden), dann wird das Element auf abgelaufen gesetzt. Einzelheiten zur Formatierung von TTL-Attributen finden Sie unter Formatting an item’s TTL attribute. 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 im 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.

Time to Live (TTL, Gültigkeitsdauer) Beispiel

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 um 10 : 46 Uhr (1571827560) ab.