1

ネットワーク内の複数の場所に分散された一連のデータベースがあります。そのデータベースにデータを保存する必要がある 1 つのクライアント。

データが常に保存されるようにする必要があります。

障害点となる 1 つのマスターに接続することになるため、同期/非同期レプリケーションを使用してレプリカ セットを整理することはできません。そのため、クライアントから既知のすべてのデータベースにデータを送信します。どうやら、1 つのデータベースが保存に失敗する可能性があるため、他のデータベースの書き込みに依存しています。これらのセットは重複していますが、最終的にDBに格納された異なるデータセットを取得します。(例 DB1 -> [1, 2, 3]、DB2 -> [1, 3]、DB3 -> [2,3,4])

これらの DB から読み取るときに一貫したデータを取得するにはどうすればよいですか? データセットを正常にマージできるようにするには、データを書き込むクライアントと読み取るクライアントにどのような手法を適用する必要がありますか?

4

2 に答える 2

2

あなたが求めているのは、基本的にはコンピューター サイエンスの分野全体です。これは非常に重要な問題であり、驚くほど多くのことが不可能であることがわかります。

また、単に「一貫した」データと言うだけでは十分な定義ではないことに注意してください。一貫性にはあらゆる種類のレベルがあります (read-your-own-writes、reads-follow-writes、monotonic read、linearizable、causal など)。(非常に大まかな意味で)おそらく意味があると思います:データベースを 1 つだけ使用すると得られます。

質問に直接答えるには、読み取りクォーラム サイズと書き込みクォーラム サイズを決定する必要があります。これらのサイズは、読み取りと書き込みが少なくとも 1 つのデータベース インスタンスでオーバーラップするように選択する必要があります。書き込みレイテンシーを最適化したい場合は、より小さな書き込みクォーラムを使用し、読み取りレイテンシーを最適化したい場合はその逆を行います。

重複する読み取り/書き込みクォーラムのより詳細な説明は、Weighted Voting for Replicated Data にあります。これは、複製の分野で独創的な作品と見なされています。

また、データベース インスタンスを追加または削除するときは、クォーラムのオーバーラップの動作にも注意してください。比較的静的なトポロジのように思えますが、そうでない場合は、まったく異なる一連の選択を行う必要があります。

最後に - そしてここに本当の歯のキックがあります - 私が説明したことは、場合によっては実際には (どのような定義でも) 一貫性を提供しません (ダニエル・アバディの when andy why の説明が好きです) が、多くのシステムでは良い結果が得られます十分な一貫性。必要な一貫性のレベルを正確に決定するのはあなた次第です。

于 2013-03-12T14:37:54.647 に答える
0

「マスター」を必要としない双方向/三方向のレプリケーション ソフトウェアがあります。トランザクション ログ ベースのレプリケーションも使用できます。

何をどのように使用できるかは、使用するデータベース製品によって異なります。

HTH

于 2013-03-12T14:20:28.397 に答える