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