固定パーティション

クラスターのサイズが変更になっても、データとパーティションのマッピングが変わらないように、パーティションの数を固定します。

問題

データをクラスターノードのセットに分割するには、それぞれのデータアイテムをそれらのノードにマッピングする必要があります。データをクラスターノードにマッピングするためには、2 つの要件があります。

  • 分散は均一であるべきです。
  • すべてのノードにリクエストを行わなくても、特定のデータアイテムが格納されているクラスターノードを知ることができる必要があります。

多くのストレージシステムの適切なプロキシであるキーバリューストアを考えてみましょう。ハッシュキーを使用して剰余演算を実行し、クラスターノードにマッピングすることで、両方の要件を満たすことができます。 3 ノードのクラスターがある場合、次のようにキーの Alice、Bob、Mary、Philip をマッピングできます。

キーハッシュノードインデックス†
Alice1332998196136944606441979380314519122080
Bob634797384290152467383590004530220472911
Mary377248563040357893724901710848432411262
Philip839809637312161605066711963983394188662

† ノードインデックス = ハッシュ %3

ただし、この方法ではクラスターサイズが変更されると問題が発生します。クラスターに 2 つのノードを追加すると、5 つのノードができます。その場合、マッピングは次のようになります。

キーハッシュノードインデックス†
Alice1332998196136944606441979380314519122083
Bob634797384290152467383590004530220472911
Mary377248563040357893724901710848432411261
Philip839809637312161605066711963983394188661

† ノードインデックス = ハッシュ % 5

この方法では、ほとんどすべてのキーのマッピングが変更されます。わずか数個の新しいクラスターノードを追加しただけでも、すべてのデータを移動する必要があります。データサイズが大きい場合、これは望ましくありません。

ソリューション

最も一般的に使用されるソリューションの 1 つは、データを論理パーティションにマッピングすることです。論理パーティションはクラスターノードにマッピングされます。クラスターノードを追加または削除しても、データとパーティションのマッピングは変更されません。クラスターは事前に構成された数のパーティションで起動されます。この例では、パーティションは 1024 個です。クラスタに新しいノードが追加されても、この数は変更されません。したがって、キーのハッシュを使用してデータをパーティションにマッピングする方法も変わりません。

パーティションがクラスターノード全体に均等に分散されていることが重要です。パーティションを新しいノードに移動する場合は、比較的迅速に、データのほんの一部を移動すれば済みます。

詳細については、oreilly.com のオンライン電子書籍の 第 19 章 をご覧ください。

このパターンは、分散システムのパターン の一部です。

2023 年 11 月 23 日