整合性ハッシュ:環でノード追加に強い
キーとノードを同じハッシュ環に置き、ノード追加・削除で動くキーだけを見る。素朴な mod N 割当と並べて移動量の差を体感します。
3
20
×1
直前操作で動いたキー
—
同じ操作(mod N)
—
理論移動量 ≈ K/N
—
負荷の偏り(最大/平均)
—
整合性ハッシュ(環+時計回り割当)
● ノード(環上の位置) · キー 点と弧は所属ノードの色。
直前の操作で動いたキーは赤く大きく点滅します。
直前の操作で動いたキーは赤く大きく点滅します。
素朴な mod N 割当(参照棒グラフ)
各バー = ノード i が持つキー数。同じ操作を
hash(key) mod N で行うと
色のついた分が動き、ほぼ全キーが入れ替わります。
分散DBやキャッシュでは、たくさんのキーを複数のノード(サーバ)に振り分けます。素朴なやり方は node = hash(key) mod N。簡単ですが、ノードを 1 台足すと N が変わってほぼ全キーの行き先が変わり、大移動(リハッシュ)が起きます。
整合性ハッシュ(consistent hashing)は、キーもノードも 0〜2m−1 の同じ環に hash で配置し、各キーを「時計回りで最初に出会うノード」に割り当てます。ノードを足しても、動くのはその新ノードの直前区間のキーだけ=平均 K/N 個で済みます。
スライダーとボタンを動かし、左(整合性ハッシュ)と右(mod N)で移動するキー数の差を見比べてみましょう。
整合性ハッシュ(consistent hashing)は、キーもノードも 0〜2m−1 の同じ環に hash で配置し、各キーを「時計回りで最初に出会うノード」に割り当てます。ノードを足しても、動くのはその新ノードの直前区間のキーだけ=平均 K/N 個で済みます。
スライダーとボタンを動かし、左(整合性ハッシュ)と右(mod N)で移動するキー数の差を見比べてみましょう。
いま何が起きている?
ここがポイント
- 環+時計回り ── キーは時計回りで最初に出会うノードのもの。ノード追加で動くのはその新ノード直前の区間だけ。
- 移動量 ≈ K/N ── 整合性ハッシュの追加/削除で動くキーは平均 K/N 個。一方 mod N はほぼ全 K 個が動く。
- 仮想ノード ── 1 台を環上の複数点として置くと区間の偏りが均され、各ノードの負荷(最大/平均)が 1 に近づく。
- 目的が別 ── これは「キー→ノード」の分散配置の話。ハッシュ表の衝突解決(hash-table)とは狙いが異なる。