这是我参与「第四届青训营」笔记创作活动的的第12天 今天我学习了Parquet与ORC高性能列式存储的相关知识。
1,列存 VS 行存
概述数据格式层的作用和定位,对比列式存储和行式存储的基本原理和使用场景。
计算层:各种计算引擎
存储层;承载数据的持久化存储
数据格式层:定义了存储层文件内部的组织格式,计算引擎通过格式层的支持来读写文件
OLTP VS OLAP
OLTP:行式存储格式(行存)
每行的数据在文件上是连续存储的
读取整行数据效率高,单次 IO 顺序读即可
典型系统
关系型数据库:MySQL,Oracle
Key-Value数据库
OLAP:列式存储格式(列存)
每列的数据在文件上是连续存储的
读取整列的效率较高
同列的数据类型一致,压缩编码的效率更好
典型系统
大数据分析系统:SQL-on-Hadoop,数据湖分析
数据仓库:ClickHouse,Greenplum,阿里云 MaxCompute
总结
格式层定义了数据的布局,连接计算引擎和存储服务
OLTP 和 OLAP 场景化差异明显
业务场景决定了技术实现,行存适用于 OLTP,列存适用于 OLAP
2,Parquet 原理详解
详细介绍 Parquet 格式的原理、布局、以及和计算引擎的集成和优化。
Hive Table using Parquet
CREATE TABLE lineitem (
l_oorderkey int,
l_partkey int,
...
)
STORED AS PARQUET TBLPROPERTIES ("parquet.compression"="SNAPPY");
Load Data using SparkSQL
INSERT INTO lineitem SELECT * from tpch10g.lineitem;
3,ORC 详解和对比
介绍另一个常见的列存格式 ORC 的原理,主要和 Parquet 做对比,同时介绍 AliORC 的重点优化。
4,列存演进
介绍更广义场景下的列存,以及更多的列存演进和优化工作。