OceanBaseデータベースでは、マクロブロックを使用してデータを格納します。各テーブルには複数のマクロブロックが含まれる場合があり、各マクロブロックは2MBの領域を占有します。マクロブロック内には1つまたは複数のマイクロブロックが含まれ、各マイクロブロックには1行または複数行のデータが格納されます。
テーブルの構成
OceanBaseデータベースの各テーブルにはストレージキーが存在します。主キーのないテーブルでは、ストレージキーはパーティションキーと自動生成された隠れた自動インクリメント列となります。一方、主キーを持つテーブルでは、ストレージキーはユーザーが指定した主キーとなります。OceanBaseデータベースでは、集約インデックステーブルモデルを用いてデータを構成しており、これはテーブルのストレージキー順序に従ってデータを格納することを意味します。テーブルにデータを挿入する際には、そのストレージキーの順序に従って挿入されます。
各行の格納列の順序は一定です。OceanBaseデータベースでは通常、テーブル作成時の列順序に従ってデータを格納し、新しく追加される列はすべて最後の列に配置されます。
行指向ストレージ
行指向ストレージはマイクロブロック内で行われ、一般的には行のすべての列が一緒に格納されます。テーブル内に大きなオブジェクト型データが存在する場合、その占有するストレージ容量がマクロブロックのサイズを超えると、その大きなオブジェクト型データは他のマクロブロックにオーバーフローして格納されます。
カラムストア
カラムストアは、データを列単位で格納するデータベースストレージ方式です。カラムストアモードでは、各列のデータは独立したSSTableとして格納され、すべての列のSSTableが組み合わさって仮想的なSSTableを形成し、ユーザーのカラムストアベースラインデータとなります。この方式は、クエリ性能を効果的に向上させ、ストレージ容量の消費を低減することができます。
ROWID
OceanBaseデータベースでは集約インデックステーブルのみが使用され、ROWIDに実際に含まれるデータはテーブルのストレージキー列です。
NULL値の扱い
OceanBaseデータベースではNULL値も格納されます。ストレージでは、ある列がNULLかどうかを示すために1バイトが使用されます。