OceanBaseデータベースでは、ユーザーテーブルの各パーティションにおけるデータ管理の基本単位はSSTableです。MemTableのサイズが特定のしきい値に達すると、OceanBaseデータベースはMemTableをフリーズし、その内容をディスクに転送します。この転送後の構造は、Mini SSTableまたはMinor SSTableと呼ばれます。クラスタでグローバルマージが発生すると、各ユーザーテーブルパーティションのすべてのMinor SSTableは、マージのスナップショットポイントに基づいてMajor Compactionに参加し、最終的にMajor SSTableが生成されます。各SSTableの構成方法は似ており、自身のメタデータ情報と一連のデータマクロブロックで構成されています。各データマクロブロック内部はさらに複数のマイクロブロックに分割でき、ユーザーテーブルのスキーマ定義に応じて、マイクロブロックは平面モードまたはエンコード形式を選択してデータ行を組織できます。

マクロブロック
OceanBaseデータベースは、ディスクを2MBの固定長データブロックに分割し、これをマクロブロック(Macro Block)と呼びます。マクロブロックはデータファイル書き込みI/Oの基本単位であり、各SSTableは複数のマクロブロックで構成されています。マクロブロックの2MBという固定サイズは変更できず、その後のダンプ、マージでのマクロブロックの再利用、およびレプリケーション移行などのタスクもすべてマクロブロックを最小粒度として行われます。
マイクロブロック
マクロブロック内部では、データは約16KBの可変長データブロックに組織され、これをマイクロブロック(Micro Block)と呼びます。マイクロブロックには複数のデータ行(Row)が含まれており、マイクロブロックはデータファイル読み取りI/Oの最小単位です。各データマイクロブロックは構築時にユーザーが指定した圧縮アルゴリズムで圧縮されるため、マクロブロックに実際に格納されているのは圧縮後のデータマイクロブロックです。データマイクロブロックがディスクから読み取られると、バックグラウンドで解凍され、解凍後のデータがデータブロックキャッシュに格納されます。各データマイクロブロックのサイズはユーザーがテーブル作成時に指定でき、デフォルトは16KBです。ユーザーはステートメントを使用してマイクロブロックの長さを指定できますが、マクロブロックのサイズを超えることはできません。ステートメントは以下のとおりです。
ALTER TABLE mytest SET block_size = 131072;一般的に、マイクロブロックの長さが長いほどデータの圧縮率は高くなりますが、それに伴い1回のI/O読み取りのコストも高くなります。マイクロブロックの長さが短いほど、データの圧縮率は相対的に低下しますが、それに伴い1回のランダムI/O読み取りのコストは低くなります。また、ユーザーテーブルのスキーマによっては、各マイクロブロックは構築時に平面モード(Flat)またはエンコードモード(Encoding)で別々に構築される場合があります。現在のバージョンでは、エンコードモードでマイクロブロックを構成することを指定できるのはベースラインデータのみであり、ダンプデータはすべてデフォルトで平面モードでデータが構成されます。