Ändern Sie die Datenerfassung für DynamoDB Streams
DynamoDB Streams erfasst eine zeitlich geordnete Abfolge von Änderungen auf Elementebene in jeder beliebigen DynamoDB-Tabelle und speichert diese Informationen bis zu 24 Stunden. Anwendungen können auf dieses Protokoll zugreifen und die Datenelemente vor und nach der Änderung nahezu in Echtzeit aufrufen.
Die Verschlüsselung ruhender Daten verschlüsselt die Daten in DynamoDB Streams. Weitere Informationen finden Sie unter Ruhende DynamoDB-Verschlüsselung.
Ein DynamoDB-Stream ist ein strukturierter Informationsfluss zu Elementänderungen in einer 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. Images der geänderten Elemente vor und nach der Änderung.
Mit DynamoDB Streams wird Folgendes sichergestellt:
-
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 verwaltet separate Endpunkte für DynamoDB und DynamoDB Streams. Für die Arbeit mit Datenbanktabellen und Indexen 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.. Wenn Sie beispielsweise den Endpunkt <region>.amazonaws.com.rproxy.govskope.cadynamodb.us-west-2.amazonaws.com für den Zugriff auf DynamoDB verwenden, verwenden Sie den Endpunkt streams.dynamodb.us-west-2.amazonaws.com für den Zugriff auf DynamoDB-Streams.
Anmerkung
Eine vollständige Liste der DynamoDB- und DynamoDB-Streams-Regionen und Endpunkte finden Sie unter Regionen und Endpunkte in der Allgemeine AWS-Referenz.
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 Ihre 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 ihn mit der AWS CLI oder einer AWS SDKs erstellen. Außerdem können Sie einen Stream in einer vorhandenen Tabelle aktivieren oder deaktivieren oder die Einstellungen eines Streams ändern. DynamoDB Streams wird asynchron betrieben. Daher wirkt es sich nicht auf die Leistung der Tabelle aus, wenn Sie einen Stream aktivieren.
Die einfachste Möglichkeit zum Verwalten von DynamoDB Streams bietet die AWS-Managementkonsole.
Melden Sie sich bei der AWS-Managementkonsole an und öffnen Sie die DynamoDB-Konsole unter https://console.aws.amazon.com/dynamodb/
. -
Wählen Sie im Dashboard der DynamoDB-Konsole die Option Tables (Tabellen) aus und wählen Sie eine vorhandene Tabelle aus.
-
Wählen Sie die Registerkarte Exports and streams (Exporte und Streams).
-
Wählen Sie im Abschnitt Details zum DynamoDB-Stream die Option Einschalten aus.
-
Wählen Sie auf der Seite DynamoDB-Stream einschalten die Informationen aus, die in den Stream geschrieben werden sollen, sobald Daten in der Tabelle geändert werden:
-
Nur Schlüsselattribute – nur die Schlüsselattribute des geänderten Elements.
-
Neues Image – das gesamte Element wie es nach der Änderung erscheint.
-
Altes Image – das gesamte Element wie es vor der Änderung erscheint.
-
Neues und altes Image – sowohl das neue als auch das alte Image des Elements.
Wenn Sie die gewünschten Einstellungen vorgenommen haben, wählen Sie Stream einschalten aus.
-
-
(Optional) Um einen vorhandenen Stream zu deaktivieren, wählen Sie unter Details zum DynamoDB-Stream die Option Deaktivieren aus.
Sie können auch die CreateTable- oder UpdateTable-API-Operationen 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, wie es nach der Änderung erscheint. -
OLD_IMAGE– das gesamte Element, wie es vor der Änderung erscheint. -
NEW_AND_OLD_IMAGES– sowohl das neue als auch das alte Image des Elements.
-
Sie können einen Stream jederzeit aktivieren oder deaktivieren. Wenn Sie versuchen, einen Stream für eine Tabelle zu aktivieren, die bereits über einen Stream verfügt, erhalten Sie jedoch eine ValidationException. Wenn Sie versuchen, einen Stream für eine Tabelle zu deaktivieren, die nicht über einen Stream verfügt, erhalten Sie auch eine ValidationException.
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 mit dem Namen 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-Anforderung DescribeTable und suchen das Element LatestStreamArn in der Antwort.
Anmerkung
Es ist nicht möglich, ein StreamViewType zu bearbeiten, sobald ein Stream eingerichtet wurde. Wenn Sie nach der Einrichtung Änderungen an einem Stream vornehmen möchten, müssen Sie den aktuellen Stream deaktivieren und einen neuen erstellen.
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. (Es ist auch möglich, dass ein übergeordneter Shard 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. Die Daten im Stream bleiben 24 Stunden lang lesbar.
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 dies für Sie erledigt. Ihre Anwendung verarbeitet die Shards und Streamdatensätze in der richtigen Reihenfolge. Es verarbeitet automatisch neue oder abgelaufene Shards sowie Shards, die sich während der Ausführung der Anwendung teilen. 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 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 zwei Prozesse gleichzeitig aus dem Shard desselben Streams lesen. Wenn mehr als zwei 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 Informationen über einen Stream zurück, z. B. den aktuellen Status des Streams, seinen Amazon-Ressourcennamen (ARN), die Zusammenstellung der Shards und die zugehörige DynamoDB-Tabelle. Sie können das FeldShardFilteroptional verwenden, um den vorhandenen untergeordneten Shard abzurufen, der dem übergeordneten Shard zugeordnet ist. -
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 einerGetShardIterator-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.
Shard-Erkennung
Mit zwei leistungsstarken Methoden können Sie neue Shards in Ihrem DynamoDB-Stream erkennen. Als Nutzer von Amazon DynamoDB Streams haben Sie zwei effektive Möglichkeiten, neue Shards zu verfolgen und zu identifizieren:
- Abfragen der gesamten Stream-Topologie
Verwenden Sie die
DescribeStream-API, um den Stream regelmäßig abzufragen. Dadurch werden alle Shards im Stream zurückgegeben, einschließlich aller neu erstellten Shards. Indem Sie die Ergebnisse im Zeitverlauf vergleichen, können Sie neu hinzugefügte Shards erkennen.- Erkennen untergeordneter Shards
Verwenden Sie die
DescribeStream-API mit dem ParameterShardFilter, um eine Teilmenge von Shards zu finden. Wenn Sie in der Anfrage einen übergeordneten Shard benennen, gibt DynamoDB Streams seine unmittelbar untergeordneten Shards zurück. Dieser Ansatz ist nützlich, wenn Sie nur die Herkunft der Shards verfolgen müssen, ohne den gesamten Stream zu scannen.Anwendungen, die Daten aus DynamoDB Streams aufnehmen, können mithilfe dieses
ShardFilter-Parameters effizient vom Lesen eines geschlossenen Shards zum zugehörigen untergeordneten Shard übergehen. Dadurch werden wiederholte Aufrufe derDescribeStream-API vermieden, um die Shard-Zuordnung für alle geschlossenen und offenen Shards abzurufen und zu durchlaufen. So können untergeordnete Shards schnell erkannt werden, nachdem ein übergeordneter Shard geschlossen wurde. Auf diese Weise werden Stream-Verarbeitungsanwendungen reaktionsschneller und kostengünstiger.
Mit beiden Methoden können Sie den Überblick über die sich entwickelnde Struktur Ihrer DynamoDB Streams behalten, um keine wichtigen Datenaktualisierungen oder Shard-Änderungen zu verpassen.
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. Es gibt keinen Mechanismus zum manuellen Löschen eines vorhandenen Streams. Sie müssen nur warten, bis die Aufbewahrungsfrist abgelaufen ist (24 Stunden) und alle Stream-Datensätze gelöscht werden.