2016-04-20 9 views
0

私はCouchbaseをアプリケーション用にテストしていて、XDCRで疑問に思っていました。私はConflict resolution in XDCRと読みました。XDCRを使用した同時更新Couchbase

私はXDCRを使用してバケットを両方の方法で複製している2つのクラスタ(それぞれ1つのサーバー、たとえばS1とS2)を持っています。

S1とS2が同じ文書を同時に変更する場合、結果の更新はどのように決定されるのですか?両者が文書を一度変更すると考えていますか?彼らは文書に異なる数の変更を加えた場合、答えは変わるでしょうか?

答えて

0

基本的に同じ数のリビジョンがある場合、どちらもアクティブ - アクティブシステムのように「正しい」でしょう。 あなたはS1とS2の変更を同時に行いました。誰も変更を取得しません。 S1またはS2が再び更新されると、他のサーバーは更新された文書を取得します。

+0

このようなシナリオでは更新が失われる可能性がありますか? –

+0

私は失われません。両方のクラスタにはドキュメントがあり、それらはまったく異なっています。次のアップデートではそれが修正されます。 –

1

現在、Couchbaseはリビジョンベースの競合解決を使用しています。これは、競合解決が行われる前にほとんどの時間更新された文書が勝つことを意味します。両方の文書が同じ時間だけ更新された場合、それらのうちの1つが勝つためにランダムに選択されます。例えば:アクティブ - アクティブ・レプリケーションでのCouchbase XDCRを使用する場合

S1: Updated once, S2: Updated twice. S2 wins 
S1: Updated twice, S2: Updated once. S1 wins 
S1: Updated once, S2: Updated once. Random winner 

私はほとんどのユースケースのためだけ回避するために、クラスタ内の1つの文書の特定のセットと他のクラスタ内のドキュメントの他のセットを更新することをお勧めします同時書き込みに関する問題

また、上記のように、この競合解消モデルは、特定の用途にのみ有益です。将来、より多くの競合解消モデルが導入され、ユースケースに最も適したモデルを選択することができます。近い将来に「Last Write Wins」モデルを追加する必要があります。このモデルでは、より細かい競合解消を実現するためにベクトルクロックを使用します。

関連する問題