Cassandra の軽量トランザクションに実装されている Paxos アルゴリズムに関して、非常に具体的な質問があります。
2 つのノードが同じプロポーザルを同時に発行するとどうなりますか? どちらも ' [applied]: true ' になりますか?
たとえば、次の表を考えてみましょう。
ids:
+-------------------+---------------+
| id_name (varchar) | next_id (int) |
+-------------------+---------------+
| person_id | 1 |
+-------------------+---------------+
そして、このクエリ:
UPDATE ids
SET next_id = 2
WHERE id_name = 'person_id'
IF next_id = 1
このクエリを実行すると、次の応答が返されます。
[{[applied]: True}]
再度実行すると、next_id != 1 であるため受け入れられません。次のようになります。
[{[applied]: False, next_id: 2}]
私の質問は、このクエリを 2 つのノードから並行して実行するとどうなるかということです。どちらも受かる可能性はありますか?
(私のユースケースは、このスタックオーバーフローの質問で説明されています)