最近看到一篇很好资料,里面三言两语配上几个图就把列式存储(基于列存储)讲明白了,牛啊!最喜欢的就是这种浅显易懂就把背景知识讲得明明白,白而不是长篇大论的讲概念。
1为什么要按列存储
列式存储(柱状或基于列)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的。简单来说两者的区别就是如何组织表(翻译不好,直接抄原文了):
,基于行的存储atable存储在一个序列的行。
,基于列存储storesa表列的顺序。
下面来看一个例子:
,
从上图可以很清楚地看的到,行式存储下一张表的数据都是放在一起的,但列式存储下都被分开保存了,所以它们就有了如下这些优缺点:
行式存储列式存储优点
,数据被保存在一起,
,插入/更新容易
,查询时只有涉及到的列会被读取
,投影(投影)很高效
,任何列都能作为索引
缺点,选择完成时,被选择的列要重新组装
,插入/更新比较麻烦
注:关系型数据库理论回顾——选择(选择)和投影(投影)
2补充:数据压缩
刚才其实跳过了资料里提到的另一种技术:通过字典表压缩数据。为了方面后面的讲解,这部分也顺带提一下了。
下面中才是那张表本来的样子。经过字典表进行数据压缩后,表中的字符串才都变成数字了。正因为每个字符串在字典表里只出现一次了,所以达到了压缩的目的(有点像规范化和非规范化规范化和Denomalize)