首页/数据/数据工程与 ETL 速查/列式存储与行式存储
管道基础52 条

列式存储与行式存储

行式存储适合按行读取与点查更新;列式存储把同列数据连续存放,分析型查询只读少量列时 IO 明显更省,且利于压缩与向量化计算。

对比

维度行式存储列式存储
读取模式整行读取,点查友好按列读取,扫描少数列划算
压缩效率同行列类型混杂,压缩率一般同列同类型,压缩率高
典型场景OLTP 事务、单行更新OLAP 分析、宽表扫描
代表MySQL InnoDB、PostgreSQL 堆表Parquet、ORC、ClickHouse 列存
数据湖/数仓以列存为主,但需要频繁按行更新的场景仍需行存或支持 upsert 的表格式。

易错点

  • 列存单行更新代价高,别拿 Parquet 直接当业务库改数
  • 列存文件过小会使元数据占比过高,条带/行组粒度也要合理

数据来源与参考

  • Apache Parquet 官方文档:Motivation
  • 《数据密集型应用系统设计》存储与检索章节
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