摘要:
最近在分析将X100引擎的处理做更为精细化的处理, 一个非常经典的场景以及算子便是聚合的处理。
本文对聚合要面临的问题做思考. 其中将视角切换为将mysql列存储的聚合做X100引擎的处理。
X100引擎:
2023-04-13 MonetDB/X100: Hyper-Pipelining Query Execution_禅定悟世的博客-CSDN博客
mysql列存储的聚合处理:
面临问题:
- 对列数据的访问方式导致难以在多线程切片时做到线程安全
- 聚合使用的hash表的key, 直接数据拷贝grouping的列
- 采用了经典的火山模型
导致的困境:
- 列数据横向切片的困难, 导致了无法做到线程并行
- 突入表现在
- 线程安全, 临界区界定模糊, 导致在访问数据时的错误
- 一些数据类型在访问时候计算, 比如decimal, 导致多个线程同时修改同一份数据
- 聚合的hahs表使用grouping列的值当作key, 最突出的问题就是导致了性能和内存占用
- 火山模型则导致了向量化的问题
- 火山模型的iterator导致了数据的访问非向量化
- 不利于CPU的cache
- 在火山模型的访问的过程中生成聚合hash导致多流水线分支预测的生效
数据存储的方式:
<