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;一般的に、マイクロブロックの長さが長いほどデータの圧縮率は高くなりますが、それに伴い一度のI/O読み取りのコストも高くなります。一方、マイクロブロックの長さが短いほどデータの圧縮率は低下しますが、それに伴い一度のランダムI/O読み取りのコストは低くなります。また、ユーザーテーブルのモードによって、各マイクロブロックの構築時に平铺モード(Flat)またはエンコーディングモード(Encoding)をそれぞれ選択して構築することがあります。現在のバージョンでは、ベースラインデータについてのみエンコーディングモードでマイクロブロックを組織することが指定可能であり、ダンプデータについてはすべてデフォルトで平铺モードでデータを組織します。