基于多模式切换的RDMA友好的SPARQL查询方法与流程

文档序号:12465119阅读:226来源:国知局
基于多模式切换的RDMA友好的SPARQL查询方法与流程

本发明涉及一种SPARQL查询方法,特别是涉及一种基于多模式切换的RDMA友好的SPARQL查询方法。



背景技术:

大数据时代,许多知识库如DBpedia(特殊的语义网应用范例)通常以RDF(Resource Description Framework,资源描述框架)的形式进行存储。RDF数据实际上是由一系列的三元组数据组成的,其中每个三元组都是由主语,谓语,宾语组成。如果把主语和宾语当成是一个顶点,那么每个三元组实际上就是由主语这个起始顶点指向宾语这个终止节点的一条边,则整个RDF数据集认为是一张有向图。SPARQL(Simple Protocol and RDF Query Language)是RDF数据上的一种标准查询语言,由一系列类似的三元组组成,其中每个元素是一个常量或者是一个变量。查询得到的结果是满足所有三元组的变量的集合。

RDMA(远程直接内存访问,Remote Direct Memory Access),是当前高性能网络设备提供的一种模式,能够直接对远端节点已注册的内存空间进行读写访问,完全不需要服务器机器的CPU进行协助。相比使用传统网络,使用RDMA传输带宽能大幅提高,网络延迟大幅下降,性能提升达一个数量级。

不同的SPARQL查询差异非常大,有的查询只涉及到了图的小部分数据,而有的查询则涉及到同一类型的所有数据,很难使用同一种方法统一地处理RDF数据的查询。对于小的查询,最重要的是确保它占用的资源不多,系统同时支持多个小的查询;对于大的查询,最重要的是确保它被并行执行,在较短的时间内完成。

因此,如何针对SPARQL的特性,以及针对远程直接内存访问模式特征,设计一种RDMA友好的SPARQL查询方法,减少系统的通讯开销,提高复杂查询的并行度,降低用户查询请求的延迟,实已成为本领域技术人员亟待解决的技术难题。



技术实现要素:

本发明所要解决的技术问题是提供一种基于多模式切换的RDMA友好的SPARQL查询方法,其能够利用高性能网络互联设备提供的远程直接内存访问模式,更合理地选择查询的执行模式,减少系统的通讯开销,提高复杂查询的并行度,降低用户查询请求的延迟。

本发明是通过下述技术方案来解决上述技术问题的:一种基于多模式切换的RDMA友好的SPARQL查询方法,其特征在于,所述基于多模式切换的RDMA友好的SPARQL查询方法包括以下步骤:

步骤一,收到消息并判断消息类型;

步骤二,执行一步SPARQL查询,用图遍历的方法找到符合条件的新节点;

步骤三,判断请求是否执行结束,是则返回回复;否则执行步骤四;

步骤四,判断执行请求的下一步时,需要的RDMA操作数是否大于等于某个事先约定的临界值;是则执行步骤五;否则执行步骤六;

步骤五,生成新的子请求,发给其他机器,并记录需要等待的回复个数;

步骤六,当所需RDMA操作数小于临界值时,直接读取远程的数据,完成下一步请求,并回到步骤三。

优选地,所述步骤一中,若判断消息类型是请求,则执行步骤二,若判断消息类型是回复,则存储回复;若已经收到所需的全部回复,则合并所有回复为一个完整的回复,返回给之前发送请求的机器;若还未受到所需的全部回复,则结束处理,继续等待下一个消息。

优选地,所述步骤二包括如下步骤:由请求的发送者保证,请求的所有起始点一定是在本地的;从本地存储中,找到所有的起始点;遍历所有起始点的边数据,获得满足这一步查询的所有终止点的ID。

优选地,所述步骤四包括如下步骤:根据之前的执行结果,获得下一步请求的所有起始点的ID;计算每个起始点的所属机器,统计不属于本机的起始点的个数,即执行请求的下一步需要的RDMA操作数;若RDMA操作数小于临界值,则执行步骤六,否则执行步骤五。

优选地,所述步骤五包括如下步骤:对下一步请求的所有起始点的ID,计算他们的所属机器;按照所属机器,将请求划分为多个子请求,所属机器相等的起始点被划分到同一个子请求中;将所有子请求发送给对应的机器,并记录需要等待的回复个数。

优选地,所述步骤六包括如下步骤:对下一步请求的所有起始点的ID,计算他们的所属机器,并计算起始点的数据在所属机器的位置,直接使用RDMA请求将起始点的边数据读取到本地;遍历边数据,获得满足这一步查询的所有终止点的ID;之后回到步骤三。

优选地,所述基于多模式切换的RDMA友好的SPARQL查询方法使用RDMA WRITE实现高效的消息收发机制。

优选地,所述基于多模式切换的RDMA友好的SPARQL查询方法使用本地执行模式和Fork-join模式处理SPARQL。

本发明的积极进步效果在于:本发明能够利用高性能网络互联设备提供的远程直接内存访问(RDMA)模式,更合理地选择查询的执行模式,减少系统的通讯开销,提高复杂查询的并行度,降低用户查询请求的延迟。

