メインコンテンツまでスキップ

ストレージフォーマット V3

Doris Storage Format V3 は Segment V2 フォーマットから大幅に進化したものです。メタデータの分離とエンコーディング戦略の最適化により、幅広いテーブル、複雑なデータ型(Variant など)、およびクラウドネイティブなストレージ・コンピュート分離シナリオでのパフォーマンスを特に改善します。

主要な最適化

External Column Meta

  • 背景: Segment V2 では、すべてのカラムのメタデータ(ColumnMetaPB)が Segment ファイルの Footer に保存されます。数千のカラムを持つ幅広いテーブルや自動スケーリング Variant シナリオでは、Footer が数メガバイトまで増大することがあります。
  • 最適化: V3 では ColumnMetaPB を Footer から分離し、ファイル内の独立した領域(External Column Meta Area)に保存します。
  • 利点:
    • 超高速メタデータ読み込み: Segment Footer のサイズを大幅に削減し、初期ファイル開封を高速化します。
    • オンデマンド読み込み: 独立した領域からメタデータをオンデマンドで読み込むことができ、メモリ使用量を削減し、オブジェクトストレージ(S3/OSS など)でのコールドスタートクエリパフォーマンスを改善します。

Integer タイプ Plain Encoding

  • 最適化: V3 では数値型(INTBIGINT など)に対して従来の BitShuffle ではなく PLAIN_ENCODING(生バイナリストレージ)をデフォルトで使用します。
  • 利点: LZ4/ZSTD 圧縮と組み合わせることで、PLAIN_ENCODING はより高い読み取りスループットと低い CPU オーバーヘッドを提供します。現代の高速 IO 環境では、この「展開をパフォーマンスと交換する」戦略は、大量のデータをスキャンする際に明確な利点を提供します。

Binary Plain Encoding V2

  • 最適化: BINARY_PLAIN_ENCODING_V2 を導入し、[length(varuint)][raw_data] ストリーミングレイアウトを使用して、末尾のオフセットテーブルに依存していた古いフォーマットを置き換えます。
  • 利点: 大きな末尾オフセットテーブルを排除し、データストレージをよりコンパクトにし、文字列型や JSONB 型のストレージ消費量を大幅に削減します。

設計思想

V3 の設計思想は、「メタデータの分離、エンコーディングの簡素化、ストリーミングレイアウト」 に要約できます。メタデータ処理のボトルネックを削減し、現代の CPU がシンプルなエンコーディングを処理する高効率性を活用することで、複雑なスキーマの下で高パフォーマンス分析を実現します。

使用ケース

  • 幅広いテーブル: 2000 カラムを超える、または長いカラム名を持つテーブル。
  • 半構造化データ: VARIANT または JSON 型の多用。
  • 階層ストレージ/クラウドネイティブ: オブジェクトストレージの読み込み遅延に敏感なシナリオ。
  • 高パフォーマンススキャン: スキャンスループットに対して極端な要件がある分析タスク。

使用方法

新しいテーブル作成時の有効化

CREATE TABLE 文の PROPERTIESstorage_formatV3 として指定します:

CREATE TABLE table_v3 (
id BIGINT,
data VARIANT
)
DISTRIBUTED BY HASH(id) BUCKETS 32
PROPERTIES (
"storage_format" = "V3"
);