Adaptive Distributed RDF Graph Fragmentation and Allocation based on Query Workload

PengPeng, Lei Zou, Lei Chen, and Dongyan Zhao

本文发表于2019年TKDE,由PengPeng, Lei Zou, Lei Chen, and Dongyan Zhao共同撰写,主要讨论了如何在分布式环境中从频繁查询模式的选择与维护、RDF图的分片与分配以及查询处理这些方面来管理大型RDF图。

1 研究动机

随着海量资源描述框架(RDF)数据的增长,设计一个分布式的RDF数据库系统来管理这些数据是非常必要的,其中比较常见的设计问题是将RDF数据分片和分配。在数据分割和分配过程中,一个重要的问题是如何降低分布式查询评估时不同站点之间的通信成本。此外虽然查询日志驱动的分布式数据分片已经在关系数据库中得到了深入的研究,但是很少有研究考虑基于查询日志的RDF数据分片。

基于此,本文提出了一种查询日志驱动的分布式RDF图系统的数据碎片化。首先在查询日志中挖掘和选择频繁的子图模式,称为频繁查询模式(FAP)。然后,我们提出了三种基于这些模式的碎片化策略,即垂直、水平和混合分片。因此文章讨论的的技术问题主要有以下三个方面:1、FAP的选择和维护;2、垂直(VF)、水平(HF)和混合分片(MF);3、查询分解和优化

2 系统框架

RDF图中所有不常用的属性边都被收集起来,形成一个特殊的片段,称为冷图。任何现有的方法都可以利用于冷图。

离线阶段:在查询日志中挖掘和选择一些FAPs。文章还讨论了如何维护和更新所选的FAPs集,以适应查询日志作负载的变化。然后,基于这些选定的FAP,我们研究了三种分片策略,即VF、HF和MF。碎片分布在不同的站点之间。同时,我们在碎片化和分配过程中维护元数据。

在线阶段:将一个查询分解为多个不同片段的子查询,并生成一个高效的执行计划。为了高效地评估子查询,我们提出了一种优化方法,命名为推送跨片段连接,并提出了一个生成高效执行计划的成本模型最后,我们执行该计划并返回结果。

3 解决方案

01

FAP选择和维护

频繁查询模式(FAP)定义:

上图就是三个查询模式,都已经被泛化表示,即subject和object处的所有常量用变量替代

一个查询往往包含了之前查询中的一些模式,所以本文挖掘了一些高访问频率(访问频率高于自定义频率阈值)的查询模式,并将这些模式作为FAP。

FAP的访问频率定义:

其中Q为查询日志,即一组查询的集合

访问频率定义就是说查询模式p相对于查询日志Q的访问频率,当acc(p)大于minsup(自定义频率阈值)时,p就是频繁查询模式FAP。

频繁查询模式(FAP)选择:

频繁查询模式的选择遵循两个原则:1)尽可能多的命中查询日志中查询;2)满足存储空间限制。

