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