TiDB开启列式存储后,磁盘层面具体是怎么存储的?和行存的物理存储差异在哪?
- TiKV 节点 : Key-Value, 负责行式存储(Row Store),处理 OLTP。
- TiFlash 节点 : DeltaTree, 负责列式存储(Column Store),处理 OLAP。
按列存储 :数据按列 独立存储。例如,user 表的 name 列所有数据存储在一个文件中,age 列存储在另一个文件中
可以参考这两篇文章看看
列存是把一列数据保存在一起,而且是排序的,相同数据多压缩比也高减少了磁盘io数据量,扫描单个字段会很快
| 维度 | 行存储(TiKV) | 列存储(TiFlash) |
|---|---|---|
| 存储单元 | 按行打包,一行的所有列连续存储 | 按列拆分,同一列的所有行连续存储 |
| 数据读取 | 读取整行(即使只需要部分列),点查高效 | 仅读取所需列,聚合 / 分析查询高效 |
| 压缩效率 | 低(列类型混杂,重复度低) | 高(同列数据类型统一,专属压缩算法) |
| 物理文件组织 | SST 文件按行 Key 有序排列 | 按列分块存储,列块 + 元数据文件分离 |
| 索引方式 | 基于行 Key 的全局有序索引 | 列块级轻量级索引(Min/Max、位图等) |
| 适用场景 | OLTP(增删改查、事务、低延迟点查) | OLAP(聚合统计、批量分析、复杂查询) |