几张图看懂列式存储

最近看到一篇很好资料,里面三言两语配上几个图就把列式存储(基于列存储)讲明白了,牛啊!最喜欢的就是这种浅显易懂就把背景知识讲得明明白,白而不是长篇大论的讲概念。

1为什么要按列存储

列式存储(柱状或基于列)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的。简单来说两者的区别就是如何组织表(翻译不好,直接抄原文了):

,基于行的存储atable存储在一个序列的行。

,基于列存储storesa表列的顺序。

下面来看一个例子:

几张图看懂列式存储

,

从上图可以很清楚地看的到,行式存储下一张表的数据都是放在一起的,但列式存储下都被分开保存了,所以它们就有了如下这些优缺点:


行式存储列式存储优点

,数据被保存在一起,

,插入/更新容易

,查询时只有涉及到的列会被读取

,投影(投影)很高效

,任何列都能作为索引

缺点

,选择完成时,被选择的列要重新组装

,插入/更新比较麻烦

注:关系型数据库理论回顾——选择(选择)和投影(投影)



2补充:数据压缩

刚才其实跳过了资料里提到的另一种技术:通过字典表压缩数据。为了方面后面的讲解,这部分也顺带提一下了。

下面中才是那张表本来的样子。经过字典表进行数据压缩后,表中的字符串才都变成数字了。正因为每个字符串在字典表里只出现一次了,所以达到了压缩的目的(有点像规范化和非规范化规范化和Denomalize)

几张图看懂列式存储”> <br/> </p> <p> <br/> </p> <h3> 3查询执行性能</h3> <p>下面就是最牛的图了,通过一条查询的执行过程说明列式存储(以及数据压缩)的优点:</p> <p> <img src=几张图看懂列式存储