在选择模式p时,定义收益(Bene f it(p, Q)的一个因素是p命中的查询数量。一个FAP命中的查询越多,在查询处理过程中获得的收益就越多。

为了简单起见,将选择一个模式集P对查询Q的好处定义为对Q有贡献的单个模式p(∈P)的最大好处,因此,我们对一个模式集P对工作负载Q的收益有如上图右边公式定义。

选取过程:在选取只有一条边的频繁查询模式之后,我们的频繁查询模式选取算法将枚举所有可能包含一个多于一条边频繁查询模式的频繁查询模式集合。设 P1 是这些包含一个多于一条边频繁查询模式的频繁查询模式集合中选取收益最大。然后,我们迭代地从多于一条边频繁查询模式中选择一个频繁查询模式 p′ 来最大化命中查询收益。这个过程迭代地进行到所选取的数据分片的大小超过存储空间的限制 SC。设 P2 是在迭代过程中找出的频繁查询模式集合。最后,如果 Bene fit(P′∪ P1,Q)≥Benefit(P′∪ P2,Q),我们的频繁查询模式选取算法输出 P′∪ P1;否则,我们输出 P′∪P2。

频繁访问模式的维护:

DFS编码可以通过执行DFS将一个图转化为唯一的边序列。在DFS搜索中,每个顶点都以其发现时间为下标。前边是DFS树中的那些边,而后向边是剩余的边。通过DFS建立FAP树来记录所有的FAPs,其中每个节点代表了查询日志中的一个模式,与一些有用的信息相关联,特别是,每个节点首先与一个列表相关联,以记录包含其相应模式的查询的id。

不频繁模式作为叶子节点被插入到FAP树中,用于检测查询工作负载变化时的频繁模式更新。随着新的查询输入,新的FAP被发现,所选FAP的效益也在相应地变化。FAP树的有效性是通过随着新查询的输入而改变的模式数量来衡量的。

对于FAP树有两类变化。第一,FAP树中的一些FAP变得不频繁。第二,在新的时间窗口中出现了一些新的FAP。检测第一种类型很容易,因为我们总是在FAP树中维护包含FAP的查询的id。如果列表中的查询数量小于阈值minS了,对应的模式就会变得不频繁。为了检测第二种类型的变化,在FAP树中保持最小的不频繁模式节点。它们始终是叶子节点。让α-表示FAP的数量。让α+表示在新的时间窗口中变化为FAP的叶子节点数。通过检查与FAP树中每个节点相关联的查询图列表,可以很容易地检测到α-和α+。如果(α- +  α+)大于用户指定的参数,就会触发FAP树的更新过程,当需要更新FAP树时,我们会在新的时间窗口中挖掘所有查询的FAP,并重建FAP树。新插入或删除的FAP,其对应的片段也会相应地重新计算。其他不参与更新的片段保持不变。由于FAPs的统计数据相对稳定,其变化总是很小,这意味着电子计算的成本也很小。

02

交叉检查

垂直分片:对于垂直划分,本文将 RDF 数据图上所有同态于相同频繁查询模式的匹配划分到相同分片中去。给定一个频繁查询模式 p,它所对应的垂直分片可以通过将 p 转化为一个 SPARQL查询并求解来得到。这里,本文首先计算出 p 在 RDF 数据图上的匹配,然后将这些匹配合并起来。合并 p 所有匹配形成的 RDF 数据图的子图就是一个垂直分片。

水平分片:

对于HF,我们将一个FAP的匹配项分成不同的片段,即根据结构小项谓词,然后将它们分配到不同的位置。然后,查询可能涉及许多片段,并且每个片段的大小通常比整个数据的大小小得多。因此,在这样的片段上查找查询的匹配项会探索较小的搜索空间。给定一个包含变量集合 {} 的频繁查询模式 p,一个结构化简单谓词 sp 定义成如下形式

然后,我们将结构minterm谓词定义为同一FAP的结构简单谓词的合取。我们可以通过列举结构简单谓词的所有可能组合来获取所有结构性minterm谓词。

换言之,每个结构化简单谓词在一个结构化小项谓词里以其本身或者其的否定形式存在。

例:

混合分片:

我们经常需要权衡VF和HF的优势,因此,我们设计了混合分片(HF)策略。在MF中,我们为垂直分区保留了一些频繁模式(),而其他()专为HF设计。

将M(p)分为两个子集M’和M’’。第一个是一组结构的minterm谓词,其访问频率大于minS up。第二个是一组结构性minterm谓词,其访问频率小于minS up。

如果结构最小项在M’’(p)中的总访问频率大于minS up,则意味着许多查询,可以在p生成的垂直片段上进行评估;但是,它们不能被频繁的结构性minterm谓词生成的水平片段所回答。因此,在这种情况下,我们基于模式p执行VF。

相反,如果M’’(p)中的结构性谓词谓词的总访问频率小于minS up,我们将基于结构性项谓词M’(p)对RDF图进行水平划分。这是因为大多数可以由模式p回答的查询也可以由频繁的结构性最小项谓词M’(p)回答。因此,我们基于频繁的结构最小项谓词M’(p)执行HF。

03

数据分配

将数据划分成若干分片之后,下一步就是讲这些分片分配到分布式环境里的各个机器上。一般来说,经常性地被同一个查询包含的频繁查询模式或者结构化小项谓词对应的数据分片就应该被分配到相同机器上去,以避免在查询处理阶段进行跨机器的连接。由此需要判断分片之间的相关性aff(a,b)。

本文应用图聚类算法PNN对数据进行聚合,涉及到分片分配图(AG),其中每个点对应一个分片,如果两点之间存在一条边就说明两个分片之间的相关系数大于0,且边的权重为其相关系数。

基于上述定义,数据分配的问题就等价于将所有的分片聚类成 m 个类,且在同一个类中分片在 AG 所对应的点应该尽可能的连通。对于从 AG 上聚类出来的一个类 Ai,本文定义它的密度——δ(Ai)——来衡量它的质量。我们在进行数据分配时的目标就是找出 AG 上有最大密度的m 个子图。然 而,这个问题被证明了是 NP-complete。

具体而言,在初始时,每个分片对应一个分类。然后,在每一步迭代的过程,这个算法每次都局部最优地选择出两个类合并,即每一步找出相互间权值最大的两个类合并。合并后两个类之间的权值变成合并后所形成类的密度。上述过程一直迭代到只剩下m 个类。因为我们的目标函数能保证局部最优的选择也是全局最优的,所以上述数据分配算法能保证找出AG 最优的聚类结果。

04

查询分解与优化

查询分解:

当用户输入新的查询,系统首先检索数据字典以确定那些分片与这个查询相关,并依据检索结果将查询进行分解。对于一个查询而言,它可能存在多个分解方案,需要提出一个代价模型来计算每个可能的查询分解的代价,并找出其中代价最小的分解作为最终的查询分解。

查询分解后,映射到片段。因此,通过查找FAP树,可以将中的匹配数估计为card()。然后,假设中的常数约束与中的一组变量相对应,我们可以将映射到的不同值置换的数量估计为snip()。然后,我们假设中的匹配与不同值的数量成正比;因此,Card()可以估算如下。

我们首先初始化单个边缘(第2行)的所有子查询的分解。然后,我们枚举所有子查询,直到FAP的最大大小为止,并将它们放在FAP树中。我们将每个子查询q转换为DFS代码,并使用此类代码对FAP树执行自顶向下搜索。如果q的DFS代码等于FAP树中所选FAP的DFS代码,则我们递归地找到Q - q的所有有效分解并将q插入这些分解中。遍历所有Q子查询的步骤后,我们可以确定Q的所有有效分解。然后,我们计算所有有效分解的成本并选择最佳分解。

查询优化:

查询分解之后,下一步就是确定为其确定一个最优的查询执行计划, 该问题涉及分布式查询中的联接排序。文章扩展了System-R 算法,以找到最佳连接顺序,它首先生成n -1个子查询的最佳执行计划,然后将n - 1个子查询的匹配项与第n个子查询的匹配项结合在一起。

要估计的基数,需要三个步骤。首先,我们估计的值排列的数量,这些值将有助于连接。其次,我们估计每个独特的值排列都可以加入的匹配数。最后,我们将这两个数字相乘作为的基数。来自的将有助于联接的值排列数量与来自的将有助于联接的匹配数量相同。

可以被估计为,如果可以通过查找FAP树映射到片段

Pushing Cross-Fragment Joins:

由于RDF图和SAPRQL查询的独特特性,自然联接和半联接在某些情况下可能无法有效工作。因此,本文提出了一种分布式优化技术,推动跨片段连接。

从到的推动跨片段的工作方式如下:系统仅生成的匹配项,即,然后,系统在连接变量和SELECT子句中的变量上投影并将其结果发送到的位置。站点使用预测结果来生成最终结果。通常,我们可以从这些预测结果开始使用图遍历策略来匹配子查询来找到最终结果。形式上,我们表示将跨片段连接从推到,即

推动跨片段片段联接与自然联结和半联接技术之间的主要区别在于,推动跨片段联接可避免为非选择子查询生成许多不必要的中间匹配项,因为它使用从预测结果开始的图遍历策略来查找最终结果。

成本估算:

在这项研究中,我们提供了一个成本模型来估算采用优化技术的成本。优化的目标功能是总执行时间。在这里,我们依靠成本模型来进行集中的RDF查询评估,并提出一种估算不同联接技术成本的方法。总查询评估时间分为两部分:本地处理时间(LT)(I / O + CPU时间)和通信时间(CT)。

1) Natural join:

