How we made WINDOW JOIN parallel and vectorized
17 days ago
- #Performance Optimization
- #QuestDB
- #WINDOW JOIN
- QuestDB 引入了专用的 WINDOW JOIN 操作符,用于高效地在一个表的时间窗口内对另一个表的每一行进行聚合,简化了以往需要多次连接和联合操作的复杂 SQL 查询。
- 该操作符通过数据级并行实现高性能:左侧(LHS)表被拆分为页面帧,由工作线程处理,并采用低基数快速路径,支持 SIMD 向量化聚合。
- 关键优化包括为右侧(RHS)数据构建按键索引和连续值缓冲区,从而允许对窗口边界进行二分查找,并为 sum、avg、min、max 等聚合操作实现高效的 SIMD 内核。
- 针对 5000 万行交易数据和 1.5 亿行价格数据集的基准测试显示,在与 Timescale、DuckDB 和 ClickHouse 的对比中,QuestDB 的并行 + SIMD 实现比其单线程版本快 5 倍,比 ClickHouse 的最佳重写方案快 25 倍。
- WINDOW JOIN 操作符支持多种配置,包括单侧窗口、包含/排除当前行以及多种聚合函数,并计划在未来的版本中扩展 HORIZON JOIN 等时间序列操作符。