In DynamoDB ein Atomic Counter ist eine Zahl, die Bedingungen RennenDynamoDB Atom Zähler für Kontostand
Was für eine Zahl atomarer macht vermeidet, und ich kann hinzufügen/subtrahieren von einem Schwimmer in Nicht-Einheitswerte ?
Zur Zeit mache ich: "SET Balance = Balance +: change"
(lange Version) Ich versuche DynamoDB für Benutzerguthaben zu verwenden, so Genauigkeit ist von größter Bedeutung. Die Waage kann gleichzeitig von mehreren Quellen aktualisiert werden. Es ist nicht notwendig, das Guthaben vorab abzurufen, wir werden niemals eine Transaktion ablehnen, ich sorge mich nur darum, dass wir, wenn alle Operationen beendet sind, das richtige Gleichgewicht haben. Die Operationen können auch in beliebiger Reihenfolge angewendet werden, solange das Endergebnis korrekt ist.
Von dem, was ich verstehe, sollte dies in Ordnung sein, aber ich habe keine Atomschritt Beispiele gesehen, die als „1“ Änderungen der Werte anderer tun entsteht
Meine Bedenken, weil Fragen wie Amazon DynamoDB Conditional Writes and Atomic Counters bedingte schreibt für die Verwendung empfehlen ähnliche Situation, die wie eine schreckliche Idee klingt. Wenn ich den Kontostand abrufe, ändere und einen bedingten Schreibvorgang ausführe, könnte der Schreibvorgang fehlschlagen, wenn sich der Wert in der Zwischenzeit geändert hat. Allerdings Balance ist die Definition von unternehmenskritischen, und ich bin immer nervös, wenn Dokumentation ignorieren
-zusätzliche Info-
Alle Schreib aus einer Lambda-Funktion stammen, und ich erwarte, dass so ziemlich 100% im Falsch schreibt. Ich führe jedoch auch eine Historie aller Änderungen und, falls sich das Guthaben in einem "unbekannten" Zustand befindet (z. B. Netzwerk-Timeout), könnte die Tabelle gesperrt und die korrekte Bilanz aus dem Verlauf neu berechnet werden.
Dies ist meiner Meinung nach die beste "normale" Operation. 99,999% der Zeit funktionieren alle Updates mit einem einzigen Schreibvorgang. Das Scheitern könnte sehr kostspielig sein, da wir den gesamten Verlauf eines Kunden scannen müssen, um das Gleichgewicht wieder herzustellen, aber im Hinblick auf den Trade-off scheint das eine ziemlich sichere Wette zu sein.
All diese Dokumente sind sicher, dass Änderungen auf der Grundlage der richtigen clientseitige Version einer Anzahl hergestellt werden. Ich erhalte nie "Balance", also besteht keine Gefahr für eine veraltete Version. – FrozenKiwi
Wenn der Aktualisierungsvorgang keine Konsistenz gewährleistet, sehe ich einfach keine Möglichkeit, eine korrekte Nummer zu garantieren, unabhängig davon, welche Methode ich verwende. Für einen bedingten Schreibvorgang schreiben wir IFF, die gespeicherte Zahl stimmt mit unserer erwarteten Anfangsbedingung überein. Wenn die Aktualisierung jedoch nicht konsistent ist, ist es möglich, dass der IFF-Test bestanden wird (Init-Wert stimmt überein), ein externer Prozess ändert den Wert , dann schreiben wir über die Änderung mit unserem Wert – FrozenKiwi
Um es anders auszudrücken, wenn eine Zahl ein "Atomic Counter" ist, wenn "Update" -Operationen durchgeführt werden, dann funktioniert entweder der Use Case, oder Atomic Counters konnten die Erwartungen nicht erfüllen. Wenn ein Atomic Counter ein spezieller Zahlentyp ist oder nur Funktionen funktionieren, wenn er um "1" erhöht wird, zählen meine Operationen nicht als atomar und ich bin poched :) – FrozenKiwi