Amazon DynamoDB
Entwicklerhandbuch (API-Version 2012-08-10)

Erfassen von Tabellenaktivitäten mit DynamoDB Streams

Viele Anwendungen können zum Zeitpunkt einer Änderung von der Funktion zum Erfassen der Änderungen an den in einer DynamoDB-Tabelle gespeicherten Elementen profitieren. Nachfolgend sind einige beispielhafte Anwendungsfälle aufgeführt:

  • Eine Anwendung in einer AWS-Region ändert die Daten in einer DynamoDB-Tabelle. Eine zweite Anwendung in einer anderen AWS-Region liest diese Datenänderungen und schreibt die Daten in eine andere Tabelle. So wird eine Replica erstellt, die mit der ursprünglichen Tabelle synchronisiert bleibt.

  • Eine beliebte mobile App modifiziert Daten in einer DynamoDB-Tabelle mit einer Geschwindigkeit von Tausenden von Aktualisierungen pro Sekunde. Eine andere Anwendung erfasst und speichert Daten zu diesen Änderungen und stellt so Nutzungsmetriken für die mobile App nahezu in Echtzeit bereit.

  • Ein globales Spiel für mehrere Spieler verfügt über eine Multi-Master-Topologie, mit der Daten in mehreren AWS-Regionen gespeichert werden. Jeder Master bleibt synchron, indem die Änderungen, die in den entfernten Regionen ausgeführt werden, verbraucht und wiedergegeben werden.

  • Eine Anwendung sendet Benachrichtigungen automatisch an die Mobilgeräte aller Freunde in einer Gruppe, sobald ein Freund ein neues Bild hochlädt.

  • Ein neuer Kunde fügt einer DynamoDB-Tabelle Daten hinzu. Dieses Ereignis ruft eine andere Anwendung auf, die eine Begrüßungs-E-Mail an den neuen Kunden sendet.

DynamoDB Streams ermöglicht Lösungen wie diese und viele weitere. DynamoDB Streams erfasst eine zeitlich geordnete Abfolge von Änderungen auf Elementebene in jeder beliebigen DynamoDB-Tabelle und speichert diese Informationen bis zu 24 Stunden in einem Protokoll. Anwendungen können auf dieses Protokoll zugreifen und die Datenelemente vor und nach der Änderung nahezu in Echtzeit aufrufen.

Mit der Verschlüsselung ruhender Daten werden die Daten in DynamoDB-Streams verschlüsselt. Weitere Informationen finden Sie unter Amazon DynamoDB-Verschlüsselung ruhender Daten.

Ein DynamoDB-Stream ist ein strukturierter Informationsfluss zu Elementänderungen in einer Amazon DynamoDB-Tabelle. Wenn Sie den Stream für eine Tabelle aktivieren, werden von DynamoDB Informationen über jede Änderung an den Datenelementen in der Tabelle erfasst.

Wenn eine Anwendung Elemente in der Tabelle erstellt, aktualisiert oder löscht, schreibt DynamoDB Streams einen Stream-Datensatz mit dem bzw. den Primärschlüsselattributen der Elemente, die geändert wurden. Ein Stream-Datensatz enthält Informationen über eine Datenänderung an einem einzelnen Element einer DynamoDB-Tabelle. Sie können den Stream konfigurieren, sodass die Stream-Datensätze zusätzliche Informationen erfassen, z. B. Abbilder der geänderten Elemente vor und nach der Änderung.

DynamoDB Streams garantiert Folgendes:

  • Jeder Stream-Datensatz erscheint genau einmal im Stream.

  • Für jedes Element, das in einer DynamoDB-Tabelle geändert wird, erscheinen die Stream-Datensätze in der gleichen Reihenfolge wie die tatsächlichen Änderungen des Elements.

DynamoDB Streams schreibt Stream-Datensätze nahezu in Echtzeit, sodass Sie Anwendungen erstellen können, die diese Streams verbrauchen und basierend auf den Inhalten Aktionen einleiten.

Endpunkte für DynamoDB Streams

AWS pflegt separate Endpunkte für DynamoDB und DynamoDB Streams. Für die Arbeit mit Datenbanktabellen und Indizes muss Ihre Anwendung auf einen DynamoDB-Endpunkt zugreifen. Um DynamoDB Streams-Datensätze zu lesen und zu verarbeiten, muss die Anwendung auf einen DynamoDB Streams-Endpunkt in derselben Region zugreifen.

Die Namenskonvention für DynamoDB Streams-Endpunkte lautet streams.dynamodb.<region>.amazonaws.com. Wenn Sie z. B. über den Endpunkt dynamodb.us-west-2.amazonaws.com auf DynamoDB zugreifen, verwenden Sie den Endpunkt streams.dynamodb.us-west-2.amazonaws.com für den Zugriff auf DynamoDB Streams.

Anmerkung

Eine vollständige Liste mit den DynamoDB- und DynamoDB Streams-Regionen und -Endpunkten finden Sie unter Regionen und Endpunkte im AWS General Reference.

