キー範囲パーティション

データをソートされたキー範囲にパーティション分割して、レンジクエリを効率的に処理します。

問題

データをクラスタノードのセット全体に分割するには、各データアイテムをノードにマップする必要があります。ユーザーが開始キーと終了キーのみを指定してキーの範囲を照会すると、取得する値のためにすべてのパーティションが照会される必要があります。1つのリクエストに対してすべてのパーティションを照会することは、最適ではありません。

固定パーティションと同様、キーバリューストアを例にとります。作者名をハッシュベースのマップを使用して格納できます。

キーハッシュパーティション†ノード
alice13329981961369446064419793803145191220800
bob6347973842901524673835900045302204729111
mary3772485630403578937249017108484324112651
philip8398096373121616050667119639833941886622

† パーティション = ハッシュ % パーティションの数 (9)

ユーザーが「a」から「f」までの文字で始まる一連の名前の値を取得する場合、キーのハッシュがパーティションへのキーのマッピングに使用されている場合、データをフェッチするパーティションを知る方法はありません。必要な値を取得するには、すべてのパーティションを照会する必要があります。

解決策

ソートされた順序で範囲指定されたキーに対して論理パーティションを作成します。その後、パーティションはクラスタノードにマップできます。データの範囲を照会するために、クライアントは指定された範囲からキーを含むすべてのパーティションを取得し、それらの特定のパーティションのみを照会して必要な値を取得できます。

詳細については、oreilly.com のオンライン電子書籍の Chapter 20 に進んでください。

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

2023 年 11 月 23 日