什么是列式存储?

大家好,我是连边,这是我的第36篇原创文章。

今天这篇文章通过一个简单的表格来给大家讲清楚列式存储。

还是老规矩,先上导读图,然后开始~

什么是列式存储?

从一个表格说起

要讲列式存储,首先要讲表格,我们平常统计数据用Excel,就是最常见的表格。

如下表格,我们统计了学生的基本信息:

学号 姓名 性别 成绩
001 张三 60
002 李四 70
003 王五 80

行和列组成了我们看到的表格,我们说的列式存储是与行式存储相对而言的。

不看表头(学号、姓名、性别、成绩),我们看其他的数据行。

假如现在我说:“我们要把学生的基础信息以行来分开保存到记事本里边”,你下意识的会不会这么操作?

复制、粘贴第一行保存到记事本《张三.txt》

001 张三 60


复制、粘贴第二行保存到记事《李四.txt》

002 李四 70


复制、粘贴第三行保存到记事《王五.txt》

003 王五 80


其实这个下意识的操作,就是我们的行式存储

抽象成存储的数据结构,可以长这样子:

什么是列式存储?
行式存储数据结构

而我们今天的主角,列式存储会是什么样子呢?

是不是很容易想到?

复制、粘贴第一列保存到记事《学号.txt》

学号
001
002
003


复制、粘贴第二列保存到记事《姓名.txt》

姓名
张三
李四
王五


复制、粘贴第三列保存到记事《性格.txt》

性别


复制、粘贴第四列保存到记事《成绩.txt》

成绩
60
70
80


抽象成存储的数据结构,可以长这样子:

什么是列式存储?
列式存储

是不是很简单,不管怎么简单,这就是我们常说的行式存储列式存储的概念。MySQL、PostgreSQL 等传统的关系型数据库用的行式存储,我们把他归类为在线事务处理(Online Transaction Processing、OLTP);ClickHouse、Hive 和 HBase 等用于在线分析处理(OLAP)场景的数据存储往往都会使用行式存储

优势

说清楚了概念,我们再来聊一聊为什么列式存储会突然出现在我们面前?相比我们的行式存储,它有什么优势?

从马云早些年喊出大数据石油论,可见大数据在大公司的地位,但是这些年来,一些中小型公司也慢慢的重视起大数据来,因为确实通过分析客户的数据能够提高订单的成交量,就比如商城我们常看到的相关推荐。

随着大数据、数字化成为很多公司的战略。而大数据、数字化这些战略的背后,我们需要有数据的存储容器,即数据库。

最开始,我们会一股脑的放在我们的MySQL里边,但是随着时间的推移,数据量越来越大,会发现很多统计查询会越来越慢,最后查询分析数据的速度,满足不了业务的需求了。

怎么办?查询慢,建索引解决呗~

还不行又怎么办?彻底分析需求,还是得从根本上(数据结构)上想办法。

假设存在需求:求平均成绩

计算方式:(60+70+80)/3 = 70

SQL:

SELECT AVG(`成绩`FROM `Students`;

还是以上边的表格来分析。

如果我是行式存储,存储了三个文件《张三.txt》、《李四.txt》、《王五.txt》,如果要拿出他们各自的成绩,我需要分别从《张三.txt》、《李四.txt》、《王五.txt》三个文件去获取成绩,然后进行平均值计算;

如果我们以列式存储的呢?因为需求成绩这一列的平均值,我直接从《成绩.txt》这个文件里边拿出数据,再计算平均值就好了。

感觉到优势了吗?

这也是列式存储的(最大)优势,即:

能够快速读取特定列。

如果从事大数据分析行业的朋友,想想你的一些需求,是不是大多数都是计算某列数据的值?

继续讲列式存储的另外一个好处,连续的空间利于算法压缩

因为列式存储将同一列的数据存储在一起,所以使用压缩算法可以得到更高的压缩率,减少存储占用的磁盘空间。压缩算法的基本原理其实很简单,它使用基于特定规则的数据表示原数据,如下所示的字符串中包含连续的相同字符,我们使用最符合直觉的压缩算法就可以减少字符串的长度:

什么是列式存储?
重复数据压缩后的列式存储

以上就是把“男男男“,存储成了”男3“,表示重复的”男“这个字符有3个。同理,如果我们数据量大了,有很多分数相同的,也可以进行同样的压缩。

不是银弹

列式存储也并非银弹(比喻什么问题都能解决的方式方法),我们来想一想他的一些什么缺点,我先来说一个~

列式存储是连续空间,连续空间就和我们的数组结构一样,虽然查询的速度是快了,但是修改(增删改)的速度就要各种挪动元素了。

总结

文章到这里就结束啦~来总结回顾一下,开始我们从一个简单的表格出发,讲了行式存储和列式存储的概念,然后说清楚列式存储为什么会突然出现在我们面前,并推导出了列式存储的两个优点:

  1. 快速读取特定列;
  2. 连续的空间利于算法压缩;

最后也说了,列式存储并非银弹,只是在不同的诉求下,有不同的方案取舍。

还推荐两篇写得很好的文章给大家:

https://draveness.me/whys-the-design-olap-column-oriented/

https://juejin.cn/post/6844904118872440840

我是连边,希望这篇文章对你有收获~

原文始发于微信公众号(连边):什么是列式存储?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/61935.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!