今天这篇文章通过一个简单的表格来给大家讲清楚列式存储。
还是老规矩,先上导读图,然后开始~
要讲列式存储,首先要讲表格,我们平常统计数据用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个。同理,如果我们数据量大了,有很多分数相同的,也可以进行同样的压缩。
列式存储也并非银弹(比喻什么问题都能解决的方式方法),我们来想一想他的一些什么缺点,我先来说一个~
列式存储是连续空间,连续空间就和我们的数组结构一样,虽然查询的速度是快了,但是修改(增删改)的速度就要各种挪动元素了。
文章到这里就结束啦~来总结回顾一下,开始我们从一个简单的表格出发,讲了行式存储和列式存储的概念,然后说清楚列式存储为什么会突然出现在我们面前,并推导出了列式存储
的两个优点:
最后也说了,列式存储并非银弹,只是在不同的诉求下,有不同的方案取舍。
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8