OceanBaseデータベースのストレージ観点から見ると、ストレージ構造の最上位はPartition Groupであり、一つのパーティショングループに対応します。多くの場合、PGと略称されます。PGは極限のパフォーマンスを得るために抽象化された概念です。ユーザーのトランザクションでは、多くの異なるテーブルを操作する可能性があることがわかっています。OceanBaseデータベースの分散アーキテクチャでは、これらの異なるテーブルが同一サーバー上にあることを保証することは困難です。その結果、分散トランザクションが発生し、分散トランザクションは2フェーズコミットに依存するため、より大きなオーバヘッドが生じます。これらの異なるテーブルがすべて同一サーバー上にあれば、トランザクションを1フェーズで処理する最適化を行い、より良いパフォーマンスを得ることが可能です。しかし、ほとんどの場合、テーブルの配置を保証することはできません。インターネット上の多くのアプリケーションでは、業務がUser Idに基づいてテーブルをパーティション化しており、複数のテーブルのパーティションルールが同じであることがわかっています。これらのテーブルに対して、Table Groupを構築するための構文を提供しています。Table Group内の対応するパーティションをPartition Groupと呼び、OceanBaseデータベースは同一Partition Group内の複数のPartitionが常に結合されていることを保証します。そのため、同一Partition Groupに対するトランザクション操作は単一マシントランザクションとして最適化され、より良いパフォーマンスを得ることができます。
一つのPartition Groupには複数のPartitionが含まれる可能性がありますが、これらのPartitionのパーティションキーとパーティションルールは完全に同一である必要があります。Partition Groupは、OceanBaseデータベースにおけるリーダー選出と移行レプリケーションの最小単位です。Partitionはテーブルのパーティションであり、Oracle/MySQLにおけるパーティションの定義と基本的に同じです。テーブルのパーティションルールには様々なものがあります。例えば、Hashパーティション、Rangeパーティション、Listパーティション、さらにはサブパーティションなどがあります。しかし、ストレージ層にとっては、上記のパーティションルールは関係なく、すべて同じように扱われます。
OceanBaseデータベースでは、ユーザーテーブルに対してローカルインデックスの作成をサポートしています。ローカルインデックスの特徴は、ストレージ上で主テーブルと同一のパーティション内に格納されることです。主テーブルと各インデックスは内部ではそれぞれ独立したTable Storeに格納され、各Table Storeには複数のSSTableとMemTableが含まれます。MemTableはメモリに格納され、動的データを保存し、読み書き操作を提供します。SSTableはディスクに格納され、静的データを保存し、読み取り専用です。
