パーティション戦略
OceanBaseデータベースは、データベースがデータをパーティションに配置する方法を制御するためのさまざまなパーティション戦略を提供しています。
OceanBaseデータベースの基本的なパーティション戦略には、範囲 (Range) パーティション、リスト (List) パーティション、ハッシュ (Hash) パーティションが含まれます。
1次パーティションでは、1種類のデータ割り当て方法のみを使用できます。例えば、List パーティションのみ、または Range パーティションのみを使用します。
サブパーティションを作成する場合、テーブルはまず1つのデータ割り当て方法でパーティション化され、その後2番目のデータ割り当て方法を使用して各パーティションをさらにサブパーティションに分割します。例えば、テーブルに create_time 列と user_id 列が含まれている場合、create_time 列で Range パーティションを使用し、user_id 列で Hash を使用してサブパーティションを作成できます。
Range パーティション
Range パーティションは最も一般的なパーティションタイプであり、通常は日付と共に使用されます。Range パーティションを行う際、データベースはパーティションキーの値の範囲に基づいて行をパーティションにマッピングします。
各 Range パーティションには VALUES LESS THAN 句が含まれており、この句はパーティションの非包含的上限を指定します。この値以上のパーティションキーを持つすべての値は、次のより高いパーティションに追加されます。最初のパーティションを除き、すべてのパーティションには、前のパーティションの VALUES LESS THAN 句で指定された暗黙の下限があります。
Range パーティションでは、最後のパーティションに MAXVALUE を定義できます。MAXVALUE は仮想的な無限大の値を表し、空値を含むパーティションキーの他のすべての可能な値よりも高くソートされます。
Interval パーティション
Interval パーティションは Range パーティションの拡張であり、新規挿入されたデータが既存のパーティションの範囲を超えると、新しいパーティションが自動的に作成されることを許可します。
Hash パーティション
Hash パーティションを行う際、データベースはユーザーが指定したパーティションキーに適用されるハッシュアルゴリズムに基づいて行をパーティションにマッピングします。行のターゲットパーティションは、内部のハッシュ関数によって計算されたハッシュ値と、Hash パーティションの数に基づいて決定されます。パーティション数が2のべき乗の場合、ハッシュアルゴリズムはすべてのパーティションにおいてほぼ均等な行の分布を作成します。Hash アルゴリズムはパーティション間で行を均等に分散させ、パーティションのサイズをほぼ同じにします。
Hash パーティションは、ノード間でデータを均等に分散させる理想的な方法です。Hash パーティションは、特にパーティション化するデータが履歴データではない場合や明確なパーティションキーがない場合に、Range パーティションの使いやすい代替方法でもあります。
Hash パーティションは、更新競合が非常に高いOLTPシステムで非常に有用です。これは、Hash パーティションがテーブルを複数のパーティションに分割し、テーブル全体を変更するのではなく、異なるパーティションへの変更に分割されたテーブルの変更を分解するためです。
List パーティション
List パーティションを行う際、データベースは離散値のリストを各パーティションのパーティションキーとして使用します。パーティションキーは1列または複数列で構成されます。
List パーティションを使用して、個々の行が指定されたパーティションにマッピングされる方法を制御できます。
パーティションキーに基づいてソートすることが不便な場合、List パーティションを使用してデータをグループ化および管理できます。
組み合わせパーティション
範囲 (Range) パーティション、リスト (List) パーティション、ハッシュ (Hash) パーティションは、すべて組み合わせパーティションテーブルのサブパーティション戦略として使用できます。
組み合わせパーティションを行う際、テーブルは1つのデータ割り当て方法でパーティション化され、その後2番目のデータ割り当て方法を使用して各パーティションをさらに細かくサブパーティションに分割します。したがって、組み合わせパーティションは基本的なデータ配分方法を組み合わせています。指定されたパーティションのすべてのサブパーティションは、データの論理的なサブセットを表します。
組み合わせパーティションには以下の利点があります:
SQLステートメントに応じて、一次元または二次元でのパーティションプルーニングを行うことで、パフォーマンスが向上する可能性があります。
クエリは、任意の次元で全パーティションまたは部分パーティションを結合することができます。
単一のテーブルに対して並列バックアップと復元を実行できます。
パーティションの数が単層パーティションよりも多いため、並列実行に有利である可能性があります。
ローリングウィンドウを実装して履歴データをサポートできます。多くのステートメントがパーティションプルーニングまたはパーティション結合から恩恵を受ける場合でも、別の次元でのパーティショニングを続けることができます。
パーティションキーの特性に基づいて、データを異なる方法で格納できます。例えば、特定の製品タイプのデータを読み取り専用の圧縮形式で保存し、他の製品タイプのデータは非圧縮のまま保つことを選択できます。
以下の図は、Range-Hash と Range-List の組み合わせパーティションを示しています。
