摘要:
对聚合的多线程并行化做概要设计
https://github.com/stoneatom/stonedb/issues/422
需求分析:
功能需求:
- 与现有逻辑处理的聚合条件保持一致
- 以Aggregate函数为入口, 以ResultSender为结果输出
性能需求:
表的数据量限制:
- 物理磁盘能容纳的上限
- 存在超出内存限制
内存占用限制:
- 添加参数控制聚合时候可使用的最大的内存
- 超出限制则用临时磁盘文件
执行耗时限制:
- 相同条件下,最多与innodb的聚合查询处于相同数量级
- 以小于innodb的聚合查询耗时为目标
概要功能细分:
表元组分割:
分割目标:
- 将单线程遍历的处理的表数据,均匀的分为不同的区间, 使不同的工作线程可以独立的处理某个区间的数据
- 正确处理不同的工作线程所面临的内存可见性, 确保工作线程本身功能的完整与正确,而不会由于临界区的重叠导致不同线程工