1

私のウェブサイトのデータベースとしてcouchbaseを使用します。ウェブサイトを国際化する予定なので、遅延を低く抑えるために、おそらく米国、ヨーロッパ、オーストラリアにデータセンターを設置する予定です。また、データセンター間の帯域幅を最小限に抑えたいので、ユーザーがデータを保存するたびに、すべてのデータセンターに対して並列更新 (ajax) を開始する予定です。

私の質問は次のとおりです。同じデータを 3 つのクラスターすべてにほぼ同時に挿入した場合、couchbase はこのデータが同一で​​あり、したがってデータセンター間で複製する必要がないことを認識するのに十分スマートですか?

私はこのビデオを見て、彼は、ドキュメントが更新されると cas 値が更新され、複製が必要なドキュメントを決定するために使用されると説明しました。クラスター上のドキュメントが更新されたときにcas値が更新された場合、答えは「いいえ」であると思います.3つのクラスターすべてに一度に一部のデータのみを送信している可能性が非常に高いためです。が 1 つのクラスタにのみ送信されると、そのクラスタの cas が一時的に同期されなくなります。ただし、cas 値がドキュメントごとに独立している場合、答えは「はい」になる可能性があります。ドキュメントごとに cas 値を独立させるために変更できるオプションがいくつかあるのではないでしょうか?

4

1 に答える 1

0

Couchbase は、保存されているドキュメントの本文について何も知りません。その観点からは、同じドキュメントを 3 つのクラスター (すべて XDCR で双方向にリンクされている) に書き込むと、その ID を持つドキュメントに対する 3 つの異なるドキュメント ミューテーションと見なされます。Couchbaseは、通常の競合解決プロセスを実行して、3つのうちどれが「勝者」かを選択します。これにより、「負けた」リビジョンとまったく同じコンテンツが含まれている可能性があるにもかかわらず、「勝った」ドキュメントが他の 2 つのクラスタに転送されます。

異なるクラスターで同じドキュメント ID に書き込むときはいつでも、競合の解決によって勝者のリビジョンが選択されることに注意する必要があります。注意しないと、意図しないデータを上書きする可能性があります。

通常、ユースケースには別のアプローチが選択されます。ユーザーごとに、おそらく地理に基づいて「ホーム」クラスターが選択されます。すべての操作は、そのユーザーのこのクラスターに関連付けられています。そのクラスターがダウンしている場合は、別のクラスターに切り替えることができます。このアプローチを使用すると、複数のクラスターへの書き込みを回避でき、明確に定義された条件下でのみクラスターを変更できます。

CAS 値は、リビジョンの単なる不透明な識別子です。上記の例では、3 つのドキュメント書き込みすべてが異なる CAS 値になります (これが、Couchbase がそれらを異なるものと見なし、勝者を選択する必要がある理由の 1 つです)。

競合解決プロセスは、マニュアルのこのセクションに記載されています

于 2013-04-08T19:50:16.137 に答える