为了使用自然联接来联接两个子查询和的匹配,我们假设将对应的匹配运送到与对应的站点。然后, join 上的总时间如下。

2)Semi-Join:

如果我们使用半联接来联接两个子查询的匹配项,我们假定首先将的匹配部分投影到联接变量然后,将它们发送到与对应的站点。

3)Pushing Cross-Fragment Join:

如果将交叉片段连接从的评估推向的评估,我们将从的匹配中搜索的匹配。因此,我们需要重新计算的本地处理时间。我们假设的本地处理时间与不同值的数量成比例。

则:

查询执行:

经过查询优化后,我们在考虑不同的联接运算符的情况下确定了分布式执行计划。然后,我们执行分布式执行计划以找到最终结果。

JoinStrategy  

当我们在考虑不同的联接运算符的情况下确定分布式执行计划时,我们会同时考虑自然联接,半联接和推动跨片段联接。估算三种类型的联接的成本,并选择成本最小的联接技术

SubqueryProcessing.

每个子查询在相应的站点中执行。每个子查询的优化都使用现有的集中式RDF数据库系统。

余下大量实验证明了本文解决方案的优越性,不再赘述。论文链接请点击「阅读原文」

关系查询处理 查询优化 论文_论文导读基于查询负载的分布式RDF图分割和分配...相关推荐

  1. python检索论文_一种基于Python的音乐检索方法的研究

    应用技术 0 前言 最近两年,人们对于流行音乐的追求与需求量日益增 加,但如何保证用户能在不知歌名只知歌词的情况下,完成 自己的全方面多种类的听歌需求呢?于是,电脑工程师就推 出了"听歌识曲 ...

  2. plsql查询不显示结果_管理NVivo的查询结果

    NVivo是一款支持定性研究方法和混合研究方法的软件.它可以帮助您收集.整理和分析访谈.焦点小组讨论.问卷调查.音频等内容.全新的NVivo12更可协助您处理社交媒体和网页内容.NVivo强大的搜索. ...

  3. dbscan论文_论文分享 :Linkage Based Face Clustering via GCN

    本文要解决的问题是人脸聚类,这类任务的目的是将一批无标记的人脸通过聚类使得自同一个人的人脸聚在一起.作者将这个问题转换为链路预测的问题,当两个人脸属于同一个人时,那么他们之间存在一条边.作者发现特征空 ...

  4. 基于特征的对抗迁移学习论文_[论文笔记] 对抗样本不是bugs,而是特征

    [论文笔记] Adversarial Examples Are Not Bugs, They Are Features 说在前面 个人心得: 这是关于对抗样本可解释性的工作 理论部分看不懂,看懂了再来 ...

  5. fasterrcnn论文_论文笔记:Fast(er) RCNN

    在 RCNN 初步试水取得成功后,研究人员又迅速跟进,针对 RCNN 中的几点不足提出改进,接连推出了 fast-rcnn 和 faster-rcnn.关于这两篇论文,网上相关的文章实在是多如牛毛,因 ...

  6. 小米手环深圳通服务器维护,在知网上怎么发表论文_论文如何上传知网

    有的期刊有好多版本,一定要找到自己发表文章的版本,点击相应期刊图片.06 时期和期数找不对是找不到文章的哦!07 第一栏选择作者,第二栏输入姓名也可用工作单我这么跟你说 你随便写点东西交点版面费没有发 ...

  7. 基于python的搜索引擎论文_技术分享 - 基于python构建搜索引擎系列——(四)检索模型...

    构建好倒排索引之后,就可以开始检索了. 检索模型有很多,比如向量空间模型.概率模型.语言模型等.其中最有名的.检索效果最好的是基于概率的BM25模型. 给定一个查询Q和一篇文档d,d对Q的BM25得分 ...

  8. mysql 查询分析工具下载_数据库管理系统-DB查询分析器(数据库查询分析软件)6.04 中文免费版-东坡下载...

    DB查询分析器是一个功能强大的万能数据库查询分析软件,支持对各种关系数据源(包括Oracle.Sybase.DB2.Informix.MS SQL SERVER.MYSQL.MS ACCESS.Par ...

  9. mysql 查询不使用索引_简单的mySQL查询不使用索引

    我有一个非常奇怪的问题与MySQL和简单的查询与简单的索引.我试图使用这个查询: SELECT * FROM `counter_links` WHERE `link_id`=1544;正如你所看到的, ...

最新文章

  1. 谷歌2020博士生奖研金名单出炉,大陆高校无一人入选
  2. java B2B2C源码电子商务平台-基于Consul的分布式锁实现
  3. 如何用计算机声卡,声卡是什么,详细教您怎么查看自己电脑的声卡
  4. Radare - 逆向工程框架
  5. 高级语言程序设计(c )试卷,《高级语言程序设计C》试卷
  6. 如何提高安卓代码的质量和语法
  7. 解决ffmpeg中的时间戳同步问题
  8. linux日志打印规则,Linux 打印简单日志(一)
  9. 数据库课程设计——人才市场管理系统、教学管理系统、产品销售管理系统、小区物业管理系统
  10. traceroute和tracert原理
  11. 画费氏数列螺线的代码
  12. 美团外卖饿了么百度外卖竞品分析报告
  13. ASO关键词选词技巧
  14. MOTO DEFY/MB525/ME525 RSD LITE 刷机教程(图文)
  15. C# 读写视频文件
  16. python中write是什么意思_Python中操作文件之write()方法的使用教程
  17. Alarmmanager制作简单闹钟功能
  18. opencv和magick两个图像处理库的使用心得
  19. golang:字符类型(byte和rune)
  20. 仿牛客论坛项目(下)

热门文章

  1. GB28181流媒体服务LiveGBS启动报错 HTTP Port[10000] In Use
  2. JVM调优日志解析分析
  3. css样式的百分比都相对于谁?
  4. Spring+Spring Boot+Mybatis框架注解解析
  5. 使用Rss框架PHP开发流程
  6. uestc oj 1218 Pick The Sticks (01背包变形)
  7. Html.RadioButtonFor和Html.DropDownListFor 用法--备忘
  8. 大数据_Flink_Java版_数据处理_流处理API_Sink操作_把数据存储到ElasticSearch---Flink工作笔记0040
  9. 基于Session的认证方式_实现认证功能_Spring Security OAuth2.0认证授权---springcloud工作笔记116
  10. SVN工作笔记002---svn提示上次操作有误,请执行cleanup