ストレージフォーマット 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 では数値型(
INT、BIGINTなど)に対して従来の 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 文の PROPERTIES で storage_format を V3 として指定します:
CREATE TABLE table_v3 (
id BIGINT,
data VARIANT
)
DISTRIBUTED BY HASH(id) BUCKETS 32
PROPERTIES (
"storage_format" = "V3"
);