数据库行存和列存对比图和动画演示

其它1_行存和列队示意图

本文采用图和动画的形式,展示数据库里,列存和行存的对比差异。包括对比图和对比动画演示。

ClickHouse

https://clickhouse.tech/docs/zh/

行存

ClickHouse 的行存动画
ClickHouse 的行存动画

列存

ClickHouse 的列存动画
ClickHouse 的列存动画

说明

  1. 针对分析类查询,通常只需要读取表的一小部分列。在列式数据库中你可以只读取你需要的数据。例如,如果只需要读取100列中的5列,这将帮助你最少减少20倍的I/O消耗。
  2. 由于数据总是打包成批量读取的,所以压缩是非常容易的。同时数据按列分别存储这也更容易压缩。这进一步降低了I/O的体积。
  3. 由于I/O的降低,这将帮助更多的数据被系统缓存。

TiDB

https://docs.pingcap.com/zh/tidb/stable/tidb-storage

Tidb 行存和列存对比图
Tidb 行存和列存对比图

https://docs.pingcap.com/zh/tidb/stable/tiflash-overview

Tidb 行存和列存架构图
Tidb 行存和列存架构图

其它1

数据库行存、列存示意图

其它2

数据库行存、列存示意图
数据库行存、列存示意图

总结

传统行式数据库的特性如下

①数据是按行存储的。
②没有索引的查询使用大量I/O。比如一般的数据库表都会建立索引,通过索引加快查询效率。
③建立索引和物化视图需要花费大量的时间和资源。
④面对查询需求,数据库必须被大量膨胀才能满足需求。

列式数据库的特性如下

①数据按列存储,即每一列单独存放。
②数据即索引。
③只访问查询涉及的列,可以大量降低系统I/O。
④每一列由一个线程来处理,即查询的并发处理性能高。
⑤数据类型一致,数据特征相似,可以高效压缩。比如有增量压缩、前缀压缩算法都是基于列存储的类型定制的,所以可以大幅度提高压缩比,有利于存储和网络输出数据带宽的消耗。