OceanBaseデータベースのストレージ視点では、ストレージ構造の上位にはPartition Groupがあり、これは一つのパーティショングループに対応します。多くの場合、これをPGと略称することもあります。PGとは、極限のパフォーマンスを達成するために抽象化された概念です。ユーザーのトランザクションにおいて、複数の異なるテーブルにアクセスすることがあることを知っています。OceanBaseデータベースの分散アーキテクチャでは、これらの異なるテーブルが同一サーバー上に配置される保証は難しいため、分散トランザクションが発生します。分散トランザクションは二段階コミットに依存しており、より大きなオーバーヘッドが伴います。一方で、これらのテーブルがすべて同一サーバー上にある場合、トランザクションに対して一時的な最適化を行うことで、より良いパフォーマンスを得ることができます。ただし、ほとんどの場合、テーブルの位置を保証することはできません。インターネット環境下での多くのアプリケーションでは、User IDに基づいてテーブルをパーティション分けし、複数のテーブルのパーティションルールが同一であることが一般的です。このようなテーブルに対しては、Table Groupを構築するための構文を提供しています。Table Group内の対応するパーティションをPartition Groupと呼び、OceanBaseデータベースは同一Partition Group内の複数のパーティションを常に結合して保持します。これにより、同一Partition Groupのトランザクション操作は単一マシンのトランザクションとして最適化され、より高いパフォーマンスを実現します。
Partition Group内には複数のPartitionが含まれる可能性があります。注意が必要なのは、これらのPartitionのパーティションキーとパーティションルールが完全に一致していることです。Partition Groupは、OceanBaseデータベースにおけるリーダー選出および移行レプリケーションの最小単位です。Partitionとは、テーブルの一つのパーティションであり、OracleやMySQLにおけるパーティションの定義とほぼ同じです。テーブルのパーティションルールには、ハッシュパーティション、レンジパーティション、リストパーティション、さらにはサブパーティションなど、さまざまな種類があります。しかし、ストレージ層にとっては、上述のパーティションルールは一切気にせず、すべてPartitionとして扱います。
OceanBaseデータベースでは、ユーザーテーブルに対してローカルインデックスの作成がサポートされています。ローカルインデックスの特徴は、ストレージ上では主テーブルと同じPartition内部に結合して保存されることです。主テーブルと各インデックスは内部でそれぞれ独立したTable Storeに格納され、それぞれのTable Storeには複数のSSTableとMemTableが含まれます。MemTableはメモリ上に保存され、動的なデータを格納し、読み書き操作を提供します。一方、SSTableはディスク上に保存され、静的なデータのみを格納し、読み取り専用です。
