2023-04-17 stonedb-聚合处理-第三阶段-概要设计

本文介绍了Stonedb在聚合处理上的性能优化,第三阶段的设计目标是加速聚合,提升性能基准,并减少内存占用。设计思想包括采用物化模型处理数据流,分离分组与聚合运算,以及利用多线程并行处理。文章详细阐述了列数据存储策略,包括定长和变长数据的存储方式,以及辅助列数据文件和定位文件的构建。在聚合处理模型中,提出分组与聚合运算分离,逐个属性物化和多线程并行处理的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要:

对于聚合的处理, mysql列存储引擎性能十分低下,并且会引发内存OOM.

在第二阶段的聚合处理为了使用旧有的数据流方式, 做了一些错误的多线程并行分割的设计。

现在开启第三阶段的聚合, 以正确的数据流来实现聚合的物化模型。

需求分析:

功能需求:

  1. 加速聚合处理, 性能提升以经典的物化模型为基准
  2. 开启第三阶段的聚合处理后, 与不开启时, 执行结果前后保持一致
  3. 不保证与innodb的结果一致, 仅加速聚合,不处理此前的错误的聚合结果

性能需求:

  1. 性能基准以clickhouse为对象, 而非以innodb为对象
  2. 内存占用不会OOM

设计思想:

  1. 以物化模型处理磁盘IO, RAM, cpu cache, cpu pipeline
  2. 不拘泥现有的存储模型, 为了加快查询速度, 在原有的顺序存储的列数据之外, 添加新的辅助的列数据
  3. 不拘泥于现有的列存储数据的访问方式, 为了正确的物化, 直接从辅助的列数据中组织数据流的访问方式

列数据存储:

  1. 分出定长存储的列与变长存储的列
  2. 定长存储的列, 直接以 列[行号]->值, 以数组的方式进行存储, 可直接通过行号访问到数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟世者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值