パーティショニング戦略
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は仮想無限値を表し、そのソートは空値を含むパーティションキーの他のすべての可能な値よりも高くなります。
Hashパーティション
Hashパーティションを行う際、データベースはユーザーが指定したパーティションキーに適用されるハッシュアルゴリズムに基づいて行をパーティションにマッピングします。行のターゲットパーティションは、内部ハッシュ関数によって計算されるハッシュ値と、ハッシュパーティションの数に基づいて決定されます。パーティション数が2のべき乗の場合、ハッシュアルゴリズムはすべてのパーティション間でほぼ均等な行の分布を作成します。Hashアルゴリズムはパーティション間で行を均等に分散し、パーティションのサイズをほぼ同じにします。
Hashパーティションは、ノード間でデータを均等に分散する理想的な方法です。また、特にパーティション化するデータが履歴データではない場合や明確なパーティションキーがない場合には、Rangeパーティションの使いやすい代替方法でもあります。
Hashパーティションは、更新競合が非常に多いOLTPシステムで非常に有用です。これは、Hashパーティションがテーブルをいくつかのパーティションに分割し、テーブル全体を変更する代わりに、異なるパーティションでの変更にテーブルの変更を分散するためです。
Listパーティション
Listパーティションを行う際、データベースは離散値リストを各パーティションのパーティションキーとして使用します。パーティションキーは1つまたは複数の列で構成されます。
Listパーティションを使用して、個々の行が指定されたパーティションにどのようにマッピングされるかを制御できます。
パーティションキーに基づいてソートすることが不便な場合、Listパーティションを使用してデータをグループ化および管理できます。
コンポジットパーティション
範囲(Range)パーティション、リスト(List)パーティション、およびハッシュ(Hash)パーティションは、コンポジットパーティションテーブルのサブパーティション戦略として使用できます。
コンポジットパーティションを行う際、テーブルは1種類のデータ割り当て方法でパーティションを作成し、次に2種目のデータ割り当て方法を使用して各パーティションをさらに細分化します。したがって、コンポジットパーティションは基本的なデータ配布方法を組み合わせています。指定されたパーティションのすべてのサブパーティションは、データの論理的なサブセットを表します。
コンポジットパーティションには以下の利点があります:
SQLステートメントに基づいて、1次元または2次元でパーティショントリミングを行うことでパフォーマンスが向上する可能性があります。
クエリは、任意の次元でフルパーティションまたは部分的パーティション結合を使用できます。
単一のテーブルに対して並列バックアップと復旧を実行できます。
パーティションの数は単層パーティションよりも多く、これはパラレル実行に有利になる可能性があります。
ローリングウィンドウを実装して履歴データをサポートできます。多くのステートメントがパーティショントリミングまたはパーティション結合から恩恵を受ける場合、別の次元でパーティションを行うことができます。
パーティションキーの識別に基づいて、データを異なる方法で保存できます。例えば、特定の製品タイプのデータを読み取り専用の圧縮形式で保存し、他の製品タイプのデータは圧縮しないことを選択できます。
次の図は、Range-HashとRange-Listのコンポジットパーティションを示しています。
