Learning Platform
Глоссарий Troubleshooting
Урок 17.05 · 45 мин
Продвинутый
Format ComparisonLanceVortexNimbleF3ParquetExtensibilityFastLanesALPFSSTEcosystemProduction ReadinessGPU Decode

Сравнение форматов нового поколения

В модулях 15 и 16 мы разобрали четыре формата нового поколения: Lance, Vortex, Nimble, F3. Каждый атакует Parquet с разного фланга: Lance — random access для ML, Vortex — compressed compute для analytics, Nimble — wide schemas для Meta, F3 — extensibility через Wasm. Пора свести всё воедино.

NOTE

Parquet остаётся де-факто стандартом. Форматы нового поколения не «убивают» Parquet — они решают конкретные проблемы, которые Parquet не может решить из-за architectural decisions 2013 года. Понимание каждого формата помогает выбрать правильный инструмент для конкретного workload.

Сравнительная матрица

Comparison Matrix: пять форматов

Спектр философий дизайна

Каждый формат представляет уникальную философию. Расположим их на спектрах:

Спектр расширяемости
ParquetФиксированный набор кодировок. Максимальная ecosystem reach: Java, C++, Rust, Python, Go. Каждая новая кодировка — multi-year process. Стабильность > инновация.
LanceContainer format: protobuf 'any' messages. Unknown encoding → skip (graceful degradation). Forward compatible, но не self-describing. Экосистема: Python + Arrow.
NimbleОдна библиотека = спецификация. Быстрейшее добавление кодировок (один PR), но reader update required. Minimal ecosystem (Velox only).
VortexPluggable Rust traits + planned Wasm fallback. Балансирует extensibility и native performance. Ecosystem: DuckDB, Iceberg, Arrow.
F3Embedded Wasm decoders. Максимальная extensibility и portability. 10-30% overhead. Research prototype. Каждый файл — самодостаточная единица.
DirectionТренд: от fixed encodings к self-describing файлам. Каждый формат — шаг вправо по спектру. Вопрос: где оптимальная точка для production? Vortex (pluggable + Wasm fallback) — текущий претендент на баланс.
Спектр целевых workloads
LanceML-first: random mini-batches, vector search, dataset versioning, multimodal data. Не оптимален для OLAP scans. Target audience: ML engineers, data scientists.
VortexAnalytics-first: compressed compute, fast scans, Parquet replacement в data warehouses. Не имеет vector search или versioning. Target: data engineers, analytics teams.
NimbleWide-schema-first: 10K+ колонок, AI/ML training tables Meta. Не для general use. Target: Meta infra teams, Velox users.
F3Research-first: proof of concept для Wasm extensibility. Не для production. Target: format researchers, standards committees, future format designers.

Encoding Strategy Comparison

Одно из ключевых различий — как каждый формат организует encoding pipeline:

Encoding Strategies

Parquet: Fixed Set

Parquet: writer выбирает одну encoding per column: PLAIN, DICTIONARY, RLE, DELTA_BINARY_PACKED, BYTE_STREAM_SPLIT, DELTA_LENGTH_BYTE_ARRAY. Compression (ZSTD/LZ4/Snappy) — отдельный слой. Фиксированный набор.
PipelineEncoding → Compression. Один уровень каждого. Writer выбирает из ~6 encodings + ~4 compressions. Не расширяется без spec change.

Lance: Container

Lance v2: container format. Encoding descriptor = protobuf 'any' message. Writer может embed любой encoding, described as protobuf. Unknown → skip. ~200 строк protobuf spec.
PipelineProtobuf any message → описывает encoding. Adaptive structural encodings: mini-block vs all-null выбирается автоматически по ширине данных. Pluggable через protobuf.

Vortex: Cascading

Vortex: cascading encodings через Rust traits. BtrBlocks-inspired automatic selection. Каждый уровень каскада — отдельный encoding. White-box: engine знает структуру → compute on compressed.
PipelineAutomatic: BtrBlocks algo → pick best cascade. Пример: Dictionary → ALP → BitPacked → ZSTD. Каждый уровень прозрачен для engine (white-box). Extensible через Rust trait.

Nimble: Recursive Tree

Nimble: рекурсивное encoding tree. Произвольная глубина. Каждый узел = encoding step, создающий sub-streams. Block-level granularity. Known decoded size per block.
PipelineTree: Nullable → Dictionary → Delta → Varint → ZSTD. Произвольная глубина. Каждый block: full encoding tree в metadata. Декодирование: обратный обход дерева.