Die AWS-SDKs stellen separate Clients für DynamoDB und DynamoDB Streams bereit. Je nach Anforderung kann die Anwendung auf einen DynamoDB-Endpunkt, einen DynamoDB Streams-Endpunkt oder beide gleichzeitig zugreifen. Für die Verbindung mit beiden Endpunkten muss die Anwendung zwei Clients instanziieren, und zwar einen für DynamoDB und einen für DynamoDB Streams.

Aktivieren eines Streams

Sie können einen Stream in einer neuen Tabelle aktivieren, wenn Sie die Tabelle erstellen. Außerdem können Sie einen Stream in einer vorhandenen Tabelle aktivieren oder deaktivieren oder die Einstellungen eines Streams ändern. DynamoDB Streams arbeitet asynchron, beim Aktivieren eines Streams wird also die Tabellenleistung nicht beeinträchtigt.

Die einfachste Möglichkeit zum Verwalten von DynamoDB Streams bietet die AWS Management Console.

  1. Öffnen Sie die DynamoDB-Konsole unter der Adresse https://console.aws.amazon.com/dynamodb/.

  2. Wählen Sie im Dashboard der DynamoDB-Konsole Tables (Tabellen) aus.

  3. Wählen Sie auf der Registerkarte Overview die Option Manage Stream aus.

  4. Wählen Sie im Fenster Manage Stream die Informationen aus, die in den Stream geschrieben werden sollen, sobald Daten in der Tabelle geändert werden:

    • Keys only (Nur Schlüssel): nur die Schlüsselattribute des geänderten Elements.

    • New image (Neues Abbild): das gesamte Element nach der Änderung.

    • Old image (Altes Abbild): das gesamte Element vor der Änderung.

    • New and old images (Neues und altes Abbild): das neue und das alte Abbild des Elements.

    Wenn Sie die gewünschten Einstellungen vorgenommen haben, wählen Sie Enable aus.

  5. (Optional) Zum Deaktivieren eines vorhandenen Streams wählen Sie Manage Stream und anschließend Disable aus.

Sie können auch die CreateTable- oder UpdateTable-API zum Aktivieren oder Ändern eines Streams verwenden. Der Parameter StreamSpecification bestimmt, wie der Stream konfiguriert wird:

  • StreamEnabled: gibt an, ob ein Stream für die Tabelle aktiviert (true) oder deaktiviert (false) ist.

  • StreamViewType: legt die Informationen fest, die in den Stream geschrieben werden, sobald Daten in der Tabelle geändert werden:

    • KEYS_ONLY: nur die Schlüsselattribute des geänderten Elements

    • NEW_IMAGE: das gesamte Element nach der Änderung.

    • OLD_IMAGE: das gesamte Element vor der Änderung.

    • NEW_AND_OLD_IMAGES: sowohl das neue als auch das alte Abbild des Elements.

Sie können einen Stream jederzeit aktivieren oder deaktivieren. Beachten Sie jedoch, dass Sie eine ResourceInUseException erhalten, wenn Sie versuchen, einen Stream in einer Tabelle zu aktivieren, die bereits über einen Stream verfügt. Außerdem tritt eine ValidationException bei dem Versuch auf, einen Stream in einer Tabelle zu deaktivieren, die nicht über einen Stream verfügt.

Wenn Sie StreamEnabled auf true festlegen, erstellt DynamoDB einen neuen Stream mit einem zugewiesenen, eindeutigen Stream-Deskriptor. Wenn Sie einen Stream in der Tabelle deaktivieren und anschließend erneut aktivieren, wird ein neuer Stream mit einem anderen Stream-Deskriptor erstellt.

Jeder Stream wird anhand eines Amazon-Ressourcennamens (ARN) eindeutig identifiziert. Nachfolgend ist ein Beispiel-ARN für einen Stream in einer DynamoDB-Tabelle namens TestTable aufgeführt:

arn:aws:dynamodb:us-west-2:111122223333:table/TestTable/stream/2015-05-11T21:21:33.291

Um den aktuellen Stream-Deskriptor für eine Tabelle zu bestimmen, erstellen Sie eine DynamoDB-DescribeTable-Anforderung und suchen das Element LatestStreamArn in der Antwort.

Lesen und Verarbeiten eines Streams

Zum Lesen und Verarbeiten eines Streams muss Ihre Anwendung eine Verbindung mit einem DynamoDB Streams-Endpunkt herstellen und API-Anforderungen ausgeben.

Ein Stream besteht aus Stream-Datensätzen. Jeder Stream-Datensatz stellt eine einzelne Datenänderung in der DynamoDB-Tabelle dar, zu der der Stream gehört. Jedem Stream-Datensatz ist eine Sequenznummer zugewiesen, wodurch die Reihenfolge dargestellt wird, in der der Datensatz im Stream veröffentlicht wurde.

