OceanBaseデータベースでは、マクロブロックを使用してデータを格納します。各テーブルには複数のマクロブロックが含まれる場合があり、各マクロブロックは2MBのスペースを占有します。マクロブロック内には1つまたは複数のマイクロブロックが含まれ、各マイクロブロックには1行または複数行のデータが含まれます。
テーブルの構成形式
OceanBaseデータベースは、インデックス組織テーブルとヒープ組織テーブルの2種類のテーブル構成形式をサポートしています。
インデックス組織テーブル
インデックス組織テーブルでは、データは主キーに従って格納およびソートされます。テーブルに1行のデータを挿入する際、そのデータは主キーの順序でテーブルに挿入されます。この構造では、データとインデックスが一体化しており、主キーがクラスタインデックスとなります。主キーに追加のスペースオーバーヘッドがなく、データアクセスもより効率的です。
各行に格納される列の順序は同じです。OceanBaseデータベースは通常、テーブル作成時の列順序でデータを格納し、新しく追加された列は常に最後の列に配置されます。
ヒープ組織テーブル(ヒープテーブル)
ヒープ組織テーブルでは、データは主キーに基づいてソートされずに格納されます。テーブルに1行のデータを挿入する際、データの順序はランダムになります。この構造では、主キーインデックスは実際には2次唯一インデックス、すなわち非クラスタインデックスとなります。データとインデックスが分離されているため、データ書き込み時にソートを考慮する必要がなく、データの書き込みパフォーマンスが向上します。
ヒープ組織テーブルのデータは無秩序です。インデックスはキー値を順序付けることができますが、データ自体には特定の順序がありません。
行ストレージ
行はマイクロブロック内に格納され、通常、行のすべての列は一緒に格納されます。テーブルにBLOB型データが含まれる場合、そのデータが占有するストレージ容量はマクロブロックのサイズを超えることがあります。この場合、BLOB型データは他のマクロブロックにオーバーフローして格納されます。
列ストレージ
列ストレージは、データを列単位で格納するデータベースストレージ方式です。列ストレージモードでは、各列のデータは独立したSSTableとして格納され、すべての列のSSTableが組み合わさって仮想的なSSTableを形成し、ユーザーの列ストレージのベースラインデータとなります。この方式は、クエリ性能を効果的に向上させ、ストレージ容量の消費を削減できます。
NULL値の格納
OceanBaseデータベースではNULL値が格納されます。格納時には、1バイトが使用されて、その列がNULLかどうかを示します。