循環ハッシュアルゴリズムは、静的なターゲットのセットが与えられた場合に一貫性を提供します。例えば:
- 私は最初のターゲットのセットを持っています、それらをと呼びましょう
A
、B
そしてC
。 - 私は鍵を持っています、それを呼びましょう
x
- 循環ハッシュ関数があります。それを呼び出しましょう
hash(key, targets)
- 私が電話するとき
hash(x, [A,B,C])
、x
常にハッシュしますA
十分明白なようです。A
私が常に与えられるという事実はx
、円形ハッシュを使用するときに私が期待する一貫性を表しています。ただし、新しいノードを追加するとどうなるかを考えてみましょうD
。
- 私のターゲットセットは、、、、およびを含むように再調整され
A
ますB
C
D
- キーを再適用
x
しますhash(x, [A,B,C,D])
- サークルのバランスが崩れているので、もう手に入る保証はあり
A
ません
私は何かが足りないのですか、それとも運が悪いのですか?hash(x, [B,A,D,C])
ノードの並べ替えを開始した場合(例)、または既存のノードリストの途中に新しいノードを挿入した場合(例) 、問題はさらに悪化しますhash(x, [A,AA,B,C,D])
。循環ハッシュのアカデミックな側面を少し調べましたが、このタイプの「スケーリングの一貫性」は、その主要な懸念事項の1つではないようです。たぶん私は間違ったタイプのハッシュアルゴリズムを使用しているだけですか?