Shoal:高效的查询优化与算子放置策略
在数据处理和查询优化领域,如何高效地执行连续查询并优化算子放置是一个关键问题。Shoal作为一种查询优化和算子放置的解决方案,为我们提供了有效的方法。下面将详细介绍Shoal的相关内容。
1. 优化与放置问题的提出
在连续查询优化中,传统的“先优化再放置”方法可能导致次优方案。例如,一个简单查询包含三个过滤器(f1、f2、f3)、一个连接(j1)和一个投影(s1)。若将优化和放置步骤分开,可能会造成大量数据在网络中传输,增加网络成本。如f1和f2的选择性组合为0.92,意味着大量数据会传输到连接操作,但连接操作的选择性仅为0.05,产生的数据量较小。若优化查询使f3在连接之后执行,可显著降低网络成本,提高查询计划质量。因此,优化和放置步骤需同时考虑。
2. Shoal优化器算法
2.1 动态规划算法(DynamicProgramming)
1: DynamicProgramming(sc, perms, sites)
2: optPlace= new Array(ArrayList(plan))
3: for leaf ∈leaves(sc) do
4:
optPlace[0] = ∅
# Initialize Empty list at level 0
5:
for s ∈sites do
6:
for l ∈operators(leaf) do
7:
if s.cap ≥l.c && (< l, l.metadata.field >∈s
超级会员免费看
订阅专栏 解锁全文
35

被折叠的 条评论
为什么被折叠?



