实操课-简易列式存储 | 青训营笔记
这是我参与「第四届青训营 」笔记创作活动的第8天
-
什么是列式存储
列式存储诞生于数据仓库独有的分析模式:星型和雪花型模式。对于两种模型而言,它们需要数据平台提供:大规模读取和写入数据的能力;查询时不需要访问所有列,按需返回对应列的数据;并发不要求太高,容忍一定的时延。列式存储满足了这些要求。
想象一下,在数据仓库中往往都会存在成百上千列的宽表,当使用行式存储引擎时需要将数据平台中存储的数据里所有行从磁盘加载到内存中,解析它们,并过滤掉那些不符合要求的条件。但是当使用列式存储引擎时,只需要加载查询条件中对应的列,不需要所有行的数据,因此对于系统的负荷也相应地少了很多。
而列式存储的想法很简单:不要将数据按行存储在一起,而是按列存储在一起。所以对于列式存储而言,它依赖于每一个列文件都有着相同的顺序。
-
行存与列存的异同
| 行存 | 列存 |
|---|---|
| 按行写入数据,读取数据时需要读取不必要的列 | 可以只读取请求的列 |
| 适用于OLTP系统 | 适用于OLAP系统 |
| 适用于按记录读取数据 | 适用于按列读取数据 |
| 不利于大数据集聚合统计操作 | 利于大数据集聚合统计操作 |
| 不利于数据压缩 | 利于数据压缩 |
-
行存储的优点
1.连续空间对于插入/更新很方便
2.对于记录查询很方便
-
行存储的缺点
1.会查询出来很多不需要的列
-
列存储的优点
1.数据压缩比较有优势
2.任何列都可以做索引
3.查询时只有涉及到的列会被读取
-
列存储的缺点
1.每次查询时,都需要对查询到的列进行数据重新组装
2.插入/更新操作比较困难
(待补充)