中间件速查手册
数据仓库与 OLAPColumnar Storage

列式存储 是什么?

同一列的数据连续存放,查询只读用到的列

类比:按科目分册的成绩单,查数学只翻数学那本

行存 vs 列存

行存把一行的字段挨着放,适合“取一整行”(点查、事务);列存把同一列的值挨着放,适合“对某一列做聚合”(sum、avg、group by)。

分析查询通常只用到几十列里的三五列,列存能少读 80% 以上的数据,这是 OLAP 快的第一个原因。

为什么压缩率高

同一列的数据类型相同、取值相近,压缩算法效果特别好。比如时间戳列可以用 delta 编码,枚举列可以用字典编码,压缩比轻松到 5~10 倍。压缩率高又反过来减少了 IO。

代价

取一整行要拼很多列,点查比行存慢;单行更新要重写整列文件,所以列存数据库基本不支持高频更新。选型时先想清楚是“分析”还是“交易”,别指望一个引擎两头都强。

它出现在这些中间件里

相关概念