Incremental StreamQuery Merging-论文阅读

Incremental StreamQuery Merging-论文阅读
会议:EDBT 2023

摘要:
流处理引擎(SPE)对无界数据流执行长时间运行的查询。它们主要致力于实现单个查询的高吞吐量和低延迟。这种关注忽略了在多个长时间运行的查询之间可能共享数据和计算的机会。面向批处理系统中的常见方法主要利用基于句法相似性的简单快速的查询合并算法,因为更广泛的方法的开销不会在短的查询运行时间内分摊。相比之下,流式查询是连续的和长时间运行的,因此广泛的方法,如考虑查询的语义,可能会得到回报。此外,流式询问的长时间运行特性需要合并现有的和新到达的查询,而批处理查询只在一批到达的查询中执行合并。
在本文中,我们提出了增量流查询合并(ISQM),这是一种端到端的解决方案,用于识别和维护数千个流查询之间的共享。ISQM捕获流查询的语义信息,即使在存在语法差异的情况下也能进行合并。我们的评估表明,与最先进的方法相比,使用基于哈希的签名,ISQM利用了比原始基线多65倍的共享机会,可以线性扩展数千个查询,并节省了大量资源。

背景:
针对长时间的流式查询,需要流式的合并现有的和新到达的查询。在本文中,我们提出了增量流查询合并(ISQM),识别和维护多个流查询之间的共享。
比如对城市交通流的实时查询:
在这里插入图片描述

图1显示了两个语法不同但语义相似的流查询,用于可疑车辆的交通监视。Q1首先将速度转换为英里/小时(mph),然后选择速度超过100 mph的红色车辆。在生成的流中,Q1然后根据车辆的颜色开一个5min的滚动窗口,并找到每组键入的最大速度;相比之下,Q2首先选择速度超过100英里/小时的车辆,然后转换它们的速度。在生成的流中,Q2应用5分钟长度的滑动窗口并滑动(相当于5分钟的翻滚窗口),以找到由其颜色键入的具有最大速度的车辆,并仅选择红色车辆。
尽管在语法上不同(即,以不同的顺序应用不同的运算符),但两个查询都会产生相同的结果流。

介绍:
为了实现以上需求,流处理引擎(SPE)应该做到:
1)能够处理流运算符的特殊语义,如窗口语义;
2)同时考虑正在运行的查询和新到达的查询;
3)通过使用高效的数据结构,在运行时表示和维护数千个流查询的共享机会。

本文提出的ISQM如何满足以上需求:

  • 对于需求1),ISQM利用特殊的签名来捕获由关系和特殊流运算符执行的操作,例如窗口联接或聚合。由于这些签名捕获了语义信息,即使在存在句法和结构差异的情况下,ISQM也可以识别共享机会。
  • 对于需求2),ISQM维护了一个全局查询计划(GQP),该计划能够探索新到达的查询和已经运行的查询之间的共享机会。此外,ISQM通过使用特殊索引来修剪用于共享标识的搜索空间,从而实现低延迟共享标识。
  • 对于需求3),ISQM使用启发式、候选修剪和共享识别策略的自适应选择(SM+)来权衡优化时间和共享识别工作。ISQM确定了数千个流查询之间的共享机会,与它们的语法结构无关,并有效地管理了数千个共享查询计划。

实验表明,ISQM在合理的时间内发现了多达65倍的共享机会。此外,利用ISQM中的共享机会可以在运行时显著节省资源(最多减少5.4倍的计算和16倍的网络资源)。

可满足性:在逻辑学和计算机科学中,可满足性问题是判断一个给定的逻辑公式是否存在一组变量的赋值,使得该公式为真。如果存在这样的赋值,则称该逻辑公式是可满足的;否则,它被称为不可满足的。
可满足性模理论(Satisfiability Modulo Theory,简称SMT)是一种将可满足性问题(Satisfiability,SAT)扩展到包含多个理论的问题的方法。
可满足性问题是判断一个给定的逻辑公式是否存在可满足的解,即是否存在一组变量的赋值使得逻辑公式成立。
可满足性模理论通过扩展SAT问题的范围,将多个理论的约束和限制加入到逻辑公式中,以更准确地建模和解决实际问题。这些理论可以包括整数论、线性规划、位向量操作、数组理论、集合论等等。SMT问题需要考虑逻辑公式的可满足性,并且要求这些公式同时满足各个理论的约束。
SMT求解器是用于解决SMT问题的工具或软件。它们能够自动地分析、推理和求解包含多个理论约束的逻辑公式。SMT求解器在软硬件验证、程序分析、形式化验证、自动化规约等领域得到广泛应用。
总之,可满足性模理论为多理论约束问题提供了一种统一的框架和求解方法,使得我们能够更有效地解决包含多个理论的复杂推理和验证问题。

系统概述:
在这里插入图片描述

图显示了ISQM如何通过附加阶段扩展SPE的查询优化器,在优化查询计划(如图中Query Rewrite)之后和将查询映射到集群中的节点之前(Query Placement)引入了三个阶段,即签名计算、共享标识和全局查询计划更新。在初步步骤(未显示)中,SPE将提交的查询转换为连接运算符的图,即所谓的查询计划,并将该计划交付给优化器。总体而言,ISQM是一个通用框架,允许轻松集成其他共享识别方法,例如,查询计划的结构分析或基于查询句法属性的签名分析。
之后优化的可能性,和流式处理引擎,比如Flink相结合的时候可以从内部修改其查询优化器,或者借用该查询优化器实现具体业务的查询优化。
阶段细节:
1)Query Rewrite:应用一组规则来规范输入查询计划。这种规范化消除了一些语法差异(例如,冗余表达式消除)并优化了查询计划(例如,联接顺序优化)。重写规则因不同的系统和查询计划而异。
2)Signature Computation:这个阶段自下而上地遍历查询计划,对于每个操作符,基于操作符属性和其上游运算符的签名创建一个签名。签名计算阶段捕获流数据流中的所有语法和语义转换,并使用SR表示签名。因此,签名涵盖了运算符及其上游运算符执行的所有语义转换。
3)Sharing Identification:通过查询的签名来识别共享机会。ISQM不断维护表示所有正在运行和合并的查询的全局查询计划(GQP)。当查询计划进入GQP时,我们将其称为共享查询计划(SQP)。共享识别阶段包括两个步骤。首先,它从GQP中提取候选SQP的集合,并考虑它们来探索共享机会。这种提取允许ISQM以减少共享机会为代价来减少用于共享标识的总体搜索空间。其次,该阶段使用签名检查候选SQP和新查询计划之间的平等性,签名不仅捕获语法信息,还捕获语义信息、启发式集合和SMT求解器。如果该阶段发现共享机会,它将一对匹配的运算符转发到下一阶段。否则,ISQM将整个新的查询计划转发到下一阶段。
4)Global Query Plan Update:基于上一步更新现有的SQP或格努查询计划更新新的SQP。
5)Query Placement:接受更新的SQP,并为其执行计划执行运算符放置。
总的来说,ISQM的目标是在新的查询计划和已经运行的SQP之间实现计算和数据共享。因此,现有资源得到了更好的利用,SPE的整体效率也得到了提高。在以下各节中,我们将详细介绍新引入的阶段。

技术点:

- 签名计算阶段SIGNATURE COMPUTATION PHASE:

1)签名表示:
ISQM用一个三元组表示签名:SIG=(PRED, TT, WIND)
PRED:运算符及其上游运算符的所有谓词的SR(签名表示),它捕获输出元组必须满足的所有谓词的连接。
TT:表示元组变换(Tuple transformation,tt)的向量。tt使用SR捕获流元组上的所有操作。例如,Map更新一个属性,Project删除或重命名一组属性,Join合并两个可能不同的流中的属性。因此,tt将属性名称(应用变换的位置)映射到相应的SR(应用什么变换)。注意,二进制运算符接收来自多个流的元组,因此我们将tt存储在向量tt中, 即每个流一个条目。
WIND:表示窗口SR的向量,在当前操作符之前(包括当前操作符)观察到的每个窗口操作符都有一个SR,包括窗口定义(即窗口大小、幻灯片、按属性可选键、时间属性)及其操作的结合。
2)签名计算:
在这里插入图片描述

SCP从上游到下游遍历查询计划运算符,并执行以下三个步骤进行签名计算:
1.提取关于当前运算符执行的操作的信息,例如转换、谓词求值或窗口操作,并基于它们计算SR。(图中紫色方框为提取出的签名)
2.通过替换上游操作符转换来的签名更新这些SR。(图中使用直接虚线箭头,表示上游签名和操作符签名之间的关系)。此步骤允许更新的SR表示对转换的属性执行的操作。(后文有详细介绍)
3.通过将更新的SR与来自其上游操作符的签名相结合来构建新的签名。此步骤允许签名共同表示由运算符及其上游运算符执行的语义转换。结果,SCP在计算下游运营商的签名时重用新计算的签名。
注:第一步和第三步是操作符独立的。
窗口连接:
针对Flink不同算子有不同的计算流程,流式查询中定义了一个Window Join运算符,用于对无边界的数据流执行连接。为此,窗口联接运算符首先在来自两个上游运算符的流上定义窗口,然后使用连接谓词连接来自同一窗口的两个流的元组。
Tt:通过来自两个上游签名的TT之间执行笛卡尔乘积获得一个新的tt向量。笛卡尔乘积允许构造tts,它捕获输出元组的所有可能组合中的转换。
Wind:SCP合并来自两个上游签名的wind获得一个新的wind。此外,SCP计算第二步中所有更新SR的总和,并将其添加到WIND中。
PRED:来自两个上游的PRED的结合。
举例:图中©表示窗口连接操作符。紫色框中,tt表示两个上游算子的tt向量的笛卡尔乘积;PRED表示来自两个上游特征的PRED的结合;WIND来自上游签名和表示窗口定义的SR和连接谓词。
(其他操作也有介绍)
这个过程也是SPE实现查询的一个实例过程,通过计算签名将传统查询改为流式计算。

  • 全局查询计划GQP:

1)组成:
表示SPE中所有正在运行的查询,由共享查询计划(SQP)(不相交边)、源索引和查询索引的集合组成。

  • 共享查询计划(SQP):查询计划的集合,以便合并查询计划中的所有通用运算符。由此产生的SQP实现了数据共享(对相同流的查询)和计算共享(运算符之间具有语义等效的查询)。
    在这里插入图片描述

实例图3在左边显示了四个示例查询计划,在右边显示了表示这些示例查询的GQP。查询Q1和Q2共享公共源流(即A和B)和运算符,如图左侧绿色矩形所示。
ISQM通过合并共享运算符来计算SQP1,如图右侧绿色矩形所示。同样,ISQM也通过合并Q3和Q4之间的共享运算符(如蓝色所示)来计算SQP2。注意,即使Q1、Q2、Q3和Q4共享一个公共流a,ISQM也不会将这些查询合并在一起。

  • 源索引(Source Index):源索引将顺序无关的流名称的哈希值映射到对应的SQP上。

实例图3显示了示例GQP的源索引。源索引包含SQP1和SQP2的条目。由于SQP1对源A和B进行操作,因此源索引包含由h(A+B)表示的哈希值与SQP1之间的映射。类似地,源A的散列值h(A)被映射到SQP2。

  • 查询索引(Query Index):查询索引将查询的唯一标识符映射到包含它的SQP。由于GQP可能包含涉及数千个查询的大量SQP集合,ISQM使用查询索引来获取相应的SQP。

实例图3显示了示例GQP的查询索引。SQP1包含查询Q1和Q2。因此,查询索引包含将两个查询与SQP1映射的条目。

2)共享识别(Sharing Identification Phase):
这一阶段需要判断两查询流是否相等及找出相同部分操作符。

  • 签名相等性:
    如何比较签名是否相等:
    如果两个运算符输出相同的元组,那么它们是相等的。检查两个运算符之间相等性的一种简单方法包括检查类型、表达式以及运算符及其上游运算符的顺序。
    然而,具有不同表达式和上游运算符顺序的运算符仍然可以具有语义等价,为了识别这种等价性,ISQM使用捕获运算符及其上游运算符的整体语义信息的签名。生成的签名标识独立于表达式和上游运算符顺序的相等性。
    ISQM利用一组启发式算法和SMT求解器来检测两个签名之间的相等性。
    在这里插入图片描述

图4显示了签名相等性检查中涉及的不同步骤。其中启发式检查指在签名属性上应用一组先决条件,分别对两个签名tt向量的长度、密钥数量、输出元组的属性数、WIND向量的长度等信息进行检查。此步骤旨在检测两个签名之间的不平等,而无需调用SMT求解器。

  • 共享标识Sharing Identification:

如何确定查询完全和部分分享。
两个运算符之间的签名相等表示运算符及其上游运算符链(独立于运算符顺序)相等,因此可以合并以共享数据和计算。这一阶段需要识别完全和部分共享识别,若完全共享则将两个查询比较在一起;部分共享则合并查询之间最大共享部分。
图5

基于感兴趣的属性(例如,源),计算属性的哈希值,并在GQP中查找源索引以获取候选SQP;对于完全共享,在候选SQP集合上迭代的比较新查询计划和旧SQP sink算子的签名,如果签名相等,则将新查询计划和SQP的匹配运算符和标识符发送到下一阶段;否则,该阶段迭代到下一个候选SQP,并重复签名比较过程,直到找到一对匹配的汇聚运算符。如果它没有找到匹配,它将新的查询计划转发到下一阶段,用于更新GQP。
实例图5显示了共享识别阶段如何在Q1和SQP1之间执行共享识别。首先,将来自Q1的签名SIG3与来自SQP1的签名按广度优先顺序(即,SIG6、SIG5、SIG4)进行比较。然而,由于语义差异,该阶段没有发现匹配的签名(图5(a))。接下来,将来自Q1的签名SIG2与来自SQP1的签名按广度第一顺序进行比较。在这个迭代中,SIG2与来自SQP1的签名SIG5匹配(图5(b)绿色箭头)。然后,该阶段将查询和SQP中的一对匹配运算符发送到全局查询计划更新阶段。

3)更新:
GQP管理正在运行的查询和新到达的查询之间的共享机会。
如何增量添加匹配的查询:
当新的查询计划到来时,首先查询GQP中是否包含或部分包含与该查询计划匹配的SQP,若包含,则将查询计划添加到SQP中,若不包含,则创建新的SQP。
在这里插入图片描述

实例图6显示了在GQP中将查询计划Q5添加到SQP1中。Q5的信宿运算符Snk5与SQP1的信宿操作符Snk2匹配(以蓝色示出)。由于两个运算符都是sink类型,因此首先GQP更新阶段将Snk5添加到Snk2的上游运算符U1。其次,该阶段通过向SQP1添加条目映射Q5来更新查询索引。
实例在图6的底部,我们展示了一个新的SQP3,它复制了收到的查询计划Q6。此外,此阶段通过将Q6映射到SQP3来更新查询索引,并通过映射源名称的哈希值来更新源索引C至SQP3。
实例图6以红色显示了从GQP中删除查询Q3。此阶段通过删除专门为Q3服务的Snk运算符3、P1和M3来更新SQP2。此阶段保留F4及其上游运算符,因为它们为正在运行的查询计划Q4提供服务。最后,此阶段通过删除查询Q3的条目来更新查询索引。

实验:
我们生成对四个不同流进行操作的合成查询。总体而言,查询集由100个不同的查询组组成。在这个实验中,我们将查询总数从2K增加到12K,增量为2K。
指标:共享效率和优化时间。共享效率是来自合并到GQP中的新查询的运算符的百分比。优化时间表示从查询到达到将其添加到GQP之间所花费的总时间。
使用一个开源的查询生成器,将要生成的查询数量、一组源模式和定义生成的查询之间的相似性(完整或部分)组成的配置作为输入,生成具有不同特征的合成查询。
基线:无共享查询、基于结构分析的共享识别(SA)、基于哈希签名的共享识别(HB)、改进的基于哈希签名的共享识别(HB+)、
结论:与所有最先进的基线方法相比,ISQM实现了更高的共享效率,并显示出显著的资源节约。
1)增量为语义相等查询(Increasing Semantically EqualQueries):
实验结果:
在这里插入图片描述

随着查询数量的增加,SM在共享效率方面优于所有基线。特别是,SM发现共享机会比效率最低的方法(HB)多16.4倍至59.8倍,比效率最高的基线(HB+)多2.6倍至7.5倍。就优化时间而言,SM比最慢方法(SA)快1.1倍至5.7倍,比最快方法(HB和HB+)慢1.7倍至4.2倍。最后,在没有启发式的情况下,我们的方法(SM-NOH)需要2.5到3.2倍的优化时间。
该实验证实,与其他方法相比,SM识别了更多的共享机会,因为它捕获了查询中的语义信息,并利用它来识别具有句法差异的查询之间的共享。
2)增加不同查询(Increasing DistinctQueries.):
在这里插入图片描述

随着不同查询的百分比的增加,所有方法的共享效率都会降低。SM在所有方法中实现了最高的共享效率,因为它利用查询之间的语义关系来共享标识。然而,SM的聚合优化时间随着不同查询数量的增加而显著增加。SM优化时间的增加是因为GQP中SQP数量的增加(由于不匹配的查询)。与使用快速哈希比较的基线HB和HB+或使用故障快速图同构算法的SA相比,SM使用了更昂贵的SMT求解器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值