Pastry
各ノードには128bitsのノードIDが割り当てられる 距離関数としてはIDを特定のビット単位で区切った際の共通部分を用いる
Pastryネットワークのノードが保持するデータ構造は以下の3つである リーフセット
ノードは自分より大きく自分に最も近いノード、自分より小さく自分に最も近いノードを均等にL個保持している
特に自分の両隣に関しては検索結果の誤りにつながるので頻繁に更新を行う
経路表
まずIDを$ bbitsで区切り、各セクションを改めて数値化して新たなプレフィクスを作る
自分のプレフィクスの1桁目が異なるIDを1行目、2桁目が異なるIDを2列目...と入れていく
https://scrapbox.io/files/60f78e5450ce0d0022fb0189.jpeg
上の例の場合、1行目の1つのセルに入るIDは$ 2^{(4-1)b}=64通りだが、そのうちの1つを経路表に書き込むこととする
この手順で経路表を生成するとセルの個数は$ \frac{128}{b}\times(2^{b}-1)になるが、実装の容易さのために自分のIDと該当桁が一致するIDのセルも含めた$ \frac{128}{b}\times2^{b}の表が作られる
この経路表のエッセンスとしては、下の行に行けば行くほど自分のIDと似たIDになる。(画像参照)つまり、自分と近いところの情報を密に、遠いところを疎に持つことができるのである
近隣ノードセット
IDの数値的にではなく、物理的に近いノードの集合
アプリケーション側から渡されるメトリック(メッセージのポップ数とか)を元に構成される
実際に検索時に利用されるわけではなく、経路表を生成する際になるべく物理的に近いノードを選べるようにするために利用される
PastryはChordと同様に3つの手続きを踏む
検索手続き