CN111241127B - 基于谓语组合的sparql查询优化方法、系统、存储介质及设备 - Google Patents
基于谓语组合的sparql查询优化方法、系统、存储介质及设备 Download PDFInfo
- Publication number
- CN111241127B CN111241127B CN202010049093.2A CN202010049093A CN111241127B CN 111241127 B CN111241127 B CN 111241127B CN 202010049093 A CN202010049093 A CN 202010049093A CN 111241127 B CN111241127 B CN 111241127B
- Authority
- CN
- China
- Prior art keywords
- query
- star
- tree
- sub
- predicate
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于谓语组合的SPARQL查询优化方法、系统、存储介质及设备,方法包括:构建RDF数据索引;生成谓语组合,谓语组合中的每一个元素都包含一组标签,并且统计每个谓语组合的实体个数;获取用户提交的SPARQL查询,并且转换为SPARQL查询图;获取查询图中所有满足两个及以上三元组模式的公共顶点,并使用广度遍历算法把查询图转换成一棵树;然后使用基于成本的算法选择成本最低的树为初步查询树;重排初步查询树中每个非叶子节点到孩子节点的三元组模式的顺序,生成最终的查询顺序;然后使用两步剪枝进行SPARQL查询。本发明可以有效减少SPARQL查询过程中产生的大量冗余中间结果,提高查询效率。
Description
技术领域
本发明属于计算机查询优化的技术领域,具体涉及一种基于谓语组合的SPARQL查询优化方法、系统、存储介质及设备。
背景技术
资源描述框架(Resource Description Framework,RDF)是一种流行的模型,已广泛用于表示网络资源信息。一个RDF数据集由一组三元组{主语,谓语,宾语}组成。因为RDF具有灵活的结构和可以使用纯文本形式或者图形形式来表达事物,所以许多组织和机构已经使用RDF来发布它们的数据。例如,许多大型的公共知识库YAGO和Bio2Rdf,已经包含数十亿个三元组。SPARQL是W3C推荐的一种用于RDF数据检索的标准查询语言。每个SPARQL查询都包含一组三元组模式,与RDF的三元组有所不同,三元组模式的主语、谓语和宾语可以是常量,也可以是变量。
目前许多系统使用基于关系型的方法来存储RDF数据,把SPARQL查询分为两个步骤:扫描与联接。通过把SPARQL查询拆分成一组三元组模式,接着对每个三元组模式分别地去扫描RDF数据以生成绑定值表。然后把绑定值进行联接操作,去掉冗余的中间结果,生成最终的查询结果。随着RDF数据集的快速增大,扫描结果也随之增大,就会在联接操作的时候产生更多的冗余中间结果。因此,如何减少SPARQL查询的冗余中间结果是当前的主要挑战。
为了减少冗余中间结果,当前的研究主要通过以下方法来解决:优化SPARQL三元组模式的顺序;使用基于图探索的方法来减少基于联接操作所造成的大量冗余中间结果。对于前者,有些方法通过使用基于成本的算法来重排三元组模式的顺序。在基于成本的算法中,主要考虑的是两个三元组模式之间的关系,而没有考虑多个三元组模式之间的关系,导致选择的三元组模式的顺序可能不是最优的,从而造成大量冗余中间结果。对于后者,使用基于图探索的方法已经被证实可以有效的减少冗余中间结果,但是许多方法把SPARQL查询拆分成多个星型子查询,同时独立的探索每个星型子查询。但是在最后使用集中统一联接的方法可能会成为系统的瓶颈。
发明内容
本发明的主要目的在于克服现有技术的缺点与不足,提供一种基于谓语组合的SPARQL查询优化方法、系统、存储介质及设备,解决SPARQL查询过程中产生的大量冗余中间结果。
本发明的第一个目的在于,提供一种基于谓语组合的SPARQL查询优化方法。
本发明的第二个目的在于,提供一种基于谓语组合的SPARQL查询优化系统。
本发明的第三个目的在于,提供一种存储介质。
本发明的第四个目的在于,提供一种计算机设备。
本发明的第一个目的可以通过采取如下技术方案达到:
构建RDF数据索引,根据三元组的主语s、谓语p、宾语o,分别生成spo、ops、ps和po四种索引,所述三元组中的主语和宾语称为实体;
生成谓语组合,谓语组合中的每一个元素都包含一组标签,并且统计每个谓语组合的实体个数;
获取用户提交的SPARQL查询,并且把SPARQL查询转换为SPARQL查询图;
获取查询图中所有满足两个及以上三元组模式的公共顶点,对每一个公共顶点使用广度遍历算法,把SPARQL查询图转换成一棵树,就能得到一组树;
使用基于成本的算法选择这组树中成本最低的树,称这棵树为初步查询树,根节点为探索起始点;
定义初步查询树中每个非叶子节点与孩子节点的三元组模式为星型子查询,使用基于选择度算法重排每个星型子查询的三元组模式顺序,生成最终的查询顺序;
根据生成的三元组模式的查询顺序,使用两步剪枝进行查询处理,从而获取SPARQL查询的结果。
作为优选的技术方案,对于spo索引,通过主语加上谓语获取到一组实体和这组实体的个数;
对于ops索引,通过宾语加上谓语获取到一组实体和这组实体的个数;
对于ps索引,通过谓语获取到一组实体和这组实体的个数;
对于po索引,通过谓语获取到一组实体和这组实体的个数。
作为优选的技术方案,所述生成谓语组合,并且统计每个谓语组合的实体个数的步骤,具体为:
为RDF数据集中的每一个非type的谓语生成两个标签,这两个标签包含一个共同的谓语,同时分别包含主语方向和宾语方向;
对于谓语为type的情况,把type加上宾语当作谓语,同时加上主语方法,生成一个标签;
使用这些标签生成所有的组合,称为谓语组合,统计每一种谓语组合的实体个数,并且去掉实体个数为0的谓语组合。
作为优选的技术方案,所述对查询图中每一个满足两个及以上三元组模式的公共顶点使用广度遍历算法,把SPARQL查询图转换成一棵树,就能得到一组树的步骤中,还包括:
如果SPARQL查询图存在回环,每一棵树都有一些没有被遍历过的边,称没有被遍历过的边为剩余约束边。
作为优选的技术方案,所述使用基于成本的算法选择这组树中成本最低的树的步骤具体为:
如果这组树中只有一棵树,那么直接选择这棵树为成本最低的树;否则,需要从这组树中选择成本最低的树;首先需要获取每一棵树的成本,假设QP为某个顶点使用广度遍历算法生成的树;假设QP中每一个非叶子节点与孩子节点的三元组模式为一个星型子查询,这个星型子查询的中心点为相应的非叶子节点,SQ={sq1,…,sqn}为QP的所有星型子查询的一个集合,其中n>1,sq1为包含根节点的星型子查询;假设PNSQ={nsq1,…,nsqn}为SQ中每一个星型子查询通过谓语组合获取的中心点的实体个数,假设NSQB={sqb1,…,sqbn}为通过常量孩子获取到的中心点的实体个数;假设sqk是SQ中的第k个星型子查询,其中k<=n;假设sqk的常量孩子节点为Svb={vb1,…,vbh},其中h<=n。如果Svb为空集,那么sqbk等于nsqk;否则,sqbk等于Svb中每个元素与相应的谓语获取中心点的实体个数的最小值;假设每个星型子查询的中心点的实体个数为NOC={noc1,…,nocn},NOC中的每个元素nock=min{nsqk,sqbk},其中k<=n;假设WSQ={wqs1,…,wsqn}为每个星型子查询的成本,其中wsq1=nonc1;假设wsqfather为当前星型子查询的父亲星型子查询的成本;假设pftoc为当前星型子查询与父亲星型子查询连接的三元组模式的边,通过PO与PS可以获取到父亲节点实体和当前节点实体的个数,分别表示为nof和noc。假设WSQ中的第i个星型子查询的成本为wsqi,那么wsqi=wsqfather*(nof/noc)*(noci/noc),其中1<i<=n;假设W为当前初步查询树的成本,那么其次,计算出这组树中每一棵树的成本,选择成本最低的树,并称这棵树为初步查询树,初步查询树的根节点为探索起始点。
作为优选的技术方案,所述使用基于选择度算法重排初步查询树中每个星型子查询的三元组模式的顺序,生成最终的查询顺序的步骤具体为:
假如sqk为初步查询树的一个星型子查询,Tp={tp1,..,tpj}为sqk所包含的三元组模式;使用selectivity(tpi)表示tpi的选择度,其中i<=j;如果tpi中的孩子节点为常量时,则可以使用常量加上谓语,通过SPO或者OPS索引获取到中心点的实体个数;如果tpi的孩子节点为变量时,则可以使用谓语,通过PO或者PS索引获取到中心点的实体个数;把中心点的实体个数称为tpi的选择度;使用Tp的选择度,按照从小到大的顺序重新排序Tp的顺序;当所有的星型子查询的三元组模式按照选择度重新排序好后,称这个树为最终查询树;把最终查询树和剩余约束边加在一起,就是最终的三元组模式的查询顺序。
作为优选的技术方案,所述根据生成的三元组模式的查询顺序,使用两步剪枝进行查询,从而获取SPARQL查询的结果的步骤中,具体为:
把每一个非叶子节点与孩子节点的三元组模式当作一个星型子查询,表示为SQ={sq1,…,sqn},其中这个非叶子节点也称为这个星型子查询的中心点Vcenter,每个星型子查询也包含一组三元组模式Tp={tp1,…,tpn};假设sq1是包含根节点的星型子查询。首先,是向下剪枝,先处理sq1,通过tp1来获取Vcenter的实体,如果tp1的孩子节点是常量值,则使用这个常量值与tp1的谓语,通过SPO或者OPS索引来获取到Vcenter的实体值,表示为Sbound;否则,通过PO或者PS索引来获取Vcenter的实体值;如果包含根节点的星型子查询的三元组模式的个数大于1,那么继续遍历{tp2,…,tpn},剪枝掉Sbound中不满足{tp2,…,tpn}的实体。假设Nchild是任意一个星型子查询中的一个非叶子节点;对于任意星型子查询剪枝完成后,需要把非叶子节点Nchild的所有实体与星型子查询中心点为Nchild的三元组模式依次进行遍历;其次是回溯剪枝,当任意一个星型子查询的孩子节点全部为叶子节点,或者星型子查询的实体为空时,需要把查询结果发送给父亲星型子查询;假设任意一个星型子查询的中心点的实体为Sbound,接收到的孩子子查询的中心点实体为Sboundchild,需要把Sbound中与Sboundchild没有关系的实体删除掉。如果这个星型子查询不包含根节点,则需要继续把实体Sbound发送给本身的父亲星型子查询;依次回溯剪枝,直到星型子查询包含根节点为止;如果这个SPARQL查询的剩余约束边不为空,还需要继续遍历剩余约束边;通过两步剪枝就能获取到最终的查询结果。
本发明的第二个目的可以通过采取如下技术方案达到:
一种基于谓语组合的SPARQL查询优化系统,包括:
RDF数据索引构建模块,用于根据三元组的主语s、谓语p、宾语o,分别生成spo、ops、ps和po四种索引,所述三元组中的主语和宾语称为实体;
谓语组合生成模块,用于生成谓语组合,谓语组合中的每一个元素都包含一组标签,并且统计每个谓语组合的实体个数;
SPARQL查询转查询图模块,用于获取用户提交的SPARQL查询,并且把SPARQL查询转换为SPARQL查询图;
查询图转查询树模块,用于获取所有满足两个及以上三元组模式的公共顶点,对每一个顶点使用广度遍历算法,把SPARQL查询图转换成一棵树,就能得到一组树;
获取初步查询树模块,用于使用基于成本的算法选择这组树中成本最低的树,称这棵树为初步查询树,根节点为探索起始点;
重排模块,用于使用基于选择度算法来重排初步查询树中每个非叶子节点与孩子节点的三元组模式的顺序,生成最终的查询顺序;
执行模块,用于根据生成的三元组模式的查询顺序,使用两步剪枝进行查询处理,从而获取SPARQL查询的结果。
本发明的第三个目的可以通过采取如下技术方案达到:
一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现上述基于谓语组合的SPARQL查询优化方法。
本发明的第四个目的可以通过采取如下技术方案达到:
一种计算机设备,所述计算机设备包含处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现上述基于谓语组合的SPARQL查询优化方法。
本发明与现有技术相比,具有如下优点和有益效果:
本发明使用了谓语组合的实体个数,结合基于成本与选择度算法,可以为SPARQL查询找到最佳的查询顺序,解决SPARQL查询过程中大量冗余中间结果的问题,从而达到在SPARQL查询过程中产生较少的冗余中间结果,提高了SPARQL查询效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本方法的流程图;
图2表示一组三元组组成的RDF图;
图3表示图2的RDF图中的谓语组合的实体个数;
图4表示一个SPARQL查询;
图5表示图4的SPARQL查询的查询图;
图6表示图5中的查询图从X作为探索起始点生成的查询树;
图7表示图5中的查询图从Y作为探索起始点生成的查询树;
图8表示不同查询从不同顶点作为探索起始点的查询路径的冗余中间结果;
图9表示不同查询从不同顶点作为探索起始点的查询路径的查询时间;
图10是本发明的系统方框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
实施例1
如图1所示,本实施例1基于谓语组合的SPARQL查询优化方法,包括下述步骤:
S101、构建RDF数据索引,生成spo、ops、ps和po四种索引方式;其中s为主语、p为谓语、o为宾语。
更进一步的,对于spo索引,通过主语加上谓语获取到一组实体(宾语)和这组实体的个数;对于ops索引,通过宾语加上谓语获取到一组实体(主语)和这组实体的个数;对于ps索引,通过谓语获取到一组实体(主语)和这组实体的个数;对于po索引,通过谓语获取到一组实体(宾语)和这组实体的个数。当前生成的四种索引将在后续的SPARQL的三元组模式顺序的优化和查询中使用。
S102、生成谓语组合,同时统计每一种谓语组合的实体个数,去除掉实体个数为0的谓语组合。图3表示了图2RDF数据的谓语组合,每个谓语后面的ds和do分别表示主语方向和宾语方向。实体个数表示满足谓语组合的实体个数。谓语组合的实体仅做说明作用,实际没有保存谓语组合的实体。
S102、获取用户提交的SPARQL查询,假设图4是用户提交的SPARQL查询。一共包含了四个三元组模式,分别为(?Y type Course),(?X takeCourse ?Y),(?Z teachOf ?Y)和(?X masterDegreeFrom ?H),表示为t1,t2,t3和t4。图5是SPARQL的查询图。
S104、找到满足两个及以上三元组模式的两个公共顶点,分别为X和Y。对图4分别从X和Y使用广度遍历,分别生成两棵树,分别如图6和图7所示。这个查询的剩余约束边为空。
S105、当探索起始点大于1个时,结合谓语组合的实体个数,估计每一棵树的成本,选择成本最低的树为初步查询树。假设QP为使用X作为起始点,通过广度遍历得到的树,如图6所示。假设SQ={sq1,sq2}为QP的所有星型子查询的一个集合。星型子查询sq1包含三元组模式{t2,t4},中心点为X,sq2包含三元组模式{t1,t3},中心点为Y。假设PNSQ={nsq1,nsq2}为SQ中每一个星型子查询通过谓语组合获取的中心点的实体个数。星型子查询sq1的谓语组合为{tc_ds,mdf_ds},sq2的谓语组合为{to_do,type_Course_ds},从图3的谓语组合的实体个数中可以获取到nsq1=1,nsq2=2。假设NSQB={sqb1,sqb2}为通过常量孩子获取到的中心点的实体个数。假设sqk是SQ中的第k个星型子查询,sqbk是sqk通过常量孩子获取到的中心点的实体个数,其中k<=n。假设sqk的常量孩子节点为Svb={vb1,…,vbh}。如果Svb为空集,那么sqbk等于nsqk;否则,sqbk等于Svb中每个元素与相应的谓语获取中心点的实体个数的最小值。由于sq1和sq2的孩子节点都是变量,Svb为空集,所以sbq1和sqb2分别等于nsq1和nsq2。假设SQ的每个星型子查询的中心的实体个数为NOC={noc1,noc2},NOC中的第k个元素nock=min{nsqk,sqbk},其中k<=2。可以知道noc1=1,noc2=2。假设WSQ={wqs1,…,wsqn}为每个星型子查询的成本,其中wsq1=nonc1=1。假设wsqfather为当前星型子查询的父亲星型子查询的成本。假设pftoc为当前子查询与父亲子查询的连接三元组模式的边,通过PO与PS可以获取到父亲节点实体和当前节点实体的个数,分别表示为nof和noc。Wsqi=wsqfather*(nof/noc)*(noci/noc),其中1<i<=n。那么对于wsq2而言,wsq2的父亲星型子查询为wsq1,pftoc为三元组模式t2的谓语tc,通过PO跟PS索引可以获取到nof=3,noc=3。那么wsq2=1*(3/3)*(2/3)=2/3。假设W为当前初步查询树的成本,那么那么W(SQ)=1+2/3=5/3。假设SQY为图7的树,同理可以获取到W(SQY)=2+2*(3/3)*(1/3)=8/3。然后计算出每一棵树的成本,选择成本最低的树。因为W(SQ)小于W(SQY),所以选择X作为探索起始点的初步查询树。
S106、当确定了初步查询树和探索起始点,使用基于选择度的算法来重新排序初步查询树中星型子查询的三元组模式顺序。以X为探索起始点的初步查询树的星型子查询分别为sq1和sq2,分别包含三元组模式{t2,t4}和{t1,t3}。计算sq1三元组模式的选择度selectivity(t2)=3,selectivity(t4)=1。那么重排sq1三元组模式的顺序为{t4,t2}。计算sq2三元组模式的选择度selectivity(t1)=2,selectivity(t3)=3。星型子查询sq2的三元组模式不需要重排。通过重排星型子查询的三元组模式,就可以获取到最终查询树。由于最终约束边为空,那么最终的三元组模式顺序为{t4,t2,t1,t3}。
S107、从步骤S106就可以确定了最终的查询路径,然后使用两步剪枝进行SPARQL查询处理。查询的探索起始点为X,星型子查询为sq1和sq2,分别包含三元组模式{t4,t2}和{t1,t3},中心点分别为X和Y。首先,从包含根节点的星型子查询sq1开始遍历,使用三元组t4的谓语mdf,通过OS索引可以获取到X的实体为Rose。接着遍历t2,可以知道Rose满足三元组模式t2。同时使用Rose和t2的谓语tc,通过SPO索引可以获取到Y的实体为Python。因为Y为sq1的非叶子节点,需要把Y的实体Python继续与中心点为Y的sq2的三元组模式{t1,t3}继续进行判断。首先遍历sq2的三元组模式t1,通过SPO索引可以知道Python满足三元组模式t1;接着继续遍历sq2的三元组模式t3,通过OPS索引可以知道Python也满足三元组模式t3。由于星型子查询sq2的两个孩子节点都是叶子节点,所以执行回溯剪枝,把Python发送给父亲星型子查询sq1。星型子查询sq1收到sq2的结果,可以知道Python没有被删除掉,最后获取到查询结果X={Rose},Y={Python}。
为了对本发明的技术方案进行验证,采用下述实验验证过程:
本发明的实验一共使用了6台服务器。每台服务器的硬件环境为Intel(R)Xeon(R)CPU E5-2630v2@2.60GHz,一共24核心,内存为128G。软件系统为RedHat4.4.7-3。
为了测试谓语组合的实际情况,实验使用了两个类型的数据集,分别为LUBM和Watdiv数据集。LUBM分别生成了三个不同大小的数据集,分别为1、2560和10240。Watdiv分别生成了两个不同大小的数据集,分别为1k和10k。表1列出了实验数据,第1行表示的是不同的数据集,第2行表示不同大小数据集的三元组个数,第3行表示不同数据集包含的谓语个数,第4行表示不同数据所生成的谓语组合的个数。
表1:不同大小数据集的谓语组合数量
为了测试本发明算法的有效性,本实验使用了Watdiv1k数据集,使用了Watdiv提供的20个基础查询。由于这20个查询中有10个查询的满足两个及以上三元组模式的公共顶点的个数只有1个,所以把这10个查询去掉,测试了剩下的公共顶点大于1的10个查询。因为服务器的数量不会影响冗余中间结果的数量,所有本实验在一台服务器进行测试。图8是表示的是每个查询从不同探索起始点生成的不同查询路径的冗余中间结果。图9是图8相对应的从不同探索起始点生成的不同查询路径的查询时间。图8和图9的箭头表示的是本算法选择的探索起始点。从图8中可以知道,本算法选择的探索起始点的冗余中间结果是最少的。从图9中也可以知道,除了查询Q2查询的时间没有达到预期外,其它的所有查询的时间都跟图8的数据相吻合,本算法选择的探索起始点的查询时间最短。本实验说明本发明的算法可以有效的找到SPARQL查询的三元组模式的最佳顺序,减少冗余中间结果,从而提高SPARQL的查询效率。
本发明还与其他的一些系统进行了比较,实验使用了Lubm10240数据集,使用了Matrix提供的常用7个LUBM基准查询。本发明与Wukong使用了6台服务器做测试,而Trinity.RDF使用了12台服务器。其中Wukong关闭了RDMA功能。从表2中,我们可以看到对于复杂查询L1,L3,L7跟有大量结果的L2,由于我们选择了更好的探索起始点、查询顺序与两步剪枝,我们的查询时间更短。由于查询比较复杂,结果比较大。当WuKong使用全历史数据的时候,会有更大的通讯开销,增加了查询时间,在复杂查询L1,L3,L7的时候比较明显。Trinity.RDF使用一步剪枝的方法,剪枝掉不满足条件的绑定值,然后使用一台服务器来实现最终的联接。由于L1,L2与L7有大量的中间结果,导致最终联接的时候成为Trinity.RDF的瓶颈。对于简单查询L4,L5,L6,我们与Wukong的查询时间相差不大。由于Trinity.RDF的服务器数量是我们的两倍,所以在部分简单查询会比我们的方法快。
从表2中,不同系统在LUBM10240数据集的测试结果
实验结果表明,针对RDF数据的不断增加与SPARQL查询越来越复杂,本发明可以有效的找到最佳的三元组模式顺序,从而减少SPARQL查询过程中产生的冗余中间结果。本发明的算法可以非常好的解决因为RDF数据集不断增大与SPARQL查询越来越复杂而造成的查询时间增加的问题。
实施例2
如图10所示,本发明提供了一种基于谓语组合的SPARQL查询优化方法,包括RFD数据索引构建模块1、谓语组合生成模块2、SPARQL查询转查询图模块3、查询图转查询树模块4、获取初步查询树模块5、重排模块6以及执行模块7。
所述RFD数据索引构建模块1,用于根据三元组的主语s、谓语p、宾语o,分别生成spo、ops、ps和po四种索引,所述三元组中的主语和宾语称为实体.
进一步的,对于spo索引,通过主语加上谓语获取到一组实体(宾语)和这组实体的个数;对于ops索引,通过宾语加上谓语获取到一组实体(主语)和这组实体的个数;对于ps索引,通过谓语获取到一组实体(主语)和这组实体的个数;对于po索引,通过谓语获取到一组实体(宾语)和这组实体的个数。
所述谓语组合生成模块2,用于生成谓语组合,谓语组合中的每一个元素都包含一组标签,并且统计每个谓语组合的实体个数。
进一步的,为RDF数据集中的每一个非type的谓语生成两个标签,这两个标签包含一个共同的谓语,同时分别包含主语方向和宾语方向。对于谓语为type的情况,把type加上宾语当作谓语,同时加上主语方法,生成一个标签。使用这些标签生成所有的组合,称为谓语组合。谓语组合的中的每一个元素都包含一组标签。如果一个标签包含主语方向,通过ps索引可以获取到主语;如果一个标签包含宾语方向,通过po索引可以获取到宾语。通过对一组标签获取到的主语或者宾语做交集,我们把交集结果的个数称为这个谓语组合的实体个数。使用字典npc来保存每一个谓语组合的实体个数,其中key为谓语组合,value为实体个数。
所述SPARQL查询转查询图模块3,用于获取用户提交的SPARQL查询,并且把SPARQL查询转换为SPARQL查询图;
所述查询图转查询树4,获取查询图中所有满足两个及以上三元组模式的公共顶点,对每一个公共顶点使用广度遍历算法,把SPARQL查询图转换成一棵树,就能得到一组树;
如果SPARQL查询图存在回环,每一棵树都有一些没有被遍历过的边,称没有被遍历过的边为剩余约束边。
所述获取初步查询树模块5,用于根据得到的初步查询树,确定探索起始点.
如果这组树中只有一棵树,那么直接选择这棵树为成本最低的树;否则,需要选择这组树中成本最低的树;首先需要获取每一棵树的成本,假设QP为某个顶点使用广度遍历算法生成的树;假设QP中每一个非叶子节点与孩子节点的三元组模式为一个星型子查询,这个星型子查询的中心点为相应的非叶子节点,SQ={sq1,…,sqn}为QP的所有星型子查询的一个集合,其中n>1,sq1为包含根节点的星型子查询;假设PNSQ={nsq1,…,nsqn}为SQ中每一个星型子查询通过谓语组合获取的中心点的实体个数,假设NSQB={sqb1,…,sqbn}为通过常量孩子获取到的中心点的实体个数;假设sqk是SQ中的第k个星型子查询,其中k<=n;假设sqk的常量孩子节点为Svb={vb1,…,vbh},其中h<=n;如果Svb为空集,那么sqbk等于nsqk;否则,sqbk等于Svb中每个元素与相应的谓语获取中心点的实体个数的最小值;假设每个星型子查询的中心点的实体个数为NOC={noc1,…,nocn},NOC中的每个元素nock=min{nsqk,sqbk},其中k<=n;假设WSQ={wqs1,…,wsqn}为每个星型子查询的成本,其中wsq1=nonc1;假设wsqfather为当前星型子查询的父亲星型子查询的成本;假设pftoc为当前星型子查询与父亲星型子查询连接的三元组模式的边,通过PO与PS可以获取到父亲节点实体和当前节点实体的个数,分别表示为nof和noc;假设WSQ中的第i个星型子查询的成本为wsqi,那么wsqi=wsqfather*(nof/noc)*(noci/noc),其中1<i<=n;假设W为当前初步查询树的成本,那么其次,计算出这组树中每一棵树的成本,选择成本最低的树,并称这棵树为初步查询树,初步查询树的根节点为探索起始点。
所述重排模块6,用于重排每个星型子查询的三元组模式的顺序,生成最终的查询顺序;当确定了初步查询树和探索起始点后,再使用基于选择度的算法来重排初步查询树中每个星型子查询的三元组模式顺序,就可以得到最终查询树。把最终查询树和剩余约束边加在一起,就是最终的三元组模式的查询顺序。
可选的,当探索起始点确定好,需要重新排序初步查询树的每个星型子查询的三元组模式的顺序,假如sqk为初步查询树的一个星型子查询,Tp={tp1,..,tpj}为sqk的三元组模式。使用selectivity(tpi)表示tpi的选择度,其中i<=j,如果tpi中的孩子节点为常量时,则可以使用常量加上谓语,通过SPO或者OPS索引获取到中心点的实体个数;如果tpi的孩子节点为变量时,则可以使用谓语,通过PO或者PS索引获取到中心点的实体个数;我们把中心点的实体个数称为tpi的选择度。使用Tp的选择度,按照从小到大重新排序Tp的顺序。当所有的星型子查询的三元组模式按照选择度重新排序好后,我们称这个树为最终查询树。把最终查询树和剩余约束边加在一起,就是最终的三元组模式的查询顺序。
所述执行模块7,用于根据生成的三元组模式的查询顺序,使用两步剪枝进行查询处理,从而获取SPARQL查询的结果。
可选的,把每一个非叶子节点与孩子节点的三元组模式当作一个星型子查询,表示为SQ={sq1,…,sqn},其中这个非叶子节点也称为这个星型子查询的中心点Vcenter,每个星型子查询也包含一组三元组模式Tp={tp1,…,tpn};假设sq1是包含根节点的星型子查询;首先,是向下剪枝,先处理sq1,通过tp1来获取Vcenter的实体,如果tp1的孩子节点是常量值,则使用这个常量值与tp1的谓语,通过SPO或者OPS索引来获取到Vcenter的实体值,表示为Sbound;否则,通过PO或者PS索引来获取Vcenter的实体值;如果包含根节点的星型子查询的三元组模式的个数大于1,那么继续遍历{tp2,…,tpn},剪枝掉Sbound中不满足{tp2,…,tpn}的实体。假设Nchild是任意一个星型子查询中的一个非叶子节点;对于任意星型子查询剪枝完成后,需要把非叶子节点Nchild的所有实体与星型子查询中心点为Nchild的三元组模式依次进行遍历;其次是回溯剪枝,当任意一个星型子查询的孩子节点全部为叶子节点,或者星型子查询的实体为空时,需要把查询结果发送给父亲星型子查询;假设任意一个星型子查询的中心点的实体为Sbound,接收到的孩子子查询的中心点实体为Sboundchild,需要把Sbound中与Sboundchild没有关系的实体删除掉;如果这个星型子查询不包含根节点,则需要继续把实体Sbound发送给本身的父亲星型子查询;依次回溯剪枝,直到星型子查询包含根节点为止;如果这个SPARQL查询的剩余约束边不为空,还需要继续遍历剩余约束边;通过上述两步剪枝就能获取到最终的查询结果。
实施例3:
本实施例3提供了计算机可读存储介质所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行基于谓语组合的SPARQL查询优化方法,如下:
构建RDF数据索引,根据三元组的主语s、谓语p、宾语o,分别生成spo、ops、ps和po四种索引,所述三元组中的主语和宾语称为实体;
生成谓语组合,谓语组合中的每一个元素都包含一组标签,并且统计每个谓语组合的实体个数;
获取用户提交的SPARQL查询,并且把SPARQL查询转换为SPARQL查询图;
获取所有满足两个及以上三元组模式的公共顶点,对每一个公共顶点使用广度遍历算法,把SPARQL查询图转换成一棵树,就能得到一组树;
使用基于成本的算法选择这组树中成本最低的树,称这棵树为初步查询树,根节点为探索起始点;
定义初步查询树中每个非叶子节点与孩子节点的三元组模式为星型子查询,使用基于选择度算法重排每个星型子查询的三元组模式顺序,生成最终的查询顺序;
根据生成的三元组模式的查询顺序,使用两步剪枝进行查询处理,从而获取SPARQL查询的结果。
实施例4:
本实施例4提供了一种计算机设备,所述计算机设备包含处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现基于谓语组合的SPARQL查询优化方法,如下:
构建RDF数据索引,根据三元组的主语s、谓语p、宾语o,分别生成spo、ops、ps和po四种索引,所述三元组中的主语和宾语称为实体;
生成谓语组合,谓语组合中的每一个元素都包含一组标签,并且统计每个谓语组合的实体个数;
获取用户提交的SPARQL查询,并且把SPARQL查询转换为SPARQL查询图;
选择SPARQL查询图中任意一个满足两个及以上三元组模式的共同顶点作为探索的起始点,通过广度遍历就把SPARQL查询图转换成一棵树,称这棵树为初步查询树;
根据得到的初步查询树,确定探索起始点;
重排三元组模式的顺序,生成最终的查询顺序;
根据生成的三元组模式的查询顺序,使用两步剪枝进行查询处理,从而获取SPARQL查询的结果。
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。
Claims (7)
1.基于谓语组合的SPARQL查询优化方法,其特征在于,包括下述步骤:
构建RDF数据索引,根据三元组的主语S、谓语P、宾语O,分别生成SPO、OPS、PS和PO四种索引,所述三元组中的主语和宾语称为实体;
生成谓语组合,谓语组合中的每一个元素都包含一组标签,并且统计每个谓语组合的实体个数;
获取用户提交的SPARQL查询,并且把SPARQL查询转换为SPARQL查询图;
获取查询图中所有满足两个及以上三元组模式的公共顶点,对每一个公共顶点使用广度遍历算法,把SPARQL查询图转换成一棵树,就能得到一组树;
使用基于成本的算法选择这组树中成本最低的树,称这棵树为初步查询树,根节点为探索起始点;
所述使用基于成本的算法选择这组树中成本最低的树的步骤具体为:
如果这组树中只有一棵树,那么直接选择这棵树为成本最低的树;否则,需要从这组树中选择成本最低的树;首先需要获取每一棵树的成本,假设QP为某个顶点使用广度遍历算法生成的树;假设QP中每一个非叶子节点与孩子节点的三元组模式为一个星型子查询,这个星型子查询的中心点为相应的非叶子节点,SQ={sq1,…,sqn}为QP的所有星型子查询的一个集合,其中n>1,sq1为包含根节点的星型子查询;假设PNSQ={nsq1,…,nsqn}为SQ中每一个星型子查询通过谓语组合获取的中心点的实体个数;假设NSQB={sqb1,…,sqbn}为通过常量孩子获取到的中心点的实体个数;假设sqk是SQ中的第k个星型子查询,其中k<=n;假设sqk的常量孩子节点为Svb={vb1,…,vbh},其中h<=n;如果Svb为空集,那么sqbk等于nsqk;否则,sqbk等于Svb中每个元素与相应的谓语获取中心点的实体个数的最小值;假设每个星型子查询的中心点的实体个数为NOC={noc1,…,nocn},NOC中的每个元素nock=min{nsqk,sqbk},其中k<=n;假设WSQ={wqs1,…,wsqn}为每个星型子查询的成本,其中wsq1=noc1;假设wsqfather为当前星型子查询的父亲星型子查询的成本;假设pftoc为当前星型子查询与父亲星型子查询连接的三元组模式的边,通过PO与PS可以获取到父亲节点实体和当前节点实体的个数,分别表示为nof和noc;假设WSQ中的第i个星型子查询的成本为wsqi,那么wsqi=wsqfather*(nof/noc)*(noci/noc),其中1<i<=n;假设W为当前初步查询树的成本,那么;其次,计算出这组树中每一棵树的成本,选择成本最低的树,并称这棵树为初步查询树,初步查询树的根节点为探索起始点;
定义初步查询树中每个非叶子节点与孩子节点的三元组模式为星型子查询,使用基于选择度算法重排每个星型子查询的三元组模式顺序,生成最终的查询顺序;
所述使用基于选择度算法重排初步查询树中每个星型子查询的三元组模式的顺序,生成最终的查询顺序的步骤具体为:
假如sqk为初步查询树的一个星型子查询,Tp={tp1,..,tpj}为sqk所包含的三元组模式;使用selectivity(tpi)表示tpi的选择度,其中i<=j;如果tpi中的孩子节点为常量时,则可以使用常量加上谓语,通过SPO或者OPS索引获取到中心点的实体个数;如果tpi的孩子节点为变量时,则可以使用谓语,通过PO或者PS索引获取到中心点的实体个数;把中心点的实体个数称为tpi的选择度;使用Tp的选择度,按照从小到大的顺序重新排序Tp的顺序;当所有的星型子查询的三元组模式按照选择度重新排序好后,称这个树为最终查询树;把最终查询树和剩余约束边加在一起,就是最终的三元组模式的查询顺序;
根据生成的三元组模式的查询顺序,使用两步剪枝进行查询处理,从而获取SPARQL查询的结果;
所述根据生成的三元组模式的查询顺序,使用两步剪枝进行查询处理,从而获取SPARQL查询的结果的步骤中,具体为:
把每个非叶子节点与孩子节点的三元组模式当作一个星型子查询,表示为SQ={sq1,…,sqn},其中这个非叶子节点也称为这个星型子查询的中心点Vcenter,每个星型子查询也包含一组三元组模式Tp={tp1,…,tpn};假设sq1是包含根节点的星型子查询;首先,是向下剪枝,先处理sq1,通过tp1来获取Vcenter的实体,如果tp1的孩子节点是常量值,则使用这个常量值与tp1的谓语,通过SPO或者OPS索引来获取到Vcenter的实体值,表示为Sbound;否则,通过PO或者PS索引来获取Vcenter的实体值;如果包含根节点的星型子查询的三元组模式的个数大于1,那么继续遍历{tp2,…,tpn},剪枝掉Sbound中不满足{tp2,…,tpn}的实体;假设Nchild是任意一个星型子查询中的一个非叶子节点;对于任意星型子查询剪枝完成后,需要把非叶子节点Nchild的所有实体与星型子查询中心点为Nchild的三元组模式依次进行遍历;其次是回溯剪枝,当任意一个星型子查询的孩子节点全部为叶子节点,或者星型子查询的实体为空时,需要把查询结果发送给父亲星型子查询;假设任意一个星型子查询的中心点的实体为Sbound,接收到的孩子星型子查询的中心点实体为Sboundchild,需要把Sbound中与Sboundchild没有关系的实体删除掉;如果这个星型子查询不包含根节点,则需要继续把实体Sbound发送给本身的父亲星型子查询;依次回溯剪枝,直到星型子查询包含根节点为止;如果这个SPARQL查询的剩余约束边不为空,还需要继续遍历剩余约束边;通过上述的两步剪枝就能获取到最终的查询结果。
2.根据权利要求1所述基于谓语组合的SPARQL查询优化方法,其特征在于,对于SPO索引,通过主语加上谓语获取到一组实体和这组实体的个数;
对于OPS索引,通过宾语加上谓语获取到一组实体和这组实体的个数;
对于PS索引,通过谓语获取到一组实体和这组实体的个数;
对于PO索引,通过谓语获取到一组实体和这组实体的个数。
3.根据权利要求1所述基于谓语组合的SPARQL查询优化方法,其特征在于,所述生成谓语组合,并且统计每个谓语组合的实体个数的步骤,具体为:
为RDF数据集中的每一个非type的谓语生成两个标签,这两个标签包含一个共同的谓语,同时分别包含主语方向和宾语方向;
对于谓语为type的情况,把type加上宾语当作谓语,同时加上主语方法,生成一个标签;
使用这些标签生成所有的组合,称为谓语组合,统计每一种谓语组合的实体个数,并且去掉实体个数为0的谓语组合。
4.根据权利要求1所述基于谓语组合的SPARQL查询优化方法,其特征在于,所述获取查询图中所有满足两个及以上三元组模式的公共顶点,对每一个公共顶点使用广度遍历算法,把SPARQL查询图转换成一棵树,就能得到一组树的步骤中,还包括:
如果SPARQL查询图存在回环,每一棵树都有一些没有被遍历过的边,称没有被遍历过的边为剩余约束边。
5.一种基于谓语组合的SPARQL查询优化系统,其特征在于,包括:
RDF数据索引构建模块,用于根据三元组的主语S、谓语P、宾语O,分别生成SPO、OPS、PS和PO四种索引,所述三元组中的主语和宾语称为实体;
谓语组合生成模块,用于生成谓语组合,谓语组合中的每一个元素都包含一组标签,并且统计每个谓语组合的实体个数;
SPARQL查询转查询图模块,用于获取用户提交的SPARQL查询,并且把SPARQL查询转换为查询图;
查询图转查询树模块,用于获取查询图中所有满足两个及以上三元组模式的公共顶点,对每一个顶点使用广度遍历算法,把SPARQL查询图转换成一棵树,就能得到一组树;
获取初步查询树模块,用于使用基于成本的算法选择这组树中成本最低的树,称这棵树为初步查询树,根节点为探索起始点;
所述使用基于成本的算法选择这组树中成本最低的树的步骤具体为:
如果这组树中只有一棵树,那么直接选择这棵树为成本最低的树;否则,需要从这组树中选择成本最低的树;首先需要获取每一棵树的成本,假设QP为某个顶点使用广度遍历算法生成的树;假设QP中每一个非叶子节点与孩子节点的三元组模式为一个星型子查询,这个星型子查询的中心点为相应的非叶子节点,SQ={sq1,…,sqn}为QP的所有星型子查询的一个集合,其中n>1,sq1为包含根节点的星型子查询;假设PNSQ={nsq1,…,nsqn}为SQ中每一个星型子查询通过谓语组合获取的中心点的实体个数;假设NSQB={sqb1,…,sqbn}为通过常量孩子获取到的中心点的实体个数;假设sqk是SQ中的第k个星型子查询,其中k<=n;假设sqk的常量孩子节点为Svb={vb1,…,vbh},其中h<=n;如果Svb为空集,那么sqbk等于nsqk;否则,sqbk等于Svb中每个元素与相应的谓语获取中心点的实体个数的最小值;假设每个星型子查询的中心点的实体个数为NOC={noc1,…,nocn},NOC中的每个元素nock=min{nsqk,sqbk},其中k<=n;假设WSQ={wqs1,…,wsqn}为每个星型子查询的成本,其中wsq1=noc1;假设wsqfather为当前星型子查询的父亲星型子查询的成本;假设pftoc为当前星型子查询与父亲星型子查询连接的三元组模式的边,通过PO与PS可以获取到父亲节点实体和当前节点实体的个数,分别表示为nof和noc;假设WSQ中的第i个星型子查询的成本为wsqi,那么wsqi=wsqfather*(nof/noc)*(noci/noc),其中1<i<=n;假设W为当前初步查询树的成本,那么;其次,计算出这组树中每一棵树的成本,选择成本最低的树,并称这棵树为初步查询树,初步查询树的根节点为探索起始点;
重排模块,用于使用基于选择度算法来重排初步查询树中每个星型子查询的三元组模式的顺序,生成最终的查询顺序;所述使用基于选择度算法重排初步查询树中每个星型子查询的三元组模式的顺序,生成最终的查询顺序的步骤具体为:
假如sqk为初步查询树的一个星型子查询,Tp={tp1,..,tpj}为sqk所包含的三元组模式;使用selectivity(tpi)表示tpi的选择度,其中i<=j;如果tpi中的孩子节点为常量时,则可以使用常量加上谓语,通过SPO或者OPS索引获取到中心点的实体个数;如果tpi的孩子节点为变量时,则可以使用谓语,通过PO或者PS索引获取到中心点的实体个数;把中心点的实体个数称为tpi的选择度;使用Tp的选择度,按照从小到大的顺序重新排序Tp的顺序;当所有的星型子查询的三元组模式按照选择度重新排序好后,称这个树为最终查询树;把最终查询树和剩余约束边加在一起,就是最终的三元组模式的查询顺序;
执行模块,用于根据生成的三元组模式的查询顺序,使用两步剪枝进行查询处理,从而获取SPARQL查询的结果;所述根据生成的三元组模式的查询顺序,使用两步剪枝进行查询处理,从而获取SPARQL查询的结果的步骤中,具体为:
把每个非叶子节点与孩子节点的三元组模式当作一个星型子查询,表示为SQ={sq1,…,sqn},其中这个非叶子节点也称为这个星型子查询的中心点Vcenter,每个星型子查询也包含一组三元组模式Tp={tp1,…,tpn};假设sq1是包含根节点的星型子查询;首先,是向下剪枝,先处理sq1,通过tp1来获取Vcenter的实体,如果tp1的孩子节点是常量值,则使用这个常量值与tp1的谓语,通过SPO或者OPS索引来获取到Vcenter的实体值,表示为Sbound;否则,通过PO或者PS索引来获取Vcenter的实体值;如果包含根节点的星型子查询的三元组模式的个数大于1,那么继续遍历{tp2,…,tpn},剪枝掉Sbound中不满足{tp2,…,tpn}的实体;假设Nchild是任意一个星型子查询中的一个非叶子节点;对于任意星型子查询剪枝完成后,需要把非叶子节点Nchild的所有实体与星型子查询中心点为Nchild的三元组模式依次进行遍历;其次是回溯剪枝,当任意一个星型子查询的孩子节点全部为叶子节点,或者星型子查询的实体为空时,需要把查询结果发送给父亲星型子查询;假设任意一个星型子查询的中心点的实体为Sbound,接收到的孩子星型子查询的中心点实体为Sboundchild,需要把Sbound中与Sboundchild没有关系的实体删除掉;如果这个星型子查询不包含根节点,则需要继续把实体Sbound发送给本身的父亲星型子查询;依次回溯剪枝,直到星型子查询包含根节点为止;如果这个SPARQL查询的剩余约束边不为空,还需要继续遍历剩余约束边;通过上述的两步剪枝就能获取到最终的查询结果。
6.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如权利要求1至4任一所述的基于谓语组合的SPARQL查询优化方法。
7.一种计算机设备,其特征在于,所述计算机设备包含处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如权利要求1至4任一所述的基于谓语组合的SPARQL查询优化方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010049093.2A CN111241127B (zh) | 2020-01-16 | 2020-01-16 | 基于谓语组合的sparql查询优化方法、系统、存储介质及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010049093.2A CN111241127B (zh) | 2020-01-16 | 2020-01-16 | 基于谓语组合的sparql查询优化方法、系统、存储介质及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111241127A CN111241127A (zh) | 2020-06-05 |
CN111241127B true CN111241127B (zh) | 2023-01-31 |
Family
ID=70874648
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010049093.2A Active CN111241127B (zh) | 2020-01-16 | 2020-01-16 | 基于谓语组合的sparql查询优化方法、系统、存储介质及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111241127B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112732746B (zh) * | 2021-01-13 | 2023-05-12 | 首都师范大学 | 一种基于sparql端点联合的动态连接排序方法 |
CN113326284B (zh) * | 2021-08-03 | 2021-10-01 | 国网电商科技有限公司 | 基于正则路径查询的搜索系统 |
CN114706846A (zh) * | 2021-12-31 | 2022-07-05 | 北京大学 | 查询数据的方法、装置、设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101593180A (zh) * | 2008-05-30 | 2009-12-02 | 国际商业机器公司 | 将sparql查询转化成sql查询的方法和装置 |
CN102929996A (zh) * | 2012-10-24 | 2013-02-13 | 华南理工大学 | XPath查询优化方法及系统 |
CN108520035A (zh) * | 2018-03-29 | 2018-09-11 | 天津大学 | 基于星形分解的sparql基本图模式查询处理方法 |
CN109992658A (zh) * | 2019-04-09 | 2019-07-09 | 智言科技(深圳)有限公司 | 一种知识驱动的sparql查询构建方法 |
CN110032676A (zh) * | 2019-03-15 | 2019-07-19 | 中南大学 | 一种基于谓词关联的sparql查询优化方法及系统 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5659725A (en) * | 1994-06-06 | 1997-08-19 | Lucent Technologies Inc. | Query optimization by predicate move-around |
US20110320431A1 (en) * | 2010-06-25 | 2011-12-29 | Microsoft Corporation | Strong typing for querying information graphs |
US9280583B2 (en) * | 2012-11-30 | 2016-03-08 | International Business Machines Corporation | Scalable multi-query optimization for SPARQL |
CN105243064A (zh) * | 2014-06-23 | 2016-01-13 | 华为技术有限公司 | 一种子图匹配的方法及装置 |
CN104834754A (zh) * | 2015-05-29 | 2015-08-12 | 武汉大学 | 一种基于连接代价的sparql语义数据查询优化方法 |
US10810210B2 (en) * | 2017-05-12 | 2020-10-20 | Battelle Memorial Institute | Performance and usability enhancements for continuous subgraph matching queries on graph-structured data |
CN109299289B (zh) * | 2018-11-30 | 2021-04-06 | 国信优易数据股份有限公司 | 一种查询图构建方法、装置、电子设备及计算机存储介质 |
-
2020
- 2020-01-16 CN CN202010049093.2A patent/CN111241127B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101593180A (zh) * | 2008-05-30 | 2009-12-02 | 国际商业机器公司 | 将sparql查询转化成sql查询的方法和装置 |
CN102929996A (zh) * | 2012-10-24 | 2013-02-13 | 华南理工大学 | XPath查询优化方法及系统 |
CN108520035A (zh) * | 2018-03-29 | 2018-09-11 | 天津大学 | 基于星形分解的sparql基本图模式查询处理方法 |
CN110032676A (zh) * | 2019-03-15 | 2019-07-19 | 中南大学 | 一种基于谓词关联的sparql查询优化方法及系统 |
CN109992658A (zh) * | 2019-04-09 | 2019-07-09 | 智言科技(深圳)有限公司 | 一种知识驱动的sparql查询构建方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111241127A (zh) | 2020-06-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111241127B (zh) | 基于谓语组合的sparql查询优化方法、系统、存储介质及设备 | |
US10133778B2 (en) | Query optimization using join cardinality | |
US7849073B2 (en) | Load balancing for complex database query plans | |
Maccioni et al. | Scalable pattern matching over compressed graphs via dedensification | |
US9870401B2 (en) | Database system with highly denormalized database structure | |
Stuckenschmidt et al. | Index structures and algorithms for querying distributed RDF repositories | |
US7814091B2 (en) | Multi-tiered query processing techniques for minus and intersect operators | |
US9798772B2 (en) | Using persistent data samples and query-time statistics for query optimization | |
KR100558765B1 (ko) | 적응형 경로 인덱스를 이용한 xml 질의 수행 방법 | |
US5696960A (en) | Computer program product for enabling a computer to generate uniqueness information for optimizing an SQL query | |
US20150310644A1 (en) | Efficient representations of graphs with multiple edge types | |
US20140258266A1 (en) | Methods and apparatus of shared expression evaluation across rdbms and storage layer | |
US8744770B2 (en) | Path oracles for spatial networks | |
CN104424254B (zh) | 获取相似对象集合、提供相似对象信息的方法及装置 | |
TWI686707B (zh) | 資料庫存取方法及裝置 | |
CN109325029A (zh) | 基于稀疏矩阵的rdf数据存储和查询方法 | |
CN107102995B (zh) | 一种sql执行计划的确定方法及装置 | |
CN110727760A (zh) | 一种对大规模知识图谱进行分布式正则路径查询的方法 | |
CN110750560B (zh) | 一种优化网络多连接的系统和方法 | |
KR101255639B1 (ko) | 컬럼 기반 데이터베이스 시스템 및 데이터베이스 시스템의 조인 인덱스를 이용한 조인 처리 방법 | |
US20040172387A1 (en) | Apparatus and method for matching a query to partitioned document path segments | |
US11625398B1 (en) | Join cardinality estimation using machine learning and graph kernels | |
JP2023070105A (ja) | クエリパイプライン実行のスケジューリング | |
CN112256705B (zh) | 一种Gaia系统中的多表连接优化方法 | |
US11379485B2 (en) | Inferred predicates for query optimization |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |