テーブルグループ(Table Group)は、業務的に関連性の強い一連のテーブルを論理的にまとめる概念です。OceanBaseデータベースでは、デフォルトで異なるテーブルのデータは異なるストレージノードにランダムに分散配置されています。テーブルグループを作成することで、この一連のテーブルの物理的な近接関係を明示的に定義し、関連クエリのパフォーマンスとデータ管理の利便性を最適化できます。
テーブルグループのSHARDINGプロパティ
過去のバージョン(V3.x)では、テーブルグループは厳密なパーティション定義を持っており、テーブルがテーブルグループに追加される制限が厳しかったです。V4.2.0以降のバージョンから、テーブルグループにSHARDINGプロパティが導入され、従来のパーティション概念に取って代わりました。このプロパティは、テーブルグループ内の各テーブルに対応するパーティションがクラスタ内でどのように集約および分散されるかを決定します。これら集約されたパーティションの集合をパーティショングループ(Partition Group)と呼びます。
SHARDINGプロパティには以下の3つのモードがあり、それぞれ異なるデータ分散戦略に対応しています:
SHARDING = NONE:テーブルグループ内の各テーブルのパーティション方式に制限がなく、テーブル間でパーティションが集約されないことを示します。V4.4.2 BP1以前のバージョンでは、NONEの意味にはすべてのパーティションが同一のログストリーム上に分散されずに単一ノードに集約されることも含まれていました。新バージョンではこの意味は削除され、具体的な分散範囲はSCOPEプロパティに依存します。SHARDING = PARTITION:テーブルグループ内の各テーブルのデータをパーティション単位で分散します。サブパーティションテーブルの場合、パーティション内のすべてのサブパーティションが集約されます。- パーティション要件:すべてのテーブルのパーティション定義が同じであること。サブパーティションテーブルの場合も、パーティションの定義のみを検証します。したがって、パーティションテーブルとサブパーティションテーブルは、それらのテーブルのパーティション定義が同じであれば同時に存在できます。
- パーティションの整列規則:同じパーティション値を持つパーティションが集約されます。これには以下が含まれます:パーティションテーブルのパーティションとサブパーティションテーブルの対応するパーティション内のすべてのサブパーティション。
SHARDING = ADAPTIVE:テーブルグループ内の各テーブルのデータを適応型方式で分散します。つまり、テーブルグループ内のテーブルがパーティションテーブルの場合はパーティション単位で、サブパーティションテーブルの場合は各パーティションのサブパーティション単位で分散します。このようなテーブルグループ内のテーブルのパーティション要件及びパーティションの整列規則は以下の通りです:
- パーティション要件:テーブルグループ内のテーブルがすべてパーティションテーブルまたはすべてサブパーティションテーブルであること。パーティションテーブルの場合はパーティションの定義が同じであること。サブパーティションテーブルの場合は、パーティションとサブパーティションの定義が同じであること。
- パーティションの整列規則:テーブルグループ内のテーブルがすべてパーティションテーブルの場合、パーティション値が同じパーティションが集約されます。テーブルグループ内のテーブルがすべてサブパーティションテーブルの場合、パーティション値とサブパーティション値が共に同じであるパーティションが集約されます。
テーブルグループSCOPEプロパティ
V4.4.2バージョンについて、OceanBaseデータベースはV4.4.2 BP1バージョンから、テーブルグループにSCOPEプロパティを新たに追加しました。これは、SHARDINGによって集約された後に形成されるPartition Groupのクラスタ内での分散範囲を定義するために使用されます。
SCOPEプロパティには以下の3つの値があります:
SERVER:すべてのPartition GroupのLeaderが同一ノードに集約されることを示します。この値は最強のデータローカル性を提供しますが、クラスタのロードバランシングに影響を与える可能性があります。ZONE:すべてのPartition GroupのLeaderが同一Zone内に分散され、Zone内の各ノードに配置されることを示します。この値はデータローカル性とZone内のロードバランシングのバランスを取ります。CLUSTER:すべてのPartition GroupのLeaderがクラスタ内の各ノードに分散されることを示します。この値はクラスタのロードバランシング能力を最大化できますが、ノード間アクセスが増加する可能性があります。
SCOPE = ZONEのユースケース
- ゾーン間遅延が敏感な場合:関連するパーティションのLeaderを同一ゾーンに集約し、ゾーン間アクセスの遅延を減らす必要があります。
- ゾーン内ロードバランシング:同一ゾーン内で、異なるパーティションのLeaderを異なるサーバーに分散させる必要があります。これにより、単一サーバーの負荷が過度に高くなるのを防ぎます。
- グローバルインデックスの一貫性:主表とグローバルインデックスのLeaderが同一ゾーンにあることで、データアクセスのローカル性を保証します。