IIWAB

列式存储数据库

IIWAB 2天前 ⋅ 14 阅读

一、基础概念

传统数据库是行式存储:一行数据完整连续存放; 列式存储(Columnar Storage):把表中同一列的所有值连续集中存储,按列拆分独立文件/存储块。

假设有表:学生(学号,姓名,年龄)

行存存储结构(一行打包)

(001,张三,18)、(002,李四,19)、(003,王五,18) 磁盘连续存整行。

列存存储结构(按列分开存)

列1【学号】:001,002,003 列2【姓名】:张三,李四,王五 列3【年龄】:18,19,18 每一列单独一段存储。

二、核心优势

  1. 查询IO大幅减少(分析场景最大优势) 报表、统计SQL只需要少数几列,不用读取整行无用字段,只加载需要的列,磁盘读取量极低。 例:统计所有学生平均年龄,行存要读全部三列;列存只读取年龄一列。

  2. 压缩效率极高 同一列数据类型相同、取值重复度高(性别、地区、年份),通用压缩算法(RLE、字典编码、LZ4)压缩率远高于行存,节省存储空间。

  3. 聚合计算性能强 求和、计数、分组、过滤等OLAP分析运算,基于单列连续数据批量计算,CPU缓存命中率高,批量运算更快。

三、明显缺点(不适合联机事务OLTP)

  1. 单行插入、更新、删除性能差 新增一行需要分别修改每一列的存储文件,多次IO;行存只需追加一条记录。
  2. 少量字段查询、频繁修改场景劣势 适合大批量批量导入数据,不适合高频单条增删改。
  3. 整行读取场景低效 若查询需要表中绝大多数列,列存需要读取多个独立列文件,IO开销反而超过行存。

四、适用场景 vs 不适用场景

适用(OLAP联机分析处理)

  • 数据仓库、大数据报表、多维分析
  • 日志分析、用户行为统计、BI可视化
  • 海量历史数据批量统计、分组聚合查询

不适用(OLTP联机事务处理)

  • 电商订单、用户账户、交易系统(高频增删改、单条查询)

五、主流列式数据库产品

  1. 专用列存数据仓库:Vertica、Redshift、Greenplum、ClickHouse
  2. Hadoop大数据:Hive、Impala(底层支持列存格式Parquet、ORC)
  3. 混合存储:TiDB、Snowflake(同时支持行存+列存,HTAP混合负载)

六、行存、列存核心对比

维度行式存储(MySQL/Oracle)列式存储(ClickHouse/Redshift)
存储方式按行连续存储按列分开存储
查询特点少量行、多字段、事务查询快少数列、海量数据统计查询快
压缩效果一般极高,同列数据高度压缩
写入更新单条增删改高效批量写入友好,单行修改极慢
业务场景OLTP交易系统OLAP数据仓库、大数据分析

七、总结

列式存储数据库将数据表按列独立存储,同一列数据连续存放;优势是统计分析查询IO少、压缩率高、聚合运算速度快;缺点是单行增删改性能差;主要用于数据仓库、大数据OLAP分析场景,代表产品有ClickHouse、Vertica、Greenplum。


全部评论: 0

    我有话说: