本文由滑铁卢大学的Amine Mhedhbi和Semih Salihoglu发表
摘要
本文主要研究子图查询优化问题,并使用新的 worst-case optimal join plans
。
worst-case optimal join plans
通过使用多路交叉一次匹配一个查询顶点来评估查询。
其核心问题是选取一个查询点序。
本文中我们设计了一个基于代价的优化器,其作用是:
1、选取有效的查询点序。
2、生成混合计划,包含传统的Binary Join和 worst-case 风格的多路交叉。
同时描述了一个适应性技术,在查询执行中可以改变 worst-case optimal subplans 的序。
1. 相关介绍
子图查询是一个图数据库所支持的基本查询类,用来在一个输入图 G ( V , E ) G(V,E) G(V,E) 中找到一个子图查询实例 Q ( V Q , E Q ) Q(V_{Q}, E_{Q}) Q(VQ,EQ) 。
本文研究评估一个点和边都带有标签的子图查询类。对于有标签的查询,查询边对应的边表只包含G中和点和边标签一致的边。
子图查询使用两种方法评估:
- Query-edge(s)-at-a-time
- 执行一个Binary Join序列来评估Q。每个Binary Join有效地匹配G中Q的查询边的更大子集,直到Q匹配为止。
- Query-vertex-at-a-time
- 选取一个 V Q V_{Q} VQ 的查询点序,根据查询点序,使用多路连接符,匹配一次查询Q的一个查询点。使用 worst-case optimal join 算法计算,交合一个或多个点邻接列表来扩展部分匹配。
本文主要贡献
第一个主要贡献
动态规划优化器,可生成带有Binary Join和扩展/相交操作符通过一个查询点来扩展部分匹配。
优化器通过两种可替换的方法枚举计划,评估查询Q的k点子查询 Q k Q_{k} Qk, k = 2 , . . . , m k=2,...,m k=2,...,m:
- 两个更小的子查询的Binary Join
- 通过一次相交,用一个查询点扩展一个子查询 Q k − 1 Q_{k-1} Qk−1
优化器使用 intersection cost (i-cost) 来排序 WCO 计划。
i-cost表示一个计划中相交的工作量,其使用计划中要相交的领接表的大小信息。
结合i-cost和Binary的代价来排序混合计划。
代价度量考虑输入图的属性,例如前后邻接表大小的分布,将作为计划的一部分计算的不同子图的匹配数。
我们使用子图目录来估计 i-cost, Binary Join的代价, 计划中会产生的部分匹配的数量。
子图目录包含:
(i) 输入图的领接表大小分布
(ii) 在小子图上对于不同相交的选择
第二个主要贡献
使用适应性技术来选取 WCO 中的查询点序。
2. 初步工作
Generic Join 是 WCO 连接的一个算法,每次计算查询的查询点有两步:
- Query Vertex Ordering (QVO)
- Iterative Partial Match Extensions
3. Optimizing WCO plans
展示内容:
- WCO plans
- 指定的不同 QVOs 的影响
- WCO plans 的 i-cost metric
WCO plans and E/I(Extend/Intersect) operator
使用两个操作符
Scan
计划中的叶节点,匹配一条查询边,使用一个 Scan 操作符来评估。Scan 操作符扫描图G中的前邻接表,匹配查询边上的标签,和它的起始点和终点,并且输出每个匹配成功的边作为 2-match。
Extend/Intersect
E/I操作符接收输入的(k-1)-matches,并将每个元组t扩展到一个或多个k-matches。
操作符配置了一个或多个邻接表描述符和目标点的标签 l k l_{k} lk
每个操作符是一个(i, dir, l e l_{e} le)元组,i是t中点的索引,dir是前或后的方向, l e l_{e} le是查询边上的标签。
对于每个(k-1)-match t,描述符首先通过相交所描述邻接表计算 t 的扩展集 S,确保匹配到特定的边和目标点标签,然后扩展 t 到 t × S 。
对于单个描述符,S是此描述符所描述的列表。否则使用迭代二路串联相交。
在一个 E/I 操作符连续处理的多个(k-1)-matches,如果它们进行相同的相交,则它们需要相同的扩展集。在这种情况下,我们的 E/I 操作符缓存并重复使用最近的扩展集。相交缓存可以全面提高 WCO 计划的性能。
Effects of QVOs
三个主要的因素影响相交工作和 WCO 运行时间:
- 相交的邻接表的方向
- 查询点序生成的中间部分匹配的数量
- 查询点序使用相交缓存的量
1. Directions of Intersected Adjacency Lists
邻接表方向组合的效率,依赖于输入图的结构性质,例如前后邻居表的分布。
2. Number of Intermediate Partial Matches
带尾三角状查询可由 WCO 两大类评估:
- Edge-2Path
- Edge-Triangle
∣ E ∣ |E| ∣E∣ 表示边的数量
∣ 2 P a t h ∣ |2Path| ∣2Path∣ 表示2边路径
∣ △ ∣ |\bigtriangleup| ∣△∣ 表示三角形的数量
在忽略扩展和相交的方向下,Edge-2Path
完成 ∣ E ∣ |E| ∣E∣次扩展加上 ∣ 2 P a t h ∣ |2Path| ∣2Path∣次相交,然而Edge-Triangle
完成 ∣ E ∣ |E| ∣E∣次相交加上 ∣ △ ∣ |\bigtriangleup| ∣△∣次扩展。
QVOs产生更少的中间匹配,依赖于:
- 查询结构
- 对于带标签的查询,查询标签的选择
- 输入图的结构性质,图的聚集系数越低,中间产物越低
3. Intersection Cache Hits
如果QVO扩展(k-1)-matches,使用带索引 a 1 . . . a k − 2 a_{1}...a_{k-2} a1...ak−2 的邻接表匹配到 a k a_{k} ak ,E/I操作符的相交缓存会使用更多。
使用 ( k − 1 ) t h (k-1)^{th} (k−1)th 索引的相交不能重复使用,因为 a k − 1 a_{k-1} ak−1 是前一个E/I操作符相交的结果,并且会匹配不同的点ID。
但是那些使用索引 a 1 . . . a k − 2 a_{1}...a_{k-2} a1...ak−2 有重复使用的可能性。
缓存可以提供类似因式分解的好处。在因式分解处理中,查询结果表示为查询独立成分的笛卡尔积。
Cost Metric for WCO Plans
intersection cost(i-cost) 定义为被不同 WCO 计划使用和相交的邻接表的大小。
令 t t t为 Q k − 1 Q_{k-1} Qk−1的一个(k-1)-match,假设 t t t通过相交一个使用邻接表描述符 A k − 1 A_{k-1} Ak−1的邻接表的集合来扩展到 Q k Q_k Qk的实例。 σ \sigma σ的i-cost的形式为:
KaTeX parse error: Undefined control sequence: \substack at position 97: …Q_{k-1}} \sum_{\̲s̲u̲b̲s̲t̲a̲c̲k̲{(i,dir)\in A_{…
∣ t . d i r ∣ |t.dir| ∣t.dir∣捕获不同方向上的邻接表的大小
第二个求和覆盖所有中间匹配,获取中间匹配的大小
最后一个求和覆盖所有使用的邻接表,忽略相交时已缓存的表。
4. Full Plan Space & DP Optimizer
完整的任务计划包括:Binary Join,E/I操作符,这些计划的代价以及动态规划优化器
Hybrid Plans and HashJoin Operator
一个计划是一个有根树
Q k Q_k Qk是 Q Q Q的一个投影,投射到k个查询点的一个任意集合
叶节点标记为 Q Q Q的单个查询边
根节点标记为 Q Q Q
每个内部点标记为 Q k Q_k Qk,是查询点的子集的投影
内部点 o k o_k ok要么有一个child,要么有两个children。
有一个子节点的 o k o_k ok标记为 Q k − 1 Q_{k-1} Qk−1,是 Q k Q_k Qk的子图,其中点 q v ∈ V k q_v \in V_k qv∈Vk