読み取りと書き込みの両方にクォーラムがある場合、HectorとCassandraを使用して整合性の問題が発生しました。
MultigetSubSliceQueryを使用して、スーパー列の制限サイズ100から行をクエリし、それを読み取ってから削除します。そして、別のことを始めましょう。
前のクエリで削除する必要のある行が、次のクエリからも表示されていることがわかりました。
また、通常の列ファミリーから、1つの列の値をstatus ='FALSE'からstatus='TRUE'に更新しましたが、次にクエリを実行したとき、ステータスはまだ'FALSE'でした。
より詳しく:
- 毎回起こっているわけではありません(1 / 10,000)
- 2つのクエリ間の時間は約500ミリ秒です(ただし、2秒が経過した1組のクエリが見つかりましたが、それでも一貫性の問題を示しています)
- クラスタ時間同期ソリューションとしてntpを使用します。
- 6つのノードがあり、レプリケーション係数は3です。
Cassandraは「結果整合性」があるはずであり、Cassandra内での書き込みの前に読み取りが行われない可能性があることを理解しています。でも2秒?!もしそうなら、クォーラムまたは他の整合性レベルの構成を持つことは無意味ではありませんか?
それで、まず第一に、それはカサンドラの正しい振る舞いですか、そうでない場合、さらなる投資のためにどのデータを分析する必要がありますか?