ピアツーピアネットワークでは、 Koorde はChord DHTとDe Bruijn グラフ( De Bruijn シーケンス)に基づく分散ハッシュ テーブル(DHT) システムです。Koorde は Chord のシンプルさを継承し、ノードあたりO (log n )ホップ( nは DHT 内のノード数) と、ノードあたりO (log n )の隣接ノードを持つ検索要求あたり ホップを実現します。
Chord の概念は、識別子がノードとデータの両方を表すことができるリング構造内の広範囲の識別子(例: 2 160 ) に基づいています。後続ノードは、自身とその先行ノード間の ID の全範囲を担当します。
デ・ブリュインのグラフ

Koorde は Chord に基づいていますが、 De Bruijn グラフ( De Bruijn シーケンス)にも基づいています。d次元の de Bruijn グラフには2 d 個の ノードがあり、各ノードにはdビットの一意のIDがあります。ID iを持つノードは、 2 i mod 2 d のノードと2 i + 1 mod 2 dのノードに接続されています。この特性により、ルーティング アルゴリズムは、宛先 ID のビットを連続的に「シフトイン」することでdホップで任意の宛先にルーティングできますが、 mod 1 dと3 dの間の距離の次元が等しい場合に限られます。
ノードmからノードkへのメッセージのルーティングは、数値mを取り、数値がkに置き換えられるまでkのビットを1 つずつシフトすることで実現されます。各シフトは、次の中間アドレスへのルーティング ホップに対応します。各ノードの隣接ノードは、0 または 1 を自身のアドレスにシフトした 2 つの可能な結果であるため、ホップは有効です。de Bruijn グラフの構造により、kの最後のビットがシフトされると、クエリはノードkに送信されます。ノードk は、キーk が存在するかどうかを応答します。
ルーティング例

たとえば、メッセージをノード 2 ( 010) からノード 6 ( 110) にルーティングする必要がある場合、手順は次のようになります。
- ノード 2 はメッセージをノード 5 にルーティングし ( 2 i + 1 mod 8への接続を使用)、ビットを左にシフトして、
1最も若いビット (右側) として配置します。 - ノード 5 はメッセージをノード 3 にルーティングし ( 2 i + 1 mod 8への接続を使用)、ビットを左にシフトして、
1最も若いビット (右側) として配置します。 - ノード 3 はメッセージをノード 6 にルーティングし ( 2 i mod 8への接続を使用)、ビットを左にシフトして、
0最も若いビット (右側) として配置します。
非定数次数コーデ
d次元のde Bruijn は、基数 kに一般化できます。この場合、ノードiはノードk • i + j mod kdに接続されます( 0 ≤ j < k ) 。直径はΘ (log k n )に縮小されます。Koord ノードi は、k • i mod kdの先行ノードから始まるk 個の連続するノードへのポインターを維持します。各 de Bruijn ルーティングステップは、予想される定数個のメッセージでエミュレートできるため、ルーティングではO (log k n )の予想されるホップが使用されます。k = Θ(log n ) の場合、次数Θ ( log n )と直径が得られます。
ルックアップアルゴリズム
関数n.lookup ( k , shift , i ) { k ∈ ( n , s ]の場合はsを返します。そうでない場合はi ∈ ( n , s ]の場合はp.lookup ( k , shift << 1 , i∘topBit ( shift ))を返します。そうでない場合はs.lookup ( k , shift , i )を返します。}
ノードにおけるKoorde検索アルゴリズムの疑似コードn:
k鍵はIは架空の De Bruijn ノードですpの前身への言及である2nsは、n
参考文献
- 「インターネットアルゴリズム」グレッグ・プラクストン著、2003年秋: [1]
- M. Frans Kaashoek と David R. Karger による「Koorde: シンプルな次数最適分散ハッシュテーブル」: [2]
- コードとコードの説明: [3]
