openLooKeng基层基于选择率的动态过滤优化方案实现
2023-12-24 10:30:26
前言
随着互联网的快速发展,数据量呈爆炸式增长。传统的关系型数据库(RDBMS)在海量数据查询方面面临着巨大的挑战。为了解决这一问题,近年来出现了很多新的数据库技术,如列式存储数据库、分布式数据库等。openLooKeng是阿里巴巴自主研发的分布式数据库,它采用了列式存储、分布式计算等技术,可以很好地满足海量数据查询的需求。
openLooKeng的动态过滤优化方案
openLooKeng的动态过滤优化方案是基于选择率的动态过滤机制。该机制的核心思想是依靠join条件以及build侧表读出的数据,运行时生成动态过滤条件(dynamic filters),应用到probe侧表的table scan上。通过这种方式,可以有效减少probe侧表需要扫描的数据量,从而提高查询性能。
原理
动态过滤的原理非常简单,假设我们有一个join查询:
SELECT * FROM table1 JOIN table2 ON table1.id = table2.id
在这个查询中,table1和table2是两个表,它们通过id列进行join。当我们执行这个查询时,传统的数据库系统会首先扫描table1,然后对每个扫描出的table1的行,去table2中查找匹配的行。这种方式会扫描很多不必要的数据,因为table1和table2中的数据可能存在大量冗余。
动态过滤优化方案通过在运行时生成动态过滤条件来避免这种情况。当我们扫描table1时,我们会同时收集table2中匹配的行。这些匹配的行可以用来生成动态过滤条件,这些条件可以应用到table1的后续扫描中。通过这种方式,我们可以有效减少table1需要扫描的数据量,从而提高查询性能。
实现细节
openLooKeng的动态过滤优化方案是在Optimizer层实现的。Optimizer在生成查询计划时,会考虑使用动态过滤优化方案。如果查询满足一定条件,Optimizer就会生成一个动态过滤计划。
动态过滤计划与传统的查询计划非常相似,但它多了一个动态过滤算子。动态过滤算子负责生成动态过滤条件,并将这些条件应用到probe侧表的table scan上。
动态过滤条件的生成过程如下:
- 扫描build侧表,收集匹配的行。
- 计算匹配行的选择率。
- 根据选择率生成动态过滤条件。
选择率是一个非常重要的概念,它表示匹配行的比例。选择率越高,生成的动态过滤条件越有效。
性能测试
我们使用TPC-DS数据集对openLooKeng的动态过滤优化方案进行了性能测试。测试结果表明,动态过滤优化方案可以显著提高查询性能。在某些情况下,查询性能可以提高几个数量级。
总结
openLooKeng的动态过滤优化方案是一种非常有效的优化技术。它可以显著提高查询性能,尤其是对于那些涉及大表join的查询。该优化方案已经在openLooKeng中广泛使用,并取得了非常好的效果。