核心要点

  • OLTP:联机事务处理,高并发点查/小写、强一致事务,多用行式存储(如 MySQL)

  • OLAP:联机分析处理,大范围扫描+聚合+少量列,多用列式存储(如 ClickHouse)

  • 列存只读取查询涉及的列,避免读无关列,IO 大幅降低

  • 同列数据类型一致、相邻,压缩比高;配合向量化执行批量处理,CPU 吞吐更高

标准回答

OLTP vs OLAP

OLTP(联机事务处理)服务业务系统,特征是高并发、点查与小事务写入、要求 ACID 与低延迟,典型如下单、转账,存储多为行式(一行字段物理相邻,便于按主键整行读写)。

OLAP(联机分析处理)服务报表与分析,特征是单次扫描海量行、只取少数列做聚合/分组、写少读多、对延迟容忍度较高,典型如统计大盘,存储多为列式。

列式存储为什么快

1)按需读列:分析查询常只涉及几列,列存只读这些列的数据块,避免像行存那样把整行读上来,IO 显著减少。
2)高压缩比:同一列数据类型相同、取值相近,适合字典编码、RLE、Delta 等压缩,既省空间又减少读盘量。
3)向量化执行:列存数据连续,能按列批量送入 CPU,利用 SIMD 与缓存友好访问,减少逐行解释开销。三者叠加使大扫描聚合远快于行存。

常见误区

⚠️ 常见踩坑

列存并非全面更快:点查、按主键整行读写、高频小事务更新场景行存更优。别用 OLAP 列存数据库扛高并发实时写事务,反之亦然,应按负载特征选型。

追问

追问 1为什么列式存储不适合频繁的单行更新?

一行数据被拆散到各列的不同文件/块中,更新一行需触碰多个列文件,且列存通常以不可变块+压缩组织,原地改成本高。OLAP 引擎一般用批量追加、标记删除+后台合并,而非像 OLTP 行存那样高效原地更新单行。

追问 2HTAP 想解决什么问题?

HTAP(混合事务/分析处理)想在一套系统里同时支撑 OLTP 与 OLAP,避免把事务数据 ETL 到分析库的延迟与复杂度。常见做法是行存处理事务、列存副本/列存索引服务分析,并保证两者数据一致,实现近实时分析。

延伸学习

与本题相关的知识库文章、术语、工具与行业资讯。