[WIP] Storage in AP Systems
上层架构 / 对存储的需求
相关的论文:
- SIGMOD‘16,知名的: The Snowflake Elastic Data Warehouse
- SIGMOD’22: Amazon Redshift Reinvent
- NSDI’20: snowflake 的弹性存储:Building An Elastic Query Engine on Disaggregated Storage
- (BigQuery) Dremel: A Decade of Interactive SQL Analysis at Web Scale
- PushdownDB / FlexPushdownDB
我们分成几个子话题
数据分布:
- [PVLDB’20] Fast and effective distribution-key recommendation for amazon redshift / [SIGMOD’20] Learning a partitioning advisor for cloud databases.
- https://cloud.google.com/blog/topics/developers-practitioners/bigquery-admin-reference-guide-storage / snowflake paper
调度 / 弹性
这块其实不太完全是 AP 系统的知识
- Yarn / Mesos (机制)
- DRF (策略)
计算 ( colocate )
Cache
相关文章:
facebook 关于 CacheLib 的两篇论文
snowflake 弹性存储
Crystal: A Unified Cache Storage System for Analytical Databases
Alluxio
shuffle service
- Cosco: An Efficient Facebook-Scale Shuffle Service
- Dremel: A Decade of Interactive SQL Analysis at Web Scale
Multi-tanent
这里感觉得分开来讨论, Dynamo 这些用的都是 quota 之类的,Yarn 之类的是上层调度,我不确定这里合不合适
- StarRocks技术内幕 | 资源隔离原理解析 - StarRocks的文章 - 知乎 https://zhuanlan.zhihu.com/p/605900476
计算下推
- PushdownDB: Accelerating a DBMS using S3 Computation (Presto 用了这套逻辑)
Metadata
- Big Metadata: When Metadata is Big Data
- Delta-Lake
存储格式
Parquet: https://github.com/apache/parquet-format/blob/master/Encodings.md
ORC: https://orc.apache.org/specification/ORCv2/
Doris: https://xie.infoq.cn/article/4f7d09d6185fb3055d4e7e51c
ClickHouse MergeTree
HyPer
Umbra: 内存数据库的特殊优化
Kudu: CFile,本质上和 Doris 那些 Unique 是同一套
Encoding
https://github.com/apache/parquet-format/blob/master/Encodings.md
要点:压缩率 / 性能对比,能否 SIMD,针对 pattern 做特定的优化(子问题:如何识别 pattern)
还有一些 HTAP 的编码方式。
此外,关注 SIGMOD’21 CodecDB
Query on Encoded Data
DB 可以直接在压缩的数据上跑一些简单的计算,但是这个需要让存储知道具体走了什么样的算子
Lazy Evaluation
要点:行中的列可以需要的时候再 load,不访问可以不加载,加载出来的结构也可以标识自己是 RLE 还是什么样的,来避免:
- 访问 Page 的开销
- 加载不需要的列的开销
这部分其实和实现绑定的特别死,主要是 runtime 的实现,甚至有一些是 Query Optimizer 有关的部分
字典和全局字典
要点:字典和字符串有序性
例如:StarRocks2.0.1低基数全局字典优化测试 和 PolarDB MySQL·HTAP·浅析IMCI的列存数据压缩 . 这里关心:
- 是否走到字典上(有的地方字符串类型之外的类型不会走到字典上)
- 字典的顺序是否和原始顺序一样
- 是否物化(字典可能不那么急着物化,上层可以根据字典来做 JOIN、DISTINCT 之类的优化)。
索引
这里说索引这个词有歧义,TP 方面一般这里指全局的 1:1 的索引,而 AP 这里既有 1:1 的索引,更多还是稀疏索引、Page 上、RowGroup 上的信息统计。因为做 skipping 要考虑这些信息,所以我们汇总到索引这里。
这里有:
- Page 上的统计信息,例如 Page Index / Zone Map
- Z-ordering,可以当成是拍平的 zone-map
可参考的:
有很多统计信息相关的,见:http://dimacs.rutgers.edu/~graham/ssbd.html 。论文有
此外,还有一些 SuRF 之类的 Succinct 类型: https://6.5210.csail.mit.edu/
还需要关注 Inverted Index,见 Lucene。
特殊的索引
本来 z-ordering 应该放这里的,但是由于其重要性,我们放到了上面?
IO Pattern
Share-nothing
ClickHouse
Doris
Shared-storage
Apache-Arrow
Velox
变更 (Insert / Update / Delete)
- Positional Update Handling in Column Stores:最早用 Positional Delta 描述删除的论文之一
- SQL Server (Delete + Insert 的代表,论文很多地方描述非常详细,包括 Positional Delete 和 Conditional Delete)
- Kudu (Delta File 的代表,机制和 MVCC 是整合的,Update 支持很高效,但是对 Scan / Pruning 不是很友好)
- ClickHouse MergeTree (Merge-on-Read 的代表,暴力实现)
- TiFlash (复杂的树结构)
- S2DB SingleStore
MVCC
特殊类型: struct / array / map / json
dremel and parquet
Schema Evolution
Iceberg schema evolution
Compaction
kudu compaction
Auto Clustering
snowflake auto clustering
数据导入
CDC: databus
Flink
Kafka
Husky
BigQuery Streaming / Snowflake Unistore
Data Lake
- Iceberg
- Hudi
- DeltaLake