什么是列式存储?

522次阅读  |  发布于2年以前

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

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

从一个表格说起

要讲列式存储,首先要讲表格,我们平常统计数据用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. 连续的空间利于算法压缩;

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

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8