Paper · Storage & Indexing

C-Store: A Column-oriented DBMS

M. Stonebraker et al. · VLDB · 2005

Why storing data by column changes everything for analytics workloads.

Summary

Row stores are designed for transaction processing, where a query touches a few whole rows. Analytical queries are different: they scan many rows but read only a few columns. C-Store asks what a database looks like when it is designed for read-mostly analytics from the start.

C-Store stores each column separately, sorted and heavily compressed, and groups columns into projections that can have different sort orders. A small, write-optimised store accepts updates, and a tuple mover moves them in batches into the read-optimised column store. Operators work directly on compressed data where possible.

The design became the basis for Vertica and influenced most modern analytical engines, including those used in cloud data warehouses. Columnar layout, compression and late materialisation are now standard techniques for analytics.

Key ideas

  • Store each column separately so queries read only the columns they need.
  • Aggressive, column-specific compression, with operators that work on compressed data.
  • Projections: overlapping column groups stored in different sort orders.
  • A write-optimised store feeding a read-optimised store through a tuple mover.

More Storage & Indexing papers