同じクライアントタイムスタンプを持つ2つの更新の場合にどの書き込みが勝つかを知りたい。Cassandra - 同一のタイムスタンプを持つ混合列更新の競合解消
初期データ:KeyA: { col1:"val AA", col2:"val BB", col3:"val CC"}
クライアント1は、更新を送信します:KeyA: { col1:"val C1", col2:"val B1"}
クライアント2は、更新を送信します。KeyA: { col1:"val C2", col2:"val B2"}
どちらのアップデートが同じタイムスタンプを持っています。
KeyA
の行クエリではどのような結果が返されますか?
{ col1:"val C1", col2:"val B1", col3:"val CC"}
- クライアント2勝{ col1:"val C2", col2:"val B1", col3:"val CC"}
- - クリント1{ col1:"val C2", col2:"val B2", col3:"val CC"}
を獲得混合更新
I期待、その結果は予測不可能である - 両方の更新が同じタイムスタンプを有するからです。
シナリオも混在可能ですか?
上記の混合更新はできませんが、クライアント2の列の値がより高いバイト値を持つためです。 –
カッサンドラは、原子の書き込みと分離のレベルを提供しますが、これは、1)単一行の突然変異が全体として適用されるか、または拒絶されることのみを保証します2)突然変異はすべての列が書き込まれた後に見えます。しかし、同じタイムスタンプを持つ2番目の並列の突然変異が同じ列の他の値を格納する可能性があるため、1つの突然変異が1列に対して10列を格納しているという意味では、それらの10列すべてが読み込みクエリによって返されるわけではありません。右? –
はい、あなたの例では、クライアント2からの値が返されます。また、行レベルの分離では、書込み中の列のタイムスタンプが最新のものでなければ、書込みからの値が返されることは保証されません。 – nickmbailey