F3: Wasm Decoders

F3: embedded Wasm decoders. Encoding = Wasm module. Любой algorithm компилируется в Wasm. Pipeline: chain of Wasm modules. Self-describing: decoder в файле.
PipelineWasm module chain: ZSTD.wasm → Delta.wasm → values. Каждый module: standard API (decode, output_type, output_size). Extensible: любой новый encoding = новый .wasm.

Metadata Efficiency

Все форматы нового поколения решают проблему metadata overhead, но по-разному:

Metadata Approach Comparison
TIP

Общий тренд: FlatBuffers побеждает для нового поколения форматов. Vortex, Nimble, F3 — все выбрали FlatBuffers. Lance использует Protobuf (всё ещё O(N) parse, но lightweight и с forward-compat). Parquet’s Thrift — legacy, который сложно заменить без breaking change.

Use Case Decision Tree

Когда использовать какой формат:

Decision Tree: выбор формата

Какой workload?

Начало: какой у вас primary workload? Ответ определяет оптимальный формат. Если workload смешанный — Parquet или комбинация форматов.
ML Training / Vector SearchRandom mini-batches, vector search, dataset versioning, multimodal data → Lance. 100x faster random access, built-in ANN indices, version log. Python SDK.

lance + LanceDB

Lance: pip install lance. Интеграция с PyTorch DataLoader, DuckDB, Polars. LanceDB для vector search + SQL. Production ready at petabyte scale.
OLAP Analytics / Data WarehouseFast scans, compressed compute, Parquet replacement → Vortex. 10-20x faster scans, white-box encodings, DuckDB core extension. Iceberg integration.

DuckDB + Vortex extension

Vortex через DuckDB: INSTALL vortex; LOAD vortex. Iceberg integration для data lake acceleration. Production: incubation stage, LF-backed.
Universal / CompatibilityМаксимальная совместимость, стабильность, ecosystem → Parquet. Читается везде: Spark, DuckDB, Polars, PyArrow, Presto, BigQuery, Redshift.

pyarrow.parquet / Spark

Parquet: universal standard. Если нет специфического bottleneck — Parquet. Для 90% workloads Parquet достаточно.
Wide Schemas (10K+ cols)10K+ колонок, Meta-scale AI/ML tables, Velox ecosystem → Nimble. FlatBuffers metadata, block encoding, predictable memory. НО: Velox-only.

Velox + Nimble reader

Nimble: only viable если уже используете Velox (Presto, Spark+Gluten). Иначе — Parquet с column projection или Lance.
WARNING

F3 отсутствует в decision tree — он не является production опцией. F3 — research prototype для study и inspiration. Если вам нужен extensible format в production → Vortex (pluggable encodings) или Lance (protobuf any).

Shared Techniques: конвергенция

Несмотря на разные философии, форматы нового поколения конвергируют на общих encoding techniques:

Shared Encoding Techniques
FastLanes (2023)SIMD-friendly encoding от CWI (Centrum Wiskunde & Informatica). Реорганизует данные для эффективного SIMD-декодирования: interleave values → SIMD-parallel unpack. Используется в Vortex (built-in), влияет на F3 и будущий Parquet.
ALP (2023)Adaptive Lossless floating-Point compression от CWI. Float64 → integer representation → lightweight encoding. Lossless. Используется в Vortex (built-in), F3 (Wasm decoder). Parquet: предложен, но не принят.
FSST (2020)Fast Static Symbol Table compression от CWI. String compression: build symbol table → replace common substrings with 1-byte codes. 2-5x compression ratio for strings. Используется в Vortex (built-in), DuckDB (native).
BtrBlocks (2023)Automatic codec selection от TUM (Technical University of Munich). Для каждого data block: sample → try multiple encodings → pick best ratio/speed trade-off. Используется в Vortex для automatic encoding selection.

Общая тенденция: encoding research 2020-2025 двигается быстрее, чем форматы могут adopt. FastLanes, ALP, FSST, BtrBlocks — все появились после Parquet spec freeze. Новые форматы (Vortex, F3) designed to adopt these faster.

Hardware Acceleration: GPU Decode

Следующий рубеж — декодирование на GPU для ускорения analytics и ML:

GPU Decode Readiness

«Заменят ли они Parquet?»

Ответ сложнее, чем «да» или «нет»:

