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