2023-04-17 mysql列存储-聚合处理-第三阶段-概要设计
摘要:
对于聚合的处理, mysql列存储引擎性能十分低下,并且会引发内存OOM.
在第二阶段的聚合处理为了使用旧有的数据流方式, 做了一些错误的多线程并行分割的设计。
现在开启第三阶段的聚合, 以正确的数据流来实现聚合的物化模型。
需求分析:
功能需求:
- 加速聚合处理, 性能提升以经典的物化模型为基准
- 开启第三阶段的聚合处理后, 与不开启时, 执行结果前后保持一致
- 不保证与innodb的结果一致, 仅加速聚合,不处理此前的错误的聚合结果
性能需求:
- 性能基准以clickhouse为对象, 而非以innodb为对象
- 内存占用不会OOM
设计思想:
- 以物化模型处理磁盘IO, RAM, cpu cache, cpu pipeline
- 不拘泥现有的存储模型, 为了加快查询速度, 在原有的顺序存储的列数据之外, 添加新的辅助的列数据
- 不拘泥于现有的列存储数据的访问方式, 为了正确的物化, 直接从辅助的列数据中组织数据流的访问方式