最終整合性で使用するMerkle Treesの説明
質問
メルクルの木 は、分散され複製されたキー/値ストアにおいて、アンチエントロピーのメカニズムとして使用されています。
アンチエントロピーのメカニズムが良いものであることは間違いありません。 ただ、なぜ Merkle ツリー が一般的なアプローチである理由がよくわかりません。
-
完全な Merkle ツリーをピアに送信するには、ローカルのキー スペースをそのピアに送信し、ツリーの最下層に格納されている各キー値のハッシュも一緒に送信する必要があります。 ツリーの最下層に格納されている各キー値のハッシュとともに、ローカルのキー スペースをその相手に送信します。
-
ピアから送信されたMerkleツリーを差分するためには、自分自身のMerkleツリーを持つことが必要です。
両方のピアがすでにソートされたキー/値-ハッシュ空間を持っている必要があるので、不一致を検出するために線形マージを行うのはどうでしょうか?
私は、維持費を考慮すると、ツリー構造が何らかの節約になるということに納得がいきません。 それは ツリーの葉の上の線形通過は、ワイヤ上の表現を直列化するためだけにすでに行われているという事実を考慮すると、ツリー構造が何らかの節約になるとは思えません。 .
これを解決するために、ノードがハッシュダイジェストの配列を交換できるようにすることが、藁人形的な代替案です。 これは、増分更新され、モジュロリング位置によってバケット化されます。
私は何を見逃しているのでしょうか?
どのように解決するのですか?
メルクルツリーは、同期する際のデータ転送量を制限します。一般的な前提は
- ネットワーク I/O は、ローカル I/O + ハッシュの計算よりも高価である。
- ソートされたキー空間全体を転送することは、いくつかのステップに渡って徐々に比較を制限するよりも高価です。
- キースペースは類似性よりも不一致の方が少ない。
Merkle Treeの交換はこのようになります。
- ツリーのルート (1 つのハッシュ値のリスト) から開始します。
- オリジンは現在のレベルのハッシュのリストを送信します。
- デスティネーションはハッシュのリストを自分のと照らし合わせて差分を取り 異なるサブツリーを要求します。もし 差分がなければ、リクエストは終了します。
- リーフノードに到達するまで、ステップ2と3を繰り返す。
- オリジンは、結果として得られるセットのキーの値を送信します。
典型的なケースでは、キー空間を同期させる複雑さはlog(N)になります。そう、極端な話、共通のキーがない場合、この操作はハッシュのソートされたリスト全体を送信することと同じになり、O(N) になります。書き込みがあったときに動的に Merkle ツリーを構築し、ディスク上にシリアライズされたフォームを保持することで、Merkle ツリーの構築費用を償却することができます。
DynamoやCassandraがどのようにMerkleツリーを使用するかは言えませんが、Riakはクラスタ内同期のためにそれらを使用することを止めました(ほとんどの場合、ヒンテッドハンドオフとリードリペアで十分です)。私たちは、いくつかの内部アーキテクチャのビットが変更された後、それらを後で追加する計画を持っています。
Riakに関するより多くの情報については、メーリングリストに参加することをお勧めします。 http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
関連
-
[解決済み】パックマン:主にどのようなヒューリスティックが使われているのですか?
-
[解決済み] グラフにおいて最小容量が最大となる経路の探索
-
[解決済み] Octave : ロジスティック回帰 : fmincg と fminunc の違い
-
[解決済み] DPLLアルゴリズムはどのように動作しますか?[クローズド]
-
[解決済み] ビッグシータ記法の証明
-
[解決済み] 複雑さ O(log(n)) は O(sqrt(n)) と同等か?
-
[解決済み] わかりやすい英語での最終的な一貫性
-
[解決済み] 擬似多項式時間とは何ですか?多項式時間とどう違うのですか?
-
[解決済み] 式(エクスプレッション)パーサー(優先順位付き)?
-
[解決済み] 学校の時間割を作成するアルゴリズム
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] DFS-Forest Componentとは?
-
[解決済み] グラフにおいて最小容量が最大となる経路の探索
-
[解決済み] 2つのNFAの交点の求め方
-
[解決済み] 解いてみてください。T(n) = T(n-1) + n [重複] とする。
-
[解決済み] ラジアンを度数に変換する方法は?
-
[解決済み] ヒープ構築のトップダウン・アプローチはボトムアップよりも成長度合いがO(n)よりもO(log n)低いにもかかわらず、なぜ効率が悪いのでしょうか?
-
[解決済み] 整数の絶対値の計算方法
-
[解決済み] 重なり合う円の面積の合計
-
[解決済み] LR、SLR、LALRパーサーの違いは何ですか?
-
[解決済み] 挿入ソートとバブルソートアルゴリズムの比較