Stream-Datensätze werden in Gruppen oder Shards verwaltet. Jeder Shard fungiert als Container für mehrere Stream-Datensätze und enthält Informationen, die zum Abrufen und Durchlaufen dieser Datensätze erforderlich sind. Die Stream-Datensätze in einem Shard werden nach 24 Stunden automatisch entfernt.

Shards sind flüchtig, d. h., sie werden nach Bedarf automatisch erstellt und gelöscht. Jeder Shard kann in mehrere neue Shards unterteilt werden. Dieser Vorgang erfolgt automatisch. (Hinweis: Es ist auch möglich, dass ein übergeordneter Shard kann nur einen untergeordneten Shard besitzt.) Ein Shard kann aufgrund hoher Schreibaktivitäten in der übergeordneten Tabelle aufgeteilt werden, sodass Anwendungen Datensätze aus mehreren Shards parallel verarbeiten können.

Wenn Sie einen Stream deaktivieren, werden alle offenen Shards geschlossen.

Da Shards hierarchisch (über- und untergeordnet) aufgebaut sind, müssen Anwendungen einen übergeordneten Shard immer vor einem untergeordneten Shard verarbeiten. So wird sichergestellt, dass die Stream-Datensätze ebenfalls in der richtigen Reihenfolge verarbeitet werden. (Wenn Sie den DynamoDB Streams Kinesis Adapter verwenden, wird folgender Vorgang für Sie übernommen: Ihre Anwendung verarbeitet die Shards und Stream-Datensätze in der richtigen Reihenfolge und bearbeitet automatisch neue oder abgelaufene Shards sowie Shards, die sich teilen, während die Anwendung ausgeführt wird. Weitere Informationen finden Sie unter Verwenden des DynamoDB Streams Kinesis Adapters zum Verarbeiten von Stream-Datensätzen.)

Das folgende Diagramm zeigt die Beziehung zwischen einem Stream, Shards im Stream und Stream-Datensätzen in den Shards.

Anmerkung

Wenn Sie eine PutItem- oder UpdateItem-Operation ausführen, mit der keine Daten in einem Element geändert werden, schreibt DynamoDB Streams keinen Stream-Datensatz für diese Operation.

Um auf einen Stream zuzugreifen und die darin enthaltenen Stream-Datensätze zu verarbeiten, führen Sie die folgenden Schritte aus:

  • Ermitteln Sie den eindeutigen Amazon-Ressourcennamen (ARN) des Streams, auf den Sie zugreifen möchten.

  • Bestimmen Sie, welcher bzw. welche Shards im Stream die gewünschten Stream-Datensätze enthalten.

  • Greifen Sie auf den bzw. die Shards zu und rufen Sie die gewünschten Stream-Datensätze ab.

Anmerkung

Es sollten nicht mehr als 2 Prozesse gleichzeitig aus demselben Stream-Shard lesen. Wenn mehr als 2 Leser pro Shard vorhanden sind, kann eine Drosselung die Folge sein.

Die DynamoDB Streams-API bietet die folgenden Aktionen zur Verwendung durch Anwendungsprogramme:

  • ListStreams: gibt eine Liste der Stream-Deskriptoren für das aktuelle Konto und den Endpunkt zurück. Sie können optional nur die Stream-Deskriptoren für einen bestimmten Tabellennamen anfordern.

  • DescribeStream: gibt detaillierte Informationen über einen bestimmten Stream zurück. Die Ausgabe umfasst eine Liste der Shards, die dem Stream zugeordnet sind, einschließlich der Shard-IDs.

  • GetShardIterator: gibt einen Shard Iterator zurück, der eine Position innerhalb eines Shards beschreibt. Sie können anfordern, dass der Iterator Zugriff auf den ältesten Punkt, den neuesten Punkt oder einen bestimmten Punkt im Stream bereitstellt.

  • GetRecords: gibt die Stream-Datensätze innerhalb eines bestimmten Shards zurück. Sie müssen den von einer GetShardIterator-Anforderung zurückgegebenen Shard Iterator angeben.

Eine detaillierte Beschreibung dieser API-Aktionen, einschließlich Anforderungs- und Antwortbeispielen, finden Sie unter Amazon DynamoDB Streams-API-Referenz.

Datenaufbewahrungsfrist für DynamoDB Streams

Alle Daten in DynamoDB Streams unterliegen einer 24-Stunden-Nutzungsdauer. Sie können die Aktivitäten der letzten 24 Stunden für eine bestimmte Tabelle abrufen und analysieren. Daten, die älter als 24 Stunden sind, können jedoch jederzeit entfernt werden.

Wenn Sie einen Stream in einer Tabelle deaktivieren, bleiben die Daten im Stream 24 Stunden lang lesbar. Nach Ablauf dieses Zeitraums verfallen die Daten und die Stream-Datensätze werden automatisch gelöscht. Beachten Sie, dass es keinen Mechanismus zum manuellen Löschen eines vorhandenen Streams gibt. Sie müssen nur warten, bis die Aufbewahrungsfrist abgelaufen ist (24 Stunden) und alle Stream-Datensätze gelöscht werden.