行式存储和列式存储优缺点和paruqet文件结构

2019-04-18  本文已影响0人  alexlee666
一、列式存储和行式存储的比较

列式存储和行式存储是针对数据在存储介质中的排序形式而言的,假设存在一张table,那么:

图1-1所示为行式存储和列式存储的示意图,一张table包含5个字段(列)即rowid、date/time、customer name以及quantity,共7行,图中的红色箭头表示存储顺序。


图1-1. 行式存储和列式存储区别
二、行式存储和列式存储的优缺点和适用场景

存储形式的差异决定了适用场景的不同:

存储类别 适用于 不适用于
row-based 针对行的查询,
insert/update操作
针对列的查询
column-based 针对列的查询,
编码压缩减小存储空间占用
针对行的查询,
insert/update操作

综合来看,列式存储比较适合大数据量(压缩比高)、分析型操作(针对少数几列);不适合频率较高的删除(全列检索)、更新(重新压缩)操作

列式存储基于字典表的编码压缩

图2-1所示为列式存储中将某张table基于字典表进行编码压缩的示例,图中左边为源表,假设该table中的customers和material字段的取值均只有右上表所示的5种,那么当源表的行数很大时,customers和material字段就会存在大量重复的取值,为了节省存储空间对这两个字段进行编码,即使用一个字典表(右上图)记录该两个字段的distinct取值,又下表则用右上表字段取值对应的index(整数1、2、3、4、5)来代替原来的string,由于string占用的存储空间比这几个index占用的存储空间大多了,因此可以较大程度上压缩占用的存储空间。

图2-1. 列式存储基于字典表压缩数据
三、parquet文件结构

基于列式存储的两个典型实现是:hbase和parquet,其中:

parquet的文件结构如图3-1所示:


图3-1. parquet文件结构一览图

从图中可以看出,1个parquet文件由header(1个)、block(可以多个)、footer(1个)组成,分别负责:

图3-2所示为parquet文件中,block、rowgroup、columnchunk以及page的关系:

图3-2. parquet中rowgroup、block、columnchunk以及page的关系

简而言之:

因此如果将一个parquet文件类比成一张大excel 表,那么:

上一篇 下一篇

猜你喜欢

热点阅读