什么是列式存储
传统的数据编码方式是以行为单位进行,列式存储则是将数据划分成数据块,每个数据块内部按列的方式进行编码存储,通过使用列式存储会有以下好处:
- 存储效率更高,因为同一列的数据类型一致,编码效率也会更高
- 查询效率更高,利用列式存储的统计信息,可以跳过大量的数据,减少IO压力
parquest与ORC的分析
1.Parquet
(1)Parquet 支持嵌套的数据模型,类似于 Protocol Buffers,每一个数据模型的 schema 包含多个字段,每一个字段有三个属性:重复次数、数据类型和字段名,重复次数可以是以下三种:required (只出现 1 次),repeated (出现 0 次或多次),optional (出现 0 次或 1 次)。每一个字段的数据类型可以分成两种: group (复杂类型) 和 primitive (基本类型)。
(2)Parquet 中没有 Map、Array 这样的复杂数据结构,但是可以通过 repeated 和 group 组合来实现的。
(3)由于 Parquet 支持的数据模型比较松散,可能一条记录中存在比较深的嵌套关系,如果为每一条记录都维护一个类似的树状结可能会占用较大的存储空间,因此 Dremel 论文中提出了一种高效的对于嵌套数据格式的压缩算法:Striping/Assembly 算法。通过