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.
Bewährte Methoden für den Umgang mit gleichzeitigen Updates in DynamoDB
In verteilten Systemen können mehrere Prozesse oder Benutzer versuchen, dieselben Daten gleichzeitig zu ändern. Ohne Kontrolle der Parallelität können diese gleichzeitigen Schreibvorgänge dazu führen, dass Aktualisierungen verloren gehen, Daten inkonsistent sind oder es zu Wettläufen kommt. DynamoDB bietet mehrere Mechanismen, mit denen Sie den gleichzeitigen Zugriff verwalten und die Datenintegrität aufrechterhalten können.
Anmerkung
Einzelne Schreibvorgänge UpdateItem sind z. B. atomar und werden unabhängig von der Parallelität immer mit der neuesten Version des Elements ausgeführt. Sperrstrategien sind erforderlich, wenn Ihre Anwendung ein Element lesen und es dann basierend auf dem gelesenen Wert zurückschreiben muss (ein read-modify-write Zyklus), da ein anderer Prozess das Element zwischen dem Lesen und dem Schreiben ändern könnte.
Es gibt zwei Hauptstrategien für den Umgang mit gleichzeitigen Aktualisierungen:
-
Optimistisches Sperren — Geht davon aus, dass Konflikte selten sind. Es ermöglicht gleichzeitigen Zugriff und erkennt Konflikte beim Schreiben mithilfe von bedingten Schreibvorgängen. Wenn ein Konflikt erkannt wird, schlägt der Schreibvorgang fehl und die Anwendung kann es erneut versuchen.
-
Pessimistisches Sperren — Geht davon aus, dass Konflikte wahrscheinlich sind. Es verhindert den gleichzeitigen Zugriff, indem es sich exklusiven Zugriff auf eine Ressource verschafft, bevor sie geändert wird. Andere Prozesse müssen warten, bis die Sperre aufgehoben wird.
In der folgenden Tabelle sind die in DynamoDB verfügbaren Ansätze zusammengefasst:
| Ansatz | Mechanismus | Am besten geeignet für |
|---|---|---|
| Optimistische Sperre | Versionsattribut + bedingte Schreibvorgänge | Geringer Streitwert, kostengünstige Wiederholungsversuche |
| Pessimistisches Sperren (Transaktionen) | TransactWriteItems |
Atomarität mehrerer Gegenstände, mäßiger Streit |
| Pessimistisches Sperren (Lockclient) | Dedizierte Sperrtabelle mit Lease und Heartbeat | Langfristige Workflows, verteilte Koordination |
Wählen Sie eine Strategie zur Kontrolle der Parallelität
Verwenden Sie die folgenden Richtlinien, um den richtigen Ansatz für Ihren Workload zu wählen:
- Verwenden Sie optimistisches Sperren in folgenden Fällen:
-
Konflikte treten selten auf.
Der Versuch, einen fehlgeschlagenen Schreibvorgang zu wiederholen, ist kostengünstig.
Sie aktualisieren jeweils ein einzelnes Element.
- Verwenden Sie Transaktionen, wenn:
-
Sie müssen mehrere Elemente atomar aktualisieren.
Sie benötigen all-or-nothing Semantik für alle Elemente oder Tabellen.
Sie müssen Bedingungsprüfungen mit Schreibvorgängen in einem einzigen Vorgang kombinieren.
- Verwenden Sie den Lock-Client, wenn:
-
Sie müssen den Zugriff auf externe Ressourcen über verteilte Prozesse hinweg koordinieren.
Der kritische Abschnitt ist langwierig und es ist kostspielig, bei Konflikten erneut zu versuchen.
Sie benötigen ein automatisches Ablaufen der Sperren, um Prozessfehler zu beheben.
Anmerkung
Wenn Sie globale DynamoDB-Tabellen verwenden, beachten Sie, dass globale Tabellen für gleichzeitige Aktualisierungen eine Abstimmungsstrategie verwenden, bei der der letzte Writer gewinnt. Optimistisches Sperren mit Versionsnummern funktioniert regionsübergreifend nicht wie erwartet, da ein Schreibvorgang in einer Region einen gleichzeitigen Schreibvorgang in einer anderen Region ohne Versionsprüfung überschreiben kann. Entwerfen Sie Ihre Anwendung so, dass sie Konflikte auf Anwendungsebene behandelt, wenn Sie globale Tabellen verwenden.