Skip to content
Son's blog
All writing

An Empirical Evaluation of Columnar Storage Formats

Paper notes · Source updated

An Empirical Evaluation of Columnar Storage Formats

Goal: providing insights for next-gen columnar storage format by

Terms

Findings

  1. Parquet ~ ORC: no clear winner
  2. real world datasets has mostly small cardinality (# distinct values) -> int encoding algo is important.
  3. modern hardware: faster and cheaper storage, bottleneck shifted storage -> compute
    • faster decoding to save compute > better compression to save IO bandwidth
  4. extra support data structures (zone maps, Bloom Filters,…) is good as it traded cheap space for less compute.
  5. existing formats are not good for machine learning and GPU decoding.

Lessons for future formats

  1. use a lot of dict encoding like in Parquet.
  2. keep encoding scheme simple.
  3. default to no block compression and compute-intensive encodings, optional when justified in edge cases due to shifting bottleneck storage -> compute in processing.
  4. metadata layout should be centralized and good for random-access to support wide tables in ML training. size of unit IO block should be optimized for high-latency cloud storage.
  5. trade off more storage for faster compute by having more indexing, filtering structures.
  6. reduce translation overhead by designing nested data model aligning to memory format e.g. Apache Arrow.
  7. have better metadata organization and more effective indexing to support wide-table projections and low-selectivity selections better in ML workloads.
  8. consider GPU decoding efficiency: enough parallel data blocks, parallelize algo, etc.

Good design decisions

Not good designs for ML and GPU

3-Feature Taxonomy

img.png

3.1-Format Layout

img.png

Benchmark

img.png

img.png

5-discussing benchmark results

5.1-experiment setup

5.2-result overview

5.3-encoding analysis

5.4-block compression

5.5-wide table projection

what a good format should do? support wide table projection as ML training queries typically a subset of features. (e.g. a model needs 100 amongst 2000 features of a customer)

Shared Foundations: Modernizing Meta’s Data Lakehouse

img.png

5.6-index and filter

5.7-nested data model

5.8-machine learning workloads

analyzed aspects

  1. vector embeddings compression ratio and deserialization performance
  2. integration with vector search pipeline
  3. unstructured data storage

ML data

patterns

img.png

5.9-gpu decoding

img.png