TiDB开启列式存储

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(聚合统计、批量分析、复杂查询)