CN104462609B - 结合星型图编码的rdf数据存储与查询方法 - Google Patents
结合星型图编码的rdf数据存储与查询方法 Download PDFInfo
- Publication number
- CN104462609B CN104462609B CN201510003231.2A CN201510003231A CN104462609B CN 104462609 B CN104462609 B CN 104462609B CN 201510003231 A CN201510003231 A CN 201510003231A CN 104462609 B CN104462609 B CN 104462609B
- Authority
- CN
- China
- Prior art keywords
- star
- node
- inquiry
- query
- result
- 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.)
- Expired - Fee Related
Links
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/80—Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
- G06F16/81—Indexing, e.g. XML tags; Data structures therefor; Storage structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/80—Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
- G06F16/83—Querying
- G06F16/835—Query processing
- G06F16/8373—Query execution
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种结合星型图编码的RDF数据存储与查询方法,步骤S1:对RDF数据进行预处理,将所述RDF数据以RDF数据图方式呈现;步骤S2:将输入的SPARQL查询语句以SPARQL查询图方式呈现,进行查询分解;步骤S3:对所述SPARQL查询语句进行预处理,得到整个查询的任务数、查询星型子节点的连接顺序以及查询星型子节点的相关信息;步骤S4:执行所述SPARQL查询语句并进行查询连接计划,采用Hadoop的MapReduce并行运算框架,根据所述SPARQL查询语句的关联性决定查询任务Job的启动次数;步骤S5:进行子图查询,采用Map函数;步骤S6:进行结果连接算法,采用Reduce函数。本发明由于采用基于星型结构的哈希编码索引查询策略,减少存储数据冗余和查询任务数,加快查询效率。
Description
技术领域
本发明属于海量RDF数据管理技术领域,具体涉及一种结合星型图编码的RDF数据存储与查询方法。
背景技术
目前已有一些研究提出了基于云平台的RDF数据存储及管理。例如:(1)利用SimpleDB(AWS提供的一种Key-Value Store)来回答SPARQL查询,提出了一系列索引方式,用来确定给定一个查询以后,利用其索引结构能够很快地判定哪个RDF数据集可能包含查询结果。(2)利用Hadoop来存储和检索RDF数据集的方案,并讨论了此平台下的查询计划生成算法。(3)根据属性及宾语所属的类型将数据划分成多个小文件并存储在HDFS,查询处理方面,采用一种贪心的MapReduce作业生成算法,多个作业迭代处理SPARQL查询的连接操作。(4)直接将RDF数据以N-Triple文件形式存放在HDFS,创建一个MapReduce作业从HDFS文件中查找对应的三元组,然后采用多个MapReduce作业迭代处理SPARQL查询的连接操作,提出了贪婪选择以及多路选择两种连接选择策略。(5)利用多路连接与过滤策略来代替传统的SQL连接,合并查询中不同阶段的工作任务。(6)在基于P2P数据存储中提出了一个优化的路由索引方案和三元组索引相结合的方式来处理RDF查询。以上方法都是以一个三元组作为一个查询子任务,带来了中间结果数据量大,查询连接任务数多的问题。以多个三元组作为一个查询子任务也有一些研究,如根据数据的分布将查询分解成PWOC(parallelizablewithout communication)子查询,每个子查询只在一个机器结点上执行,但需要冗余存储边沿结点,造成存储空间变大。或者将查询分解成多个星型子查询,在查询处理时使得每个分发回收(map-reduce)的迭代过程中只处理一个星型子查询,最后再将这些子查询的结果进行连接得到最终结果。这种先处理所有子任务,最后再进行结果连接的处理方式需要开启的MapReduce任务数多。
其中,一个三元组作为一个查询子任务,带来了中间结果数据量大,查询连接任务数多的问题。多个三元组作为一个查询子任务需要冗余存储边沿结点,造成存储空间变大。
发明内容
有鉴于此,本发明的目的是提供一种结合星型图编码的RDF数据存储与查询方法。由于采用基于星型结构的哈希编码索引查询策略,减少存储数据冗余和查询任务数,加快查询效率。
本发明的装置采用以下方案实现:一种结合星型图编码的RDF数据存储与查询方法,包括以下步骤:
步骤S1:对RDF数据进行预处理,将所述RDF数据以RDF数据图方式呈现;所述的预处理包括一星形数据分割阶段和一星形图编码阶段;
步骤S2:将输入的SPARQL查询语句以SPARQL查询图方式呈现,进行查询分解,解析成星型节点,形成查询子图G;
步骤S3:对所述SPARQL查询语句进行预处理,得到整个查询的任务数、查询星型子节点的连接顺序以及查询星型子节点的相关信息;所述的查询星型子节点的相关信息包括主语类型、查询变量、连接变量、索引编码和节点编码;通过主语类型将查询星型节点的查询范围定位到主语类型所在的文件夹下,再由索引编码可以得到具体的输入文件;
步骤S4:执行所述SPARQL查询语句并进行查询连接计划,采用Hadoop的MapReduce并行运算框架,根据所述SPARQL查询语句的关联性决定查询任务Job的启动次数;
步骤S5:进行子图查询,采用Map函数,包括两个过程:首先利用步骤S3计算好的索引编码和过滤策略1,得到关于查询连接任务Q的候选文件;其次结合分布式框架,根据节点编码和过滤策略2,对输入文件中的星型节点做快速的过滤和精确验证,最后得到每个查询子图任务的查询结果;
步骤S6:进行结果连接算法,采用Reduce函数。
进一步地,所述步骤S1中的星形数据分割阶段包括以下步骤:
步骤S11:定义所述的RDF数据图为一个三元组(V,E,L),其中,V为顶点集合,E为边的集合,L为标签集合,且L=Lv∪Lp,Lv为顶点的标签集合,Lp为边的标签集合;其中V对应三元组中的s和o,E对应p;即RDF数据图G是以s和o为顶点、p为边,并且顶点和边上都带有标签的图;
步骤S12:将所述的RDF数据图分解成多个星型结构;所述星型结构由多个RDF三元组共同组成,每个三元组的主语相同,将构成所述星型结构的多个三元组数据表示成一个节点,形成一星型节点;
步骤S13:假设每个星型节点存储的第一行为星型的中心点,即主语,只存储一次;之后的每一行为三元组中的谓语和宾语,用逗号连接,每个星型节点以END结束;
步骤S14:所述星型节点按照主语的Type划分,对每个Type类型创建一个以Type取值命名的文件夹,将Type相同的星型节点放在同一文件夹下存储,同时在存储星型节点内容时去除谓语为Type的三元组。
进一步地,所述步骤S1中的星形图编码阶段包括索引编码和节点编码,具体包括以下步骤:
步骤S21:定义哈希映射,给定一个字符串S,S在哈希函数的作用下得到数值x,x对M取模,得到数值y,定义一个长度为M的计数串,将y位上的字符置1,其他置0,得到映射串Sig(S);即
Sig=a1a2a3…aM,ai=0,i=1,2,3,…M
y=HashFunc(S)Mod(M)
令ay=1后得到Sig即为Sig(S);
步骤S22:定义索引编码并进行参数设置:给定一个星型图和图中的一个节点s,对s的边沿节点即宾语o信息进行编码,表示为ISig(s.o);将ISig(s.o)相同的星型节点放入同一个以该编码命名的文件,以文件名为索引;针对每个元组<p,o>中的o进行编码:首先确定一个长度M,按照哈希映射的定义将o映射到一个0/1字符串,然后利用比特位上的“或”操作来得到ISig(s.o)的值;根据每个节点求出的ISig(s.o),将ISig(s.o)相同的星型节点放入同一个文件中;若部分查询条件的宾语o已知时,根据o再次缩小输入文件的范围;其中M值的大小应不大于log2(x/64),x为一S.Type文件夹下的数据总量xMB;
步骤S23:定义节点编码并进行参数设置,给定一个星型图和图中的一个节点s,对s中的谓语p和宾语o信息进行编码,表示为NSig(s);NSig(s)的结果为<L,N>,其中L是长度为x的计数串,用以表示点的边的标签信息,即p信息;N是长度为y的计数串,用以表示中心节点的邻居节点的标签信息,即o信息;首先确定L和N的长度值,然后将p的标签信息编码到节点编码的L部分,即NSig(s).p;将连接点的标签信息编码到节点编码的N部分,即NSig(s).o,其次,对于每个星型节点,将得到多个NSig(s).p、NSig(s).o对,再利用比特位上的“加”操作得到NSig(s)的值;其中L和N分别表示星型节点的<p,o>标签信息,每个不同的标签,使用哈希定义将计数串x个元素中m个位置为1;根据阈值理论公式(1)得出L和N的长度值,
其中X为某个计数串的长度,m为计数串中1的个数,|Q|为查询图中节点的个数,|G|为数据图中节点个数。
进一步地,所述步骤S3中对查询语句进行预处理的具体包括以下步骤:
步骤S31:采用Jena对SPARQL语句进行解析,得到每个三元组;
步骤S32:对三元组进行扩展,若所述三元组中的谓语是rdf:type,则需得到宾语的所有子类;
步骤S33:将主语相同的三元组组合成查询星型节点,在查询星型节点中,若有谓语是rdf:type的三元组,则可以得到查询星型节点的主语类型;若无,则要根据查询星型节点中的其他谓语,从本体文件中得到谓语的定义域,所有谓语的定义域的交集即为查询星型节点的主语类型;
步骤S34:若一个查询星型节点N1只有一个三元组,谓语为rdf:type,且查询星型节点的主语是其他查询星型节点中某个三元组(triplePattern1)的宾语,并且根据所述triplePattern1的谓语求得的值域与N1的主语类型一致或为其子类,则N1可去掉;
进一步地,所述步骤S4中的查询连接计划具体为:在第一个查询任务中,选择有关联的两个查询星型节点进行查询连接,输入为根据两个查询星型节点索引编码过滤后的输入文件,查询结果输出到文件系统;其次查询任务在未参与查询的查询星型节点中任选一个与上一次任务得到的新组合节点有关联的查询星型节点进行查询连接,以此类推,直到没有未查询的查询星型节点为止;查询的输入为上一次任务的输出文件和新查询节点的过滤文件;如果整个查询语句只有一个星型节点,则只需开启一个查询任务。
进一步地,所述的步骤S5中的过滤策略1为:给定查询子图的索引标签q.ISig(s.o)对输入文件进行过滤,若q.ISig(s.o)≤filename,则将filename加入到输入候选集中。
进一步地,所述的步骤S5中的过滤策略2为:给定查询子图的节点标签q.NSig(s),对查询文件中的节点编码为NSig(Vi),若q.NSig(s)≤NSig(Vi),则将此节点保留进行详细验证,否则直接跳过此节点。
进一步地,所述的步骤S5中的Map函数处理过程包括以下步骤:
步骤S51:判断查询任务类型,如果是单个查询子节点转步骤S52,如果是两个新查询子节点,转步骤S53,如果一个是上一次任务获得的节点一个是新查询子节点,转步骤S56;
步骤S52:获取当前数据块,执行节点编码过滤,若过滤通过则进行结果匹配,有结果则输出,key=查询的未知数集合,value=查询子句的结果值,与key相匹配;
步骤S53:获取当前数据块,判断数据来源,如果是第一个查询子节点的输入,转步骤S54,如果是第二个查询子节点的输入,转步骤S55;
步骤S54:执行节点编码过滤,过滤通过再进行结果匹配,如果有结果,共同未知数的结果为key,以“1_”加上余下的未知数结果为value,输出;
步骤S55:执行节点编码过滤,过滤通过再进行结果匹配,如果有结果,共同未知数的结果为key,以“2_”加上余下的未知数结果为value,输出;
步骤S56:获取当前数据块,判断数据来源,如果是上一次任务获得的组合节点的输入,转步骤S57,如果是新的查询子节点的输入,转步骤S58;
步骤S57:获取数据,以共同未知数的结果为key,以”1_”加上余下的未知数结果为value,输出;
步骤S58:执行节点编码过滤,过滤通过再进行结果匹配,如果有结果,共同未知数的结果为key,以”2_”加上余下的未知数结果为value,输出。
进一步地,所述的步骤S6中的Reduce函数处理过程包括以下步骤:
步骤S61:判断参与查询子图类型,若为单查询子图则进入步骤S62;若为两个查询子图则进入步骤S63;
步骤S62:Reduce函数不需要结果连接,将结果逐一输入;
步骤S63:Reduce函数在job启动前先获取两个子查询的未知数组合,再得到两个子查询的共同未知数;
步骤S64:获取每个key的迭代对象,开启两个容器,将以”1_”开头的数据放入第一个容器,以”2_”开头的数据放入第二个容器;
步骤S65:迭代完毕后判断两个容器是否都有值,如果其中一个没有值,则当前的key没有连接结果,如果两个容器都有值,则对两个容器的对象进行join,取key加上”1_”后面的数据再加上”2_”后面的数据作为value,将新的未知数组合结果作为key输出。
与现有技术相比,本发明具有以下3个突出优点:
1、减少了查询任务数。
2、减少中间结果数量。
3、减少数据冗余。
附图说明
图1为本发明的步骤流程图。
图2为本发明的RDF数据图。
图3为本发明的RDF数据图中的星型结构图。
图4为本发明的星型节点存放方式。
图5为本发明的星型节点索引编码图。
图6为本发明的星型节点节点编码图。
图7为本发明的查询分解图。
图8为本发明的SIHQ Q8查询连接计划图。
具体实施方式
下面结合附图及实施例对本发明做进一步说明
本实施例提供了一种结合星型图编码的RDF数据存储与查询方法,如图1所示,包括以下步骤:
步骤S1:对RDF数据进行预处理,将所述RDF数据以RDF数据图方式呈现;所述的预处理包括一星形数据分割阶段和一星形图编码阶段;
步骤S2:将输入的SPARQL查询语句以SPARQL查询图方式呈现,进行查询分解,解析成星型节点,形成查询子图G;
步骤S3:对所述SPARQL查询语句进行预处理,得到整个查询的任务数、查询星型子节点的连接顺序以及查询星型子节点的相关信息;所述的查询星型子节点的相关信息包括主语类型、查询变量、连接变量、索引编码和节点编码;通过主语类型将查询星型节点的查询范围定位到主语类型所在的文件夹下,再由索引编码可以得到具体的输入文件;
步骤S4:执行所述SPARQL查询语句并进行查询连接计划,采用Hadoop的MapReduce并行运算框架,根据所述SPARQL查询语句的关联性决定查询任务Job的启动次数;
步骤S5:进行子图查询,采用Map函数,包括两个过程:首先利用步骤S3计算好的索引编码和过滤策略1,得到关于查询连接任务Q的候选文件;其次结合分布式框架,根据节点编码和过滤策略2,对输入文件中的星型节点做快速的过滤和精确验证,最后得到每个查询子图任务的查询结果;
步骤S6:进行结果连接算法,采用Reduce函数。
在本实施例中,所述步骤S1中的星形数据分割阶段包括以下步骤:
步骤S11:定义所述的RDF数据图为一个三元组(V,E,L),其中,V为顶点集合,E为边的集合,L为标签集合,且L=Lv∪Lp,Lv为顶点的标签集合,Lp为边的标签集合;其中V对应三元组中的s和o,E对应p;即RDF数据图G是以s和o为顶点、p为边,并且顶点和边上都带有标签的图;图2展示了一张RDF数据图,在RDF数据图中存在一种星型结构,如图3所示,一张RDF数据图可以分解成多个星型结构。图2和图3均隐藏了边标签。
步骤S12:将所述的RDF数据图分解成多个星型结构;所述星型结构由多个RDF三元组共同组成,每个三元组的主语相同,将构成所述星型结构的多个三元组数据表示成一个节点,形成一星型节点;
步骤S13:假设每个星型节点存储的第一行为星型的中心点,即主语,只存储一次;之后的每一行为三元组中的谓语和宾语,用逗号连接,每个星型节点以END结束;
步骤S14:所述星型节点按照主语的Type划分,对每个Type类型创建一个以Type取值命名的文件夹,将Type相同的星型节点放在同一文件夹下存储,同时在存储星型节点内容时去除谓语为Type的三元组。星型节点的存放方式如图4所示。
在本实施例中,每一个星型节点的星型图编码包括两个:索引编码和节点编码。其中索引编码在启动分布式查询之前使用,起到对数据文件进行粗粒度的过滤,缩小查询范围的作用;节点编码在分布式查询中使用,起到快速过滤不满足查询条件的星型节点,执行精确查询的作用。
对于星型子图G,有中心节点s,把节点s所指向的节点o和边标签p表示为一个对<p,o>,例如图4所示的节点有六个对,根据这些节点对,可对节点进行编码。所述步骤S1中的星形图编码阶段包括索引编码和节点编码,具体包括以下步骤:
步骤S21:定义哈希映射,给定一个字符串S,S在哈希函数的作用下得到数值x,x对M取模,得到数值y,定义一个长度为M的计数串,将y位上的字符置1,其他置0,得到映射串Sig(S);即
Sig=a1a2a3…ai…aM,ai=0,i=1,2,3,…M
y=HashFunc(S)Mod(M)
令ay=1后得到Sig即为Sig(S);
步骤S22:定义索引编码并进行参数设置:给定一个星型图和图中的一个节点s,对s的边沿节点即宾语o信息进行编码,表示为ISig(s.o);将ISig(s.o)相同的星型节点放入同一个以该编码命名的文件,以文件名为索引;针对每个元组<p,o>中的o进行编码:首先确定一个长度M,按照哈希映射的定义将o映射到一个0-1字符串,然后利用比特位上的“或”操作来得到ISig(s.o)的值;ISig(s.o)的计算过程如图5所示。根据每个节点求出的ISig(s.o),将ISig(s.o)相同的星型节点放入同一个文件中;若部分查询条件的宾语o已知时,根据o再次缩小输入文件的范围;其中M值的大小应不大于log2(x/64),x为一S.Type文件夹下的数据总量xMB;
由于索引编码所得的数值空间是M位的0/1字符串,因此S.Type文件夹下得到文件个数是小于等于2M个,为了避免分出的文件过多,文件大小过小,要合理选择M的大小。在Hadoop平台上,HDFS的一个数据块大小默认是64MB,假设某一S.Type下的数据总量是xMB,M值的大小应约不大于log2(x/64)。
步骤S23:定义节点编码并进行参数设置,给定一个星型图和图中的一个节点s,对s中的谓语p和宾语o信息进行编码,表示为NSig(s);NSig(s)的结果为<L,N>,其中L是长度为x的计数串,用以表示点的边的标签信息,即p信息;N是长度为y的计数串,用以表示中心节点的邻居节点的标签信息,即o信息;图6中描述了如何得到节点s的节点编码NSig(s)。首先确定L和N的长度值,然后将p的标签信息编码到节点编码的L部分,即NSig(s).p;将连接点的标签信息编码到节点编码的N部分,即NSig(s).o,其次,对于每个星型节点,将得到多个NSig(s).p、NSig(s).o对,再利用比特位上的“加”操作得到NSig(s)的值;其中L和N分别表示星型节点的<p,o>标签信息,每个不同的标签,使用哈希定义将计数串x个元素中m个位置为1;以图4所示的节点为例,该节点标签为0010011000200100,0211011000000000,NSig(s)的计算过程如图6所示。
对于节点编码的两部分L和N,为了平衡空间代价和节点过滤的能力,需要选择合适的L和N的长度。根据阈值理论公式(1)得出L和N的长度值,
其中X为某个计数串的长度,m为计数串中1的个数,|Q|为查询图中节点的个数,|G|为数据图中节点个数。
较佳地,在SPARQL查询算法中,用户输入的SPARQL查询语句也解析成星型节点,形成查询子图;接着针对查询子图进行哈希编码映射,得到查询子图的索引编码和节点编码;根据索引编码对查询job的输入文件进行过滤,减少MapReduce的输入范围,从而节省数据遍历时间;在分布式查询过程中,根据节点编码快速并精确判断查询结果是否在某个星型节点内,从而减少不必要的匹配时间。
进一步地,一个RDF图可以分解成多个星型子图,同理SPARQL查询图也可以分解成多个查询星型子图。如数据集中的Q8,可以将查询语句转化成一个查询图,如图7(a)所示,将查询图分解成星型查询子图7(b)和图7(c)。
在本实施例中,在MapReduce任务启动前,需要对查询语句进行预处理,所述步骤S3中对查询语句进行预处理的具体包括以下步骤:
步骤S31:采用Jena对SPARQL语句进行解析,得到每个三元组;
步骤S32:对三元组进行扩展,若所述三元组中的谓语是rdf:type,则需得到宾语的所有子类;
步骤S33:将主语相同的三元组组合成查询星型节点,在查询星型节点中,若有谓语是rdf:type的三元组,则可以得到查询星型节点的主语类型;若无,则要根据查询星型节点中的其他谓语,从本体文件中得到谓语的定义域,所有谓语的定义域的交集即为查询星型节点的主语类型;
步骤S34:若一个查询星型节点N1只有一个三元组,谓语为rdf:type,且查询星型节点的主语是其他查询星型节点中某个三元组(triplePattern1)的宾语,并且根据所述triplePattern1的谓语求得的值域与N1的主语类型一致或为其子类,则N1可去掉;
在本实施例中,所述步骤S4中的查询连接计划具体为:在第一个查询任务中,选择有关联的两个查询星型节点进行查询连接,输入为根据两个查询星型节点索引编码过滤后的输入文件,查询结果输出到文件系统;其次查询任务在未参与查询的查询星型节点中任选一个与上一次任务得到的新组合节点有关联的查询星型节点进行查询连接,以此类推,直到没有未查询的查询星型节点为止;查询的输入为上一次任务的输出文件和新查询节点的过滤文件;如果整个查询语句只有一个星型节点,则只需开启一个查询任务。图8为Q8的查询连接计划,其中node1为图7(b)所示的星型节点,node2为图7(c)所示的星型节点,整个SPARQL查询只需要开启1个查询Job。
其中,查询预处理的整体算法如下所示:
输入:一个SPARQL查询。
输出:SPRQL查询的任务以及任务的相关信息。
步骤1:对查询语句进行解析获取所有的三元组。
步骤2:对三元组进行扩展、绑定、过滤后得到需要查询的所有查询星型子节点。
步骤3:如果查询星型子节点只有一个,则创建一个查询job,转步骤7。
步骤4:如果未查询的查询星型子节点数为0,转步骤7,否则转步骤5。
步骤5:如果是第一个任务,随机获取两个有共同未知数的查询星型子节点,创建一个查询连接job,放入jobs容器里,未查询星型子节点去掉这两个节点。
步骤6:如果不是第一个任务,将上一次任务后得到的组合节点以及与组合节点有共同未知数的新的查询子节点,创建一个查询连接job,放入jobs容器里,未查询星型子节点去掉这个新的查询子节点。转步骤4。
步骤7:返回,退出。
特别的,本实施例中用到定理1:如果查询星型子图Q在星型图G中有结果,对于图Q中的任一非未知节点v,总能在G中找到一个节点v’。
本实施例还用到引理1:假定查询星型子图Q在文件F中有结果,图Q的索引编码是ISig(Q)=<q1,q2,…,qn>,文件F的索引编码是ISig(F)=<f1,f2,…,fn>,其中n=|ISig(Q)|为ISig(Q)的长度,则两个索引编码满足如下关系:
i=1,2,…,n,则ISig(Q)≤ISig(F)
本实施例中用到引理2:假定查询星型子图Q在星型图G中有结果,图Q的节点编码是NSig(Q)=<Lq,Nq>=<Lq1,Lq2,…,Lqn,Nq1,Nq2,…,Nqm>,图G的节点编码NSig(G)=<Lg,Ng>=<Lg1,Lg2,…,Lgn,Ng1,Ng2,…,Ngm>,其中n=|Lq|,m=|Nq|,则两个节点编码满足如下关系:
i=1,2,…,n,j=1,2,…,m,且Nqj≤gj,则NSig(Q)≤Sig(G)
由引理1和引理2可以得到以下子图查询的过滤策略。
在本实施例中,所述的步骤S5中的过滤策略1为:给定查询子图的索引标签q.ISig(s.o)对输入文件进行过滤,若q.ISig(s.o)≤filename,则将filename加入到输入候选集中。
在本实施例中,所述的步骤S5中的过滤策略2为:给定查询子图的节点标签q.NSig(s),对查询文件中的节点编码为NSig(Vi),若q.NSig(s)≤NSig(Vi),则将此节点保留进行详细验证,否则直接跳过此节点。
在本实施例中,Map函数需要判断参与查询的查询子节点个数以及查询子节点的类型,根据不同的情况处理。在job任务开启前需要根据查询语句判段查询子图的个数,同时需要将查询子图的信息设置为全局参数。所述的步骤S5中的Map函数处理过程包括以下步骤:
步骤S51:判断查询任务类型,如果是单个查询子节点转步骤S52,如果是两个新查询子节点,转步骤S53,如果一个是上一次任务获得的节点一个是新查询子节点,转步骤S56;
步骤S52:获取当前数据块,执行节点编码过滤,若过滤通过则进行结果匹配,有结果则输出,key=查询的未知数集合如X&Y1&Z,value=查询子句的结果值,与key相匹配,value=查询子句的结果值,与key相匹配,如xresulut&y1result&zresult;
步骤S53:获取当前数据块,判断数据来源,如果是第一个查询子节点的输入,转步骤S54,如果是第二个查询子节点的输入,转步骤S55;
步骤S54:执行节点编码过滤,过滤通过再进行结果匹配,如果有结果,共同未知数的结果为key,以“1_”加上余下的未知数结果为value,输出;
步骤S55:执行节点编码过滤,过滤通过再进行结果匹配,如果有结果,共同未知数的结果为key,以“2_”加上余下的未知数结果为value,输出;
步骤S56:获取当前数据块,判断数据来源,如果是上一次任务获得的组合节点的输入,转步骤S57,如果是新的查询子节点的输入,转步骤S58;
步骤S57:获取数据,以共同未知数的结果为key,以”1_”加上余下的未知数结果为value,输出;
步骤S58:执行节点编码过滤,过滤通过再进行结果匹配,如果有结果,共同未知数的结果为key,以”2_”加上余下的未知数结果为value,输出。
其中,算法中提到共同未知数的结果和余下的未知数结果是指如果Map当前得到的结果数据是a1&b1&c1,判断是来自文件1,共同未知数是结果中的第一个和第三个,则以a1&c1为key,”1_b1”为value,如果判断是来着文件2,共同未知数是结果中的第一个和第二个,则以a1&b1为key,”2_c1”为value。
在本实施例中,本实施例的结果连接算法是在Reduce阶段进行,生成的结果是以查询语句中未知数的组合为文件名,未知数间用&连接,如X&Y&Z,每条结果为一行,不同未知数的结果存放位置与文件名相同,如a&b&c,其中a是X的查询结果,b是Y的查询结果,c是Z的查询结果。所述的步骤S6中的Reduce函数处理过程包括以下步骤:
步骤S61:判断参与查询子图类型,若为单查询子图则进入步骤S62;若为两个查询子图则进入步骤S63;
步骤S62:Reduce函数不需要结果连接,将结果逐一输入;
步骤S63:Reduce函数在job启动前先获取两个子查询的未知数组合,再得到两个子查询的共同未知数;例如子图1是X&Y1&Z,子图2是X&Z&Y2,那么共同的未知数就是X&Z,得到新的组合结果是X&Z&Y1&Y2。
步骤S64:获取每个key的迭代对象,开启两个容器,将以”1_”开头的数据放入第一个容器,以”2_”开头的数据放入第二个容器;
步骤S65:迭代完毕后判断两个容器是否都有值,如果其中一个没有值,则当前的key没有连接结果,如果两个容器都有值,则对两个容器的对象进行join,取key加上”1_”后面的数据再加上”2_”后面的数据作为value,将新的未知数组合结果作为key输出。
以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。
Claims (9)
1.结合星型图编码的RDF数据存储与查询方法,其特征在于:
步骤S1:对RDF数据进行预处理,将所述RDF数据以RDF数据图方式呈现;所述的预处理包括一星形数据分割阶段和一星形图编码阶段;
步骤S2:将输入的SPARQL查询语句以SPARQL查询图方式呈现,进行查询分解,解析成星型节点,形成查询子图G;
步骤S3:对所述SPARQL查询语句进行预处理,得到整个查询的任务数、查询星型子节点的连接顺序以及查询星型子节点的相关信息;所述的查询星型子节点的相关信息包括主语类型、查询变量、连接变量、索引编码和节点编码;通过主语类型将查询星型节点的查询范围定位到主语类型所在的文件夹下,再由索引编码可以得到具体的输入文件;
步骤S4:执行所述SPARQL查询语句并进行查询连接计划,采用Hadoop的MapReduce并行运算框架,根据所述SPARQL查询语句的关联性决定查询任务Job的启动次数;
步骤S5:进行子图查询,采用Map函数,包括两个过程:首先利用步骤S3计算好的索引编码和过滤策略1,得到关于查询连接任务Q的候选文件;其次结合分布式框架,根据节点编码和过滤策略2,对输入文件中的星型节点做快速的过滤和精确验证,最后得到每个查询子图任务的查询结果;
步骤S6:进行结果连接算法,采用Reduce函数。
2.根据权利要求1所述的结合星型图编码的RDF数据存储与查询方法,其特征在于:所述步骤S1中的星形数据分割阶段包括以下步骤:
步骤S11:定义所述的RDF数据图为一个三元组(V,E,L),其中,V为顶点集 合,E为边的集合,L为标签集合,且L=Lv∪Lp,Lv为顶点的标签集合,Lp为边的标签集合;其中V对应三元组中的s和o,E对应p;即RDF数据图G是以s和o为顶点、p为边,并且顶点和边上都带有标签的图;
步骤S12:将所述的RDF数据图分解成多个星型结构;所述星型结构由多个RDF三元组共同组成,每个三元组的主语相同,将构成所述星型结构的多个三元组数据表示成一个节点,形成一星型节点;
步骤S13:假设每个星型节点存储的第一行为星型的中心点,即主语,只存储一次;之后的每一行为三元组中的谓语和宾语,用逗号连接,每个星型节点以END结束;
步骤S14:所述星型节点按照主语的Type划分,对每个Type类型创建一个以Type取值命名的文件夹,将Type相同的星型节点放在同一文件夹下存储,同时在存储星型节点内容时去除谓语为Type的三元组。
3.根据权利要求1所述的结合星型图编码的RDF数据存储与查询方法,其特征在于:所述步骤S1中的星形图编码阶段包括索引编码和节点编码,具体包括以下步骤:
步骤S21:定义哈希映射,给定一个字符串S,S在哈希函数的作用下得到数值x,x对M取模,得到数值y,定义一个长度为M的计数串,将y位上的字符置1,其他置0,得到映射串Sig(S);即
Sig=a1a2a3…ai…aM,ai=0,i=1,2,3,…M
y=HashFunc(S)Mod(M)
令ay=1后得到Sig即为Sig(S);
步骤S22:定义索引编码并进行参数设置:给定一个星型图和图中的一个节点s,对s的边沿节点即宾语o信息进行编码,表示为ISig(s.o);将ISig(s.o)相同的星型节点放入同一个以该编码命名的文件,以文件名为索引;针对每个元组<p,o>中的o进行编码:首先确定一个长度M,按照哈希映射的定义将o映射到一个0/1字符串,然后利用比特位上的“或”操作来得到ISig(s.o)的值;根据每个节点求出的ISig(s.o),将ISig(s.o)相同的星型节点放入同一个文件中;若部分查询条件的宾语o已知时,根据o再次缩小输入文件的范围;其中M值的大小应不大于log2(x/64),x为一S.Type文件夹下的数据总量xMB;
步骤S23:定义节点编码并进行参数设置,给定一个星型图和图中的一个节点s,对s中的谓语p和宾语o信息进行编码,表示为NSig(s);NSig(s)的结果为<L,N>,其中L是长度为x的计数串,用以表示点的边的标签信息,即p信息;N是长度为y的计数串,用以表示中心节点的邻居节点的标签信息,即o信息;首先确定L和N的长度值,然后将p的标签信息编码到节点编码的L部分,即NSig(s).p;将连接点的标签信息编码到节点编码的N部分,即NSig(s).o,其次,对于每个星型节点,将得到多个NSig(s).p、NSig(s).o对,再利用比特位上的“加”操作得到NSig(s)的值;其中L和N分别表示星型节点的<p,o>标签信息,每个不同的标签,使用哈希定义将计数串x个元素中m个位置为1;根据阈值理论公式(1)得出L和N的长度值,
其中X为某个计数串的长度,m为计数串中1的个数,|Q|为查询图中节点的 个数,|G|为数据图中节点个数。
4.根据权利要求1所述的结合星型图编码的RDF数据存储与查询方法,其特征在于:所述步骤S3中对查询语句进行预处理的具体包括以下步骤:
步骤S31:采用Jena对SPARQL语句进行解析,得到每个三元组;
步骤S32:对三元组进行扩展,若所述三元组中的谓语是rdf:type,则需得到宾语的所有子类;
步骤S33:将主语相同的三元组组合成查询星型节点,在查询星型节点中,若有谓语是rdf:type的三元组,则可以得到查询星型节点的主语类型;若无,则要根据查询星型节点中的其他谓语,从本体文件中得到谓语的定义域,所有谓语的定义域的交集即为查询星型节点的主语类型;
步骤S34:若一个查询星型节点N1只有一个三元组,谓语为rdf:type,且查询星型节点的主语是其他查询星型节点中某个三元组triplePattern1的宾语,并且根据所述triplePattern1的谓语求得的值域与N1的主语类型一致或为其子类,则N1可去掉。
5.根据权利要求1所述的结合星型图编码的RDF数据存储与查询方法,其特征在于:所述步骤S4中的查询连接计划具体为:在第一个查询任务中,选择有关联的两个查询星型节点进行查询连接,输入为根据两个查询星型节点索引编码过滤后的输入文件,查询结果输出到文件系统;其次查询任务在未参与查询的查询星型节点中任选一个与上一次任务得到的新组合节点有关联的查询星型节点进行查询连接,以此类推,直到没有未查询的查询星型节点为止;查询的输入为上一次任务的输出文件和新查询节点的过滤文件;如果整个查询语句只有一个星型 节点,则只需开启一个查询任务。
6.根据权利要求1所述的结合星型图编码的RDF数据存储与查询方法,其特征在于:所述的步骤S5中的过滤策略1为:给定查询子图的索引标签q.ISig(s.o)对输入文件进行过滤,若q.ISig(s.o)≤filename,则将filename加入到输入候选集中。
7.根据权利要求1所述的结合星型图编码的RDF数据存储与查询方法,其特征在于:所述的步骤S5中的过滤策略2为:给定查询子图的节点标签q.NSig(s),对查询文件中的节点编码为NSig(Vi),若q.NSig(s)≤NSig(Vi),则将此节点保留进行详细验证,否则直接跳过此节点。
8.根据权利要求1所述的结合星型图编码的RDF数据存储与查询方法,其特征在于:所述的步骤S5中的Map函数处理过程包括以下步骤:
步骤S51:判断查询任务类型,如果是单个查询子节点转步骤S52,如果是两个新查询子节点,转步骤S53,如果一个是上一次任务获得的节点一个是新查询子节点,转步骤S56;
步骤S52:获取当前数据块,执行节点编码过滤,若过滤通过则进行结果匹配,有结果则输出,key=查询的未知数集合,value=查询子句的结果值,与key相匹配;
步骤S53:获取当前数据块,判断数据来源,如果是第一个查询子节点的输入,转步骤S54,如果是第二个查询子节点的输入,转步骤S55;
步骤S54:执行节点编码过滤,过滤通过再进行结果匹配,如果有结果,共 同未知数的结果为key,以”1_”加上余下的未知数结果为value,输出;
步骤S55:执行节点编码过滤,过滤通过再进行结果匹配,如果有结果,共同未知数的结果为key,以”2_”加上余下的未知数结果为value,输出;
步骤S56:获取当前数据块,判断数据来源,如果是上一次任务获得的组合节点的输入,转步骤S57,如果是新的查询子节点的输入,转步骤S58;
步骤S57:获取数据,以共同未知数的结果为key,以”1_”加上余下的未知数结果为value,输出;
步骤S58:执行节点编码过滤,过滤通过再进行结果匹配,如果有结果,共同未知数的结果为key,以”2_”加上余下的未知数结果为value,输出。
9.根据权利要求1所述的结合星型图编码的RDF数据存储与查询方法,其特征在于:所述的步骤S6中的Reduce函数处理过程包括以下步骤:
步骤S61:判断参与查询子图类型,若为单查询子图则进入步骤S62;若为两个查询子图则进入步骤S63;
步骤S62:Reduce函数不需要结果连接,将结果逐一输入;
步骤S63:Reduce函数在job启动前先获取两个子查询的未知数组合,再得到两个子查询的共同未知数;
步骤S64:获取每个key的迭代对象,开启两个容器,将以”1_”开头的数据放入第一个容器,以”2_”开头的数据放入第二个容器;
步骤S65:迭代完毕后判断两个容器是否都有值,如果其中一个没有值,则当前的key没有连接结果,如果两个容器都有值,则对两个容器的对象进行join, 取key加上”1_”后面的数据再加上”2_”后面的数据作为value,将新的未知数组合结果作为key输出。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510003231.2A CN104462609B (zh) | 2015-01-06 | 2015-01-06 | 结合星型图编码的rdf数据存储与查询方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510003231.2A CN104462609B (zh) | 2015-01-06 | 2015-01-06 | 结合星型图编码的rdf数据存储与查询方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104462609A CN104462609A (zh) | 2015-03-25 |
CN104462609B true CN104462609B (zh) | 2017-09-15 |
Family
ID=52908644
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510003231.2A Expired - Fee Related CN104462609B (zh) | 2015-01-06 | 2015-01-06 | 结合星型图编码的rdf数据存储与查询方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104462609B (zh) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104809168B (zh) * | 2015-04-06 | 2017-12-29 | 华中科技大学 | 超大规模rdf图数据的划分与并行分布处理方法 |
CN104834754A (zh) * | 2015-05-29 | 2015-08-12 | 武汉大学 | 一种基于连接代价的sparql语义数据查询优化方法 |
CN106611013A (zh) * | 2015-10-27 | 2017-05-03 | 中国电信股份有限公司 | 信息查询方法及系统 |
CN105630881B (zh) * | 2015-12-18 | 2019-04-09 | 陕西师范大学 | 一种rdf的数据存储方法和查询方法 |
CN106933844B (zh) * | 2015-12-30 | 2020-06-05 | 中国科学院深圳先进技术研究院 | 面向大规模rdf数据的可达性查询索引的构建方法 |
CN105930419B (zh) * | 2016-04-19 | 2019-08-09 | 福州大学 | Rdf数据分布式并行语义编码方法 |
CN106528648B (zh) * | 2016-10-14 | 2019-10-15 | 福州大学 | 结合Redis内存数据库的分布式RDF关键词近似搜索方法 |
CN106528687B (zh) * | 2016-10-25 | 2019-07-16 | 厦门亿力吉奥信息科技有限公司 | 一种列族覆盖存储的sparql查询优化方法 |
CN107193882B (zh) * | 2017-04-27 | 2020-11-20 | 东南大学 | RDF数据上基于图匹配的why-not查询回答方法 |
CN107291807B (zh) * | 2017-05-16 | 2020-10-16 | 中国科学院计算机网络信息中心 | 一种基于图遍历的sparql查询优化方法 |
CN108520035A (zh) * | 2018-03-29 | 2018-09-11 | 天津大学 | 基于星形分解的sparql基本图模式查询处理方法 |
CN109344259B (zh) * | 2018-07-20 | 2022-02-22 | 西安交通大学 | 一种基于多层划分框架的rdf分布式存储方法 |
CN109325029A (zh) * | 2018-08-30 | 2019-02-12 | 天津大学 | 基于稀疏矩阵的rdf数据存储和查询方法 |
CN110990426B (zh) * | 2019-12-05 | 2022-10-14 | 桂林电子科技大学 | 一种基于树搜索的rdf查询方法 |
CN114356977B (zh) * | 2022-03-16 | 2023-02-10 | 湖南大学 | 分布式rdf图查询方法、装置、设备及存储介质 |
CN115422233B (zh) * | 2022-11-03 | 2023-02-24 | 中国地质大学(武汉) | 一种复杂空间rdf查询并行处理方法及装置 |
CN116304213B (zh) * | 2023-03-20 | 2024-03-19 | 中国地质大学(武汉) | 基于图神经网络的rdf图数据库子图匹配查询优化方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103116625A (zh) * | 2013-01-31 | 2013-05-22 | 重庆大学 | 一种基于Hadoop的海量RDF数据分布式查询处理方法 |
CN103617276A (zh) * | 2013-12-09 | 2014-03-05 | 南京大学 | 一种分布式层次化的rdf数据的存储方法 |
CN103778251A (zh) * | 2014-02-19 | 2014-05-07 | 天津大学 | 面向大规模rdf图数据的sparql并行查询方法 |
-
2015
- 2015-01-06 CN CN201510003231.2A patent/CN104462609B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103116625A (zh) * | 2013-01-31 | 2013-05-22 | 重庆大学 | 一种基于Hadoop的海量RDF数据分布式查询处理方法 |
CN103617276A (zh) * | 2013-12-09 | 2014-03-05 | 南京大学 | 一种分布式层次化的rdf数据的存储方法 |
CN103778251A (zh) * | 2014-02-19 | 2014-05-07 | 天津大学 | 面向大规模rdf图数据的sparql并行查询方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104462609A (zh) | 2015-03-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104462609B (zh) | 结合星型图编码的rdf数据存储与查询方法 | |
Malkov et al. | Efficient and robust approximate nearest neighbor search using hierarchical navigable small world graphs | |
Sanders et al. | Think locally, act globally: Highly balanced graph partitioning | |
US9223828B2 (en) | Data flow graph optimization using adaptive rule chaining | |
US9870382B2 (en) | Data encoding and corresponding data structure | |
CN104866502B (zh) | 数据匹配的方法及装置 | |
CN109146447A (zh) | 区块链透明分片方法、装置及系统 | |
WO2011032077A2 (en) | System and method for data management in large data networks | |
WO2009031915A1 (fr) | Système et procédés de stockage, de recherche et d'extraction des informations sur la base d'ensembles de données faiblement organisés et décentralisés | |
CN105468702A (zh) | 一种大规模rdf数据关联路径发现方法 | |
CN102693310A (zh) | 一种基于关系数据库的资源描述框架查询方法和系统 | |
CN103116625A (zh) | 一种基于Hadoop的海量RDF数据分布式查询处理方法 | |
CN105005606A (zh) | 基于MapReduce的XML数据查询方法和系统 | |
CN105204920B (zh) | 一种基于映射聚合的分布式计算作业的实现方法及装置 | |
CN104392010A (zh) | 一种子图匹配的查询方法 | |
CN110727760B (zh) | 一种对大规模知识图谱进行分布式正则路径查询的方法 | |
CN108388642A (zh) | 一种子图查询方法、装置及计算机可读存储介质 | |
CN112131356B (zh) | 一种基于tcam的报文关键字匹配方法和装置 | |
CN106874425A (zh) | 基于Storm的实时关键词近似搜索算法 | |
CN108108466A (zh) | 一种分布式系统日志查询分析方法及装置 | |
Biehl et al. | Algorithms for guided tree automata | |
CN105550332A (zh) | 一种基于双层索引结构的起源图查询方法 | |
CN101500012B (zh) | 一种报文分类方法和系统 | |
Barnhart et al. | Integer multicommodity flow problems | |
US20190087445A1 (en) | Method of facilitating distributed data search in a federated cloud and system thereof |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20170915 Termination date: 20200106 |
|
CF01 | Termination of patent right due to non-payment of annual fee |