キー範囲パーティション
データをソートされたキー範囲にパーティション分割して、レンジクエリを効率的に処理します。
問題
データをクラスタノードのセット全体に分割するには、各データアイテムをノードにマップする必要があります。ユーザーが開始キーと終了キーのみを指定してキーの範囲を照会すると、取得する値のためにすべてのパーティションが照会される必要があります。1つのリクエストに対してすべてのパーティションを照会することは、最適ではありません。
固定パーティションと同様、キーバリューストアを例にとります。作者名をハッシュベースのマップを使用して格納できます。
キー | ハッシュ | パーティション† | ノード |
---|---|---|---|
alice | 133299819613694460644197938031451912208 | 0 | 0 |
bob | 63479738429015246738359000453022047291 | 1 | 1 |
mary | 37724856304035789372490171084843241126 | 5 | 1 |
philip | 83980963731216160506671196398339418866 | 2 | 2 |
† パーティション = ハッシュ % パーティションの数 (9)
ユーザーが「a」から「f」までの文字で始まる一連の名前の値を取得する場合、キーのハッシュがパーティションへのキーのマッピングに使用されている場合、データをフェッチするパーティションを知る方法はありません。必要な値を取得するには、すべてのパーティションを照会する必要があります。
解決策
ソートされた順序で範囲指定されたキーに対して論理パーティションを作成します。その後、パーティションはクラスタノードにマップできます。データの範囲を照会するために、クライアントは指定された範囲からキーを含むすべてのパーティションを取得し、それらの特定のパーティションのみを照会して必要な値を取得できます。
詳細については、oreilly.com のオンライン電子書籍の Chapter 20 に進んでください。
このパターンは 分散システムのパターン の一部です。
2023 年 11 月 23 日