Es gibt einen Mangel an klaren Informationen in diesem Bereich, aber wir können einige ziemlich starke Schlüsse ziehen. Viele Leute nehmen an, dass DynamoDB alle Ideen von seinem Vorgänger "Dynamo" implementiert, aber das scheint nicht der Fall zu sein, und es ist wichtig, die beiden getrennt in Ihrem Kopf zu halten. Das ursprüngliche Dynamo-System wurde von Amazon in der Dynamo Paper sorgfältig beschrieben. Wenn Sie darüber nachdenken, ist es auch hilfreich, wenn Sie mit den verteilten Datenbanken vertraut sind, die auf den Dynamo-Ideen basieren, wie Riak und Cassandra. Insbesondere Apache Cassandra, die eine ganze Reihe von Kompromissen in Bezug auf CAP bietet.
Durch den Vergleich von DynamoDB, der klar zu den verfügbaren Optionen in Cassandra verteilt ist, denke ich, können wir sehen, wo es im CAP-Raum platziert ist. Laut Amazon "DynamoDB verwaltet mehrere Kopien jedes Elements, um die Dauerhaftigkeit zu gewährleisten. Wenn Sie eine 'Operation erfolgreich' Antwort auf Ihre Schreibanforderung erhalten, stellt DynamoDB sicher, dass der Schreibvorgang auf mehreren Servern dauerhaft ist. Es dauert jedoch einige Zeit, bis sich das Update verbreitet zu allen Kopien. " (Data Read and Consistency Considerations). Außerdem muss DynamoDB die Anwendung nicht wie bei Dynamo zur Konfliktlösung verwenden. Vorausgesetzt, sie möchten so viel Verfügbarkeit wie möglich bereitstellen, da sie sagen, dass sie auf mehrere Server schreiben, entsprechen die Schreibvorgänge in DyanmoDB Cassandra QUORUM
. Außerdem scheint es, dass DynamoDB hinted handoff nicht unterstützt, da dies zu Situationen führen kann, die eine Konfliktlösung erfordern. Um eine maximale Verfügbarkeit zu erreichen, müsste ein inkonsistentes Lesen nur dem Äquivalent von Cassandras ONE
entsprechen. Um jedoch einen konsistenten Lesevorgang zu erhalten, würden die Quorum-Schreibvorgänge einen Pegelstand von QUORUM
erfordern (der Konsistenz von R + W> N folgend). Weitere Informationen zu Ebenen in Cassandra finden Sie unter About Data Consistency in Cassandra.
Zusammenfassend stelle ich fest, dass:
- Writes sind „Quorum“, so die Mehrheit der Knoten der Reihe zur Verfügung repliziert muss für die Schreib um erfolgreich zu sein
- Uneinheitliche Liest sind „One "Daher muss nur ein einzelner Knoten mit der Zeile verfügbar sein, aber die zurückgegebenen Daten sind möglicherweise veraltet.
- Konsistente Lesevorgänge sind" Quorum ". Daher muss die Mehrzahl der Knoten, auf die die Zeile repliziert wird, für das Lesen verfügbar sein um erfolgreich zu sein
So haben Schreibvorgänge die gleiche Verfügbarkeit wie ein konsistenter Lesevorgang.
Um speziell Ihre Frage zu zwei simultanen bedingten Schreibvorgängen zu beantworten, schlägt eine oder beide fehl, je nachdem wie viele Knoten ausgefallen sind. Es wird jedoch niemals eine Inkonsistenz geben. Die Verfügbarkeit der Schreibvorgänge hat wirklich nichts damit zu tun, ob sie bedingt sind oder nicht, denke ich.