附图说明

图1为本发明的流程图。

图2为本发明的信息发送机制图。

具体实施方式

下面结合附图给出本发明较佳实施例,以详细说明本发明的技术方案。

如图1所示,本发明基于多模式切换的RDMA友好的SPARQL查询方法包括以下步骤:

步骤一,收到消息并判断消息类型;

步骤二,执行一步SPARQL查询,用图遍历的方法找到符合条件的新节点;

步骤三,判断请求是否执行结束,是则返回回复;否则执行步骤四;

步骤四,判断执行请求的下一步时,需要的RDMA操作数是否大于等于某个事先约定的threshold(临界)值;是则执行步骤五;否则执行步骤六;

步骤五,生成新的子请求,发给其他机器,并记录需要等待的回复个数;

步骤六,当所需RDMA操作数小于threshold(临界)值时,直接读取远程的数据,完成下一步请求,并回到步骤三。

所述步骤一中,若判断消息类型是请求,则执行步骤二,若判断消息类型是回复,则存储回复;若已经收到所需的全部回复,则合并所有回复为一个完整的回复,返回给之前发送请求的机器;若还未受到所需的全部回复,则结束处理,继续等待下一个消息。

所述步骤二包括如下步骤:由请求的发送者保证,请求的所有起始点一定是在本地的;从本地存储中,找到所有的起始点。遍历所有起始点的边数据,获得满足这一步查询的所有终止点的ID。

所述步骤四包括如下步骤:根据之前的执行结果,获得下一步请求的所有起始点的ID。计算每个起始点的所属机器,统计不属于本机的起始点的个数,即执行请求的下一步需要的RDMA操作数;若RDMA操作数小于threshold(临界)值,则执行步骤六,否则执行步骤五。

所述步骤五包括如下步骤:对下一步请求的所有起始点的ID,计算他们的所属机器。按照所属机器,将请求划分为多个子请求,所属机器相等的起始点被划分到同一个子请求中;将所有子请求发送给对应的机器,并记录需要等待的回复个数。

所述步骤六包括如下步骤:对下一步请求的所有起始点的ID,计算他们的所属机器,并计算起始点的数据在所属机器的位置,直接使用RDMA请求将起始点的边数据读取到本地。遍历边数据,获得满足这一步查询的所有终止点的ID;之后回到步骤三。

本发明使用RDMA WRITE(写入)实现高效的消息收发机制,如图2所示。接收方会事先准备好空间足够大的环形缓冲区。发送方在发送消息时,会在消息前后加上消息A的大小信息B,然后使用RDMA WRITE将所有内容一次性写到接收方的环形缓冲区中,RDMA可以保证所有的写是按照顺序完成的。接收方会在空白处不断轮询,检查是否有消息。当轮询到非零值时,说明有消息到来,根据消息的大小信息,就可以知道消息的尾部的位置。之后接收方再次轮询消息的尾部,直到尾部的值与头部的值相等为止。由于RDMA可以保证所有的写是按照顺序完成的,说明此时RDMA WRITE已经执行完毕,消息已经发送完全。RDMA WRITE高效的地方在于直接写到接收方的用户态空间中,而不需要经过内核的TCP/IP协议栈。

本发明使用两种不同的执行模式(本地执行模式和Fork-join模式)处理SPARQL,并动态地选择更优的执行模式。本地执行模式是使用RDMA READ直接读取远端数据,然后再本地完成查询。Fork-join模式是把当前完成的部分以及剩余的请求通过消息发送给其他机器执行,等待所有机器回复,再合并所有结果。

本地执行模式处理小的请求效果很好,主要是因为它直接使用RDMA READ读取远端数据,完全绕过了远端的CPU,延迟特别低。多个机器同时使用本地执行模式的时候,不需要对方的参与,互相之间不会干扰,可以有效地提高系统的吞吐量。但是处理大请求时,由于RDMA READ只能读取一段连续的地址空间,大请求需要访问很多个不同的顶点,因此需要发很多次RDMA READ,开销比发消息来得大。

Fork-join模式处理大的请求效果很好,主要是因为它把一个请求拆分成多个子请求,可以充分利用集群的资源,并行地解决大请求。然而Fork-join模式处理小请求效果不佳,主要是因为消息的开销相对小请求的执行时间来说比较大,并行的优势无法得到体现。而且多个小请求之间互相干扰,降低系统的吞吐量。

综上所述,本发明提出的基于多模式切换的RDMA友好的SPARQL查询方法,充分利用高性能网络互联设备提供的远程直接内存访问(RDMA)模式,更合理地选择查询的执行模式,减少系统的通讯开销,提高复杂查询的并行度,降低用户查询请求的延迟。

上述实施案例仅列示性说明本发明的原理及功效,而非用于限制本发明。任何熟悉此项技术的人员均可在不违背本发明的精神及范围下,对上述实施例进行修改。因此,本发明的权利保护范围,应如权利要求书所列。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1