Insbesondere habe ich diese Seite angeschaut, wo es heißt:
Wenn Lightweight-Transaktionen zum Schreiben in eine Zeile innerhalb einer Partition verwendet werden, sollten nur Lightweight-Transaktionen für Lese- und Schreiboperationen verwendet werden.
Ich bin verwirrt, wie die Verwendung von LWTs für Leseoperationen aussieht. Insbesondere, wie sich dies auf die Konsistenz der einzelnen Abfragen (und die serialConsistency-Ebenen) bezieht.
Die Beschreibung für SERIAL
Lesekonsistenz wirft weitere Fragen auf:
Erlaubt das Lesen des aktuellen (und möglicherweise nicht festgeschriebenen) Zustands von Daten, ohne eine neue Hinzufügung oder Aktualisierung vorzuschlagen.
Dies deutet darauf hin, dass die Verwendung von SERIAL
für Lesevorgänge nicht "eine LWT verwendet".
Aber dann
ONE
), geringer ist als die zum Schreiben verwendete serialConsistency? SERIAL
Lesevorgänge erzwungen, die Strafe für die Teilnahme an Quoren und den Transaktionsalgorithmus zu übernehmen? Wenn ich diesen Hinweis ignoriere und sowohl serielle als auch nicht-serielle Lese- / Schreibvorgänge durchführe. In welcher Weise scheitern die LWTs?
Wie weiß Cassandra, dass Sie bei Ihnen nach laufenden Transaktionen suchen? Lesen Sie?
Dies ist genau das, was die SERIAL
-Konsistenzstufe anzeigt. Es stellt sicher, dass eine Abfrage Ergebnisse nur zurückgibt, nachdem alle ausstehenden Transaktionen vollständig ausgeführt wurden.
Was ist das neue Update, das während des Lesens vorgeschlagen wird? und wie wirkt sich das auf das Lesen aus?
Ich denke, was das Dokument versucht zu sagen ist, dass das Lesen genau wie ein LWT gehandhabt wird - nur ohne selbst irgendwelche Aktualisierungen vorzunehmen.
Wie würde das funktionieren, wenn die Konsistenz, die Sie gerade lesen (zB ONE), geringer ist als die zum Schreiben verwendete serialConsistency?
Das Lesen von SERIAL
impliziert immer QUORUM
als Konsistenzniveau. Das Lesen mit ONE
wird Ihnen keine Garantien geben, die von SERIAL
bereitgestellt werden, und Sie können am Ende festgefahrene Daten lesen.
Sobald Sie eine LWT für eine Tabelle (oder Zeile ?, oder Spalte?) verwenden, werden alle nicht-SERIELLEN Lesevorgänge gezwungen, die Strafe für die Teilnahme an Quoren und den Transaktionsalgorithmus zu übernehmen?
Nein. Sie können Nicht-SERIELLE Konsistenzebenen für Ihre Abfragen verwenden und sie mit den gleichen Leistungsmerkmalen ausführen wie alle anderen nicht seriellen Abfragen.
Gilt die Anforderung tatsächlich für die gesamte Zeile oder nur für die Spalten, die an der bedingten Anweisung beteiligt sind?
Nein, ich denke, Sie sollten in Ordnung sein, solange Sie verschiedene Spalten für serielle Lese- / Schreibvorgänge (einschließlich Bedingungen) und normale Lese- / Schreibvorgänge verwenden.
Wenn ich diesen Hinweis ignoriere und sowohl serielle als auch nicht-serielle Lese- / Schreibvorgänge durchführe. In welcher Weise scheitern die LWTs?
Wenn Sie reguläre Schreibvorgänge ausführen, die nicht als Teil eines LWT ausgeführt werden, werden diese Schreibvorgänge jederzeit angewendet, ohne den Konsensprozess von LWTs zu stören. Folglich können reguläre Schreibvorgänge theoretisch einen Wert ändern, der zu einer Zeit zwischen dem Auswerten der Bedingung und dem Anwenden der Aktualisierung Teil einer LWT-Bedingung ist. Dies ist eine mögliche Ursache für Inkonsistenzen, die Sie vermeiden möchten, wenn Sie LWTs verwenden.
Tags und Links transactions cassandra datastax-java-driver