テーブルグループ(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が同一ゾーンに配置され、データアクセスのローカル性を保証します。