Будущее Parquet и новых форматов
Parquet останетсяParquet network effect: каждая data tool читает Parquet. Переключить ecosystem = 10+ лет. Parquet — не лучший, но самый supported. 'Easier to contribute missing bits to Parquet' (Julien Le Dem, Parquet creator).
CoexistenceРазные форматы для разных workloads. Lance для ML data, Vortex для fast analytics, Parquet для interchange. Конвертация между форматами — commodity operation.
Parquet evolvesParquet 3.0 discussions incorporate ideas from new formats: extensible encodings, better metadata (FlatBuffers?), pluggable codecs. The competition pushes Parquet forward.

Parquet = universal interchange + ideas migrate from new formats

Вероятный исход: Parquet остаётся universal interchange format. Специализированные форматы доминируют в своих нишах. Ideas из F3/Vortex/Nimble постепенно мигрируют в Parquet.

Julien Le Dem (создатель Parquet) аргументирует: проще добавить недостающие возможности в Parquet, чем переключить экосистему на новый формат. Но это может значить, что «Parquet 3.0» будет выглядеть совсем иначе, чем Parquet 2013.

Summary Card

Format Summary Cards
ParquetUniversal columnar format. Strengths: ecosystem, compatibility, tooling. Weaknesses: slow extensibility, Thrift metadata, limited random access. Best for: interchange, cold storage, compatibility-first workloads.
LanceML-native format. Strengths: 100x random access, built-in vector search, versioning, Python SDK. Weaknesses: no compressed compute, no Iceberg integration. Best for: ML training, vector search, multimodal datasets.
VortexAnalytics-optimized format. Strengths: 10-20x scan speedup, compressed compute, DuckDB integration, Iceberg acceleration. Weaknesses: no Python SDK, early stage. Best for: OLAP analytics, data warehouses.
NimbleWide-schema format. Strengths: FlatBuffers metadata (10K+ cols), block encoding (predictable memory), fast evolution (one library). Weaknesses: Velox-only, no ecosystem. Best for: Meta-scale AI/ML tables.
F3Research prototype. Strengths: embedded Wasm decoders (instant extensibility), decoupled hierarchy. Weaknesses: 10-30% Wasm overhead, not production-ready. Best for: understanding future format design.

Конвергенция и дивергенция

Конвергенция vs Дивергенция

Конвергенция (все согласны)

Конвергенция: все новые форматы согласны в некоторых архитектурных решениях. Эти решения — 'lessons learned' из 10 лет опыта с Parquet/ORC.
Shared DecisionsFlatBuffers/Protobuf > Thrift для metadata. Extensible encodings необходимы. Column-level I/O skip необходим. Arrow compatibility необходима. ZSTD > Snappy для compression.

Дивергенция (не согласны)

Дивергенция: фундаментальные disagreements о подходе к extensibility, ecosystem модели, и target workload. Каждый формат — уникальная точка в design space.
DisagreementsExtensibility model: spec (Parquet) vs library (Nimble) vs plugin (Vortex) vs Wasm (F3). Ecosystem: one impl (Nimble) vs multi-impl (Parquet) vs hybrid (Lance, Vortex). Target: universal (Parquet) vs niche (Lance=ML, Vortex=analytics, Nimble=Meta).

Итоги

Четыре формата нового поколения представляют четыре разных ответа на ограничения Parquet:

  1. Lance — ML-native: random access + vector search + versioning. Для data scientists и ML engineers, работающих с multimodal datasets.

  2. Vortex — analytics-optimized: compressed compute + cascading encodings + DuckDB/Iceberg integration. Для data engineers, ищущих Parquet replacement в analytics stack.

  3. Nimble — wide-schema: FlatBuffers metadata + block encoding + predictable memory. Для Meta-scale AI/ML training tables. Философия «библиотека как спецификация».

  4. F3 — research prototype: embedded Wasm decoders + decoupled hierarchy. Proof of concept для instant extensibility. Влияет на Vortex и будущий Parquet.

Parquet не умирает. Parquet остаётся universal interchange format. Новые форматы занимают ниши, где Parquet’s 2013 architecture создаёт bottleneck. Ideas из новых форматов постепенно мигрируют обратно в Parquet (extensible encodings, better metadata). Конкуренция толкает всю ecosystem вперёд.

Проверьте понимание

Результат: 0 из 0
Прикладной
Вопрос 1 из 4. ML-команда выбирает формат для нового проекта: 500M embedding-векторов (768-dim) + metadata + images. Требования: random mini-batch 1024 строк per step, vector search по embeddings, версионирование датасета для ML experiments. Какой формат оптимален?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 5