CN105005606A - 基于MapReduce的XML数据查询方法和系统 - Google Patents
基于MapReduce的XML数据查询方法和系统 Download PDFInfo
- Publication number
- CN105005606A CN105005606A CN201510391100.6A CN201510391100A CN105005606A CN 105005606 A CN105005606 A CN 105005606A CN 201510391100 A CN201510391100 A CN 201510391100A CN 105005606 A CN105005606 A CN 105005606A
- Authority
- CN
- China
- Prior art keywords
- node
- path
- query
- data
- cost
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 100
- 238000012545 processing Methods 0.000 claims abstract description 10
- 230000008569 process Effects 0.000 claims description 58
- 108091026890 Coding region Proteins 0.000 claims description 9
- 230000005540 biological transmission Effects 0.000 claims description 7
- 238000004891 communication Methods 0.000 claims description 6
- 238000013480 data collection Methods 0.000 claims description 5
- 239000000203 mixture Substances 0.000 claims description 5
- 239000003638 chemical reducing agent Substances 0.000 claims description 4
- 238000010845 search algorithm Methods 0.000 claims description 4
- 239000007795 chemical reaction product Substances 0.000 claims description 3
- 239000000284 extract Substances 0.000 claims description 3
- 101150036841 minJ gene Proteins 0.000 claims description 3
- 238000004321 preservation Methods 0.000 claims description 3
- 239000013589 supplement Substances 0.000 claims description 3
- 230000008901 benefit Effects 0.000 abstract description 7
- 230000006870 function Effects 0.000 description 10
- 230000000875 corresponding effect Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 5
- 238000004590 computer program Methods 0.000 description 4
- 238000005457 optimization Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 239000002360 explosive Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 238000013316 zoning Methods 0.000 description 1
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/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/951—Indexing; Web crawling techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/33—Querying
- G06F16/3331—Query processing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于MapReduce的XML数据查询方法和系统,步骤:服务器接收客户端的XPath查询请求;查看待查询XML文档是否已进行区间编码;对未经过区间编码的待查询XML文档进行区间编码;服务器查看待查询XML文档是否已进行层次编码;对未经过层次编码的待查询XML文档进行层次编码;将查询请求中的查询语句进行解析;生成查询计划树,对结构连接结果进行估算;建立代价模型,对查询计划树的执行代价估算;找出最优查询计划树;求出的最优查询计划树,解析出MapReduce作业的输入文件;执行MapReduce查询作业;将MapReduce作业输出文件构造成XML数据结果集作为查询结果;将XML数据查询结果返回给客户端。该方法具有执行效率较高、加速比高、查询处理性能好和可伸缩性的优点。
Description
技术领域
本发明涉及XML(Extensible Markup Language,可扩展标记语言)查询处理领域,特别涉及一种基于MapReduce的XML数据查询方法和系统。
背景技术
XML是一种可扩展标记语言,用来标记数据,定义数据类型,传输和存储数据。其中的标记(markup)是关键部分,可以创建内容,然后使用限定标记标记它,从而使每个单词、短语或块成为可识别、可分类的信息。创建的文件,或文档实例由元素(标记)和内容构成。当从打印输出读取或以电子形式处理文档时,元素能够帮助更好地理解文档。元素的描述性越强,文档各部分越容易识别。自从出现标记至今,带有标记的内容就有一个优势,即在计算机系统缺失时,仍然可以通过标记理解打印出来数据。
XML目前在Web中起到的作用不亚于超文本标记语言(Hypertext MarkupLanguage,HTML),是应用程序之间进行传输数据的最常用工具。XML有着很多的优点,它的广泛使用使得XML数据量呈爆炸性趋势增长,在一台机子上处理大数据量的XML文档的速度已经不能满足人们的需求,传统的基于内存的查询方法的查询速度非常慢,而一些分布式的XML查询方法在每次查询都要对整个文档进行遍历。
作为开源的分布式计算框架的代表之一,Hadoop及其改进系统以其可靠性、高效性、高容错性和低成本等特点,成为云计算和大数据处理典型支撑框架,Hadoop框架通过HDFS技术和MapReduce技术能够实现海量数据的存储和分析,HDFS和MapReduce是Hadoop整个项目的基础和核心,Hadoop庞大的家族中的其他子项目都是基于HDFS和MapReduce技术的,因此基于Hadoop框架下MapReduce技术来研究XML查询处理十分必要。
发明内容
本发明的目的在于克服现有技术的缺点与不足,提供一种基于MapReduce的XML数据查询方法,该方法能够实现针对海量XML数据进行XPath查询,并为查询处理建立了代价模型,通过代价估算方法对查询计划进行优化,该方法具有执行效率较高、加速比高和可伸缩性的优点,有效的提高了XML数据查询处理的性能。
本发明的另一目的在于提供一种基于MapReduce的XML数据查询系统。
本发明的第一目的通过以下技术方案实现:一种基于MapReduce的XML数据查询方法,步骤如下:
步骤101、服务器接收客户端的XPath查询请求;
步骤102、服务器接收到XPath查询请求后,查看待查询XML文档是否已进行区间编码;
若否,则进入步骤103;
若是,则进入步骤104;
步骤103、对待查询XML文档进行区间编码,然后进入步骤104;
步骤104、服务器查看待查询XML文档是否已进行层次编码;
若否,则进入步骤105;
若是,则进入步骤106;
步骤105、对待查询XML文档进行层次编码,然后进入步骤106;
步骤106、服务器将XPath查询请求中的查询语句发送至Hadoop集群进行解析,提取出查询语句中出现的标签名、连接符号和谓词结构,并且作为解析结果保存到解析类中;
步骤107、逐步增加查询语句出现的连接结构生成查询计划树,对查询计划树的结构连接结果进行估算;
步骤108、对MapReduce作业建立代价模型,根据代价模型对查询计划树的执行代价估算;
步骤109、根据查询计划树的执行代价估算值,找出最优查询计划树;
步骤110、根据步骤109求出的最优查询计划树,解析出MapReduce作业的输入文件,然后启动MapReduce查询作业;
步骤111、执行MapReduce查询作业;
步骤112、将MapReduce作业输出文件构造成XML数据结果集作为查询结果,并且返回给服务器;
步骤113、服务器根据XML数据结果集将XML数据查询结果返回给客户端。
优选的,所述步骤103中,使用MapReduce对XML文档数据中XML树中的节点进行区间编码,具体过程如下:Hadoop框架将XML文档数据中XML树中的节点以键值对的方式输入给Map函数处理,Map函数的输入包括二种类型,其中一种值是开始标签,另一种值是结束标签;Map函数每获取一组键值对,根据Map算法进行处理;Map函数处理完所有输入后,在关闭输入前判断栈是否为空,不为空,则将栈中所有记录出栈,输出完所有键值对后将分块的偏移信息输出到HDFS上;Reducer则是通过Map阶段输出的分块偏移信息建立偏移表,根据偏移表对XML文档数据中XML树中的节点进行完整编码后输出;编码后的XML树中的节点信息按从小到大的顺序存储到Hadoop框架中HDFS上各个文件中;
XML文档进行区间编码后,XML树中的各节点的编码格式为:<start,end,level>,其中start是节点在整棵XML树中前序遍历序号,end为以该节点为根节点的子树中最大的start值,level为节点在树中的深度。
更进一步的,所述步骤105中,对XML文档数据中XML树中的节点进行层次编码的具体过程如下:首先,获取到进行层次编码的节点的父节点的层次编码信息和其他兄弟节点信息;其次,将区间编码后深度相同的节点放在一个文件中;然后,将节点按深度从小到大进行编码,每一层将使用一个作业完成;再者,当深度为1和2时,节点N(i,level)的编码按照层次编码规则赋值,通过串行执行实现层次编码;当深度大于2时,节点N(i,level)的编码按照层次编码规则赋值,通过启动MapReduce作业执行实现层次编码;
XML文档进行层次编码后XML树中的各节点的编码格式为:<Hid,nodeCount,level>,其中Hid为层次编码序列,nodeCount为相同层次编码序列的节点个数,level为节点在树中的深度。
更进一步的,MapReduce作业执行实现层次编码的具体过程如下:
Map阶段读取到节点的区间编码后找到其父亲节点,获取父亲节点的层次编码,将父亲节点的层次编码赋值给子节点,最后将子节点不完整的层次编码结果输出;
Shuffle阶段根据Map输出内容进行二次排序,层次编码相同的节点为一组,组内按区间编码的start值进行排序;
Reduce阶段根据层次编码的层次编码规则对节点的编码补充完整后输出。
更进一步的,所述步骤107中,查询计划树的结构连接结果进行估算包括对于父子连接操作的结果集估算和对于祖孙连接操作的结果集估算;
对于父子连接操作的结果集估算的过程如下:首先对一个集合B中的每一项节点b,遍历另一个集合A,查找另一个集合A中是否存在节点a与节点b满足父子关系,如果是,则停止查找,然后将集合B中满足父子关系的b添加到结果集R中,最后将结果集R中的每个节点层次编码信息中的nodeCount进行相加,得到的和即为两个集合A和B的结果集数目的预估值;
对于祖孙连接操作的结果集估算的过程如下:首先对一个集合B中的每一项节点b,遍历另一个集合A,查找另一个集合A中是否存在节点a与节点b满足祖孙关系,如果是,将集合B中满足祖孙关系的b添加到结果集R中,并且继续查找,直到遍历完集合A,最后将结果集R中的每个节点层次编码信息中的nodeCount进行相加,得到的和即为两个集合A和B的结果集数目的预估值;
其中判断两个节点a和b是否为父子关系的公式如下:
level(a)+1=level(b);
若上述等式成立,则表示节点a和b为父子关系,level(a)为节点a的深度,level(b)为节点b的深度;
其中判断两个节点a和b是否为祖孙关系的公式如下:
Hid(b)&(2encodinglength(Hid(a))-1)=Hid(a);
若上述等式成立,则节点a和b为祖孙关系;Hid(a)为节点a的层次编码序列,Hid(b)为节点b的层次编码序列,encodinglength(Hid(a))为节点a的编码长度。
更进一步的,所述步骤108中,对查询计划树的执行代价估算时考虑三个因素:I/O开销、CPU的开销和网络传输的开销;
步骤108中,对MapReduce作业建立代价模型过程中,包括对Map过程中的两种操作分别建立代价模型和对Shuffle和Reduce阶段建立代价模型;
Map过程中的两种操作分别为不进行连接操作的Map阶段和进行连接操作的Map阶段;
不进行连接操作的Map阶段建立的代价模型为:
RC=NUM(Ii)*SIZE*Crh;
PC=NUM(Ii)*Cm;
WC=NUM(Ii)*Cwl*SIZE;
其中RC为从HDFS上读取输入文件的代价,PC为数据集进行分区输出的CPU代价,WC为Map数据输出到本地文件的代价;其中NUM(Ii)表示的是数据集Ii的数目,SIZE为一个节点编码的数据大小,Cm为读取本地磁盘一个数据的代价,Cwl为写到本地磁盘上一个数据的代价;
路径Path(i,i)在不进行连接操作的Map阶段的代价CMi为:
进行连接操作的Map阶段的建立的代价模型为:
RAC=NUM(Ii-1)*SIZE*Crh;
PPC=R(Ii-1,Ii)*Cm;
WPC=R(Ii-1,Ii)*Cwl*2*SIZE;
其中RAC为在HDFS读取祖先节点数据集的代价,PPC对连接结果数据集进行分区输出的CPU代价,WPC为结果数据集输出节点到本地磁盘的代价;NUM(Ii-1)表示的是数据集Ii-1的数目;R(Ii-1,Ii)表示数据集Ii-1和数据集Ii连接结果数据集;
路径Path(j-1,j)在进行连接操作的Map阶段的代价CM(j-1,j)为:
Path(x1,x2)为指x1节点到x2节点组成的路径表达式,当x1=x2时,代表Path(x1,x2)为一个节点名称,当x1<x2时,路径Path(x1,x2)为长路径,当x1=x2-1时,Path(x1,x2)表示一个二元连接结构;Path(i,i)对应的节点数据集为Ii;Path(j-1,j)表示的是j-1节点到j节点组成的路径表达式;
Shuffle和Reduce阶段建立的代价模型为:
CR=Cshuffle(RI)+Crjoin(RI)+NUM(RO)*Cwh;
其中Cshuffle(RI)代表从Map获取输出文件到Reduce输入的整个shuffle过程的全部代价;Crjoin(RI)代表对Reduce端对集合RI进行连接的CPU代价;NUM(RO)*Cwh代表的是Reduce的输出代价;
一个查询的MapReduce作业的全部代价计算公式如下:
Cost(Job)=(∑CMi+∑CM(j-1,j))/K+CR;
Job表示一个MapReduce作业,∑CMi是查询计划树中Map阶段不进行连接操作的数据集的执行代价总和,∑CM(j-1,j)是查询计划树中Map阶段进行连接操作的数据集的执行代价总和;其中K=min(N,M),其中N为查询计划的Map任务数,M为集群最大的并行Map任务数。
更进一步的,所述步骤109中采用最佳优先搜索算法找到最优查询计划树,具体过程如下:
109-1、初始化优先队列Queue,用于保存状态节点并每次返回执行代价最低的状态节点,minCost用于表示查询语句的最低执行代价,初始化为双浮点最大值,minJ用于存储执行代价最低的完整查询路径;
109-2、初始化第一个状态节点J,J.Path=Path(1,1),根据路径表达式计算出各个变量的数据后存储,添加到Queue中;其中每个状态节点保存了三个变量,分别为路径表达式Path,路径表达式Path的执行代价Cost,路径表达式Path中最后一个参与连接操作结构的类型type,其中type有两种类型,分别为EN和LP,EN表示是元素节点名,LP表示是一个二元连接结构的长路径;J.Path表示状态节点J的路径表达式,J.type表示状态节点J路径表达式J.Path中最后一个参与连接操作结构的类型,J.Cost表示状态节点J路径表达式J.Path中最后一个参与连接操作结构的类型;
109-3、当Queue不为空时,返回队列中代价最低的状态节点J,根据状态节点J的路径表达式结构添加新的连接节点EN1,添加规则如下:
当J.type=EN时,生成两个新的状态节点J1和J2添加到队列Queue中,若J.Path的最后一个连接节点为EN',则:
新的状态节点J1的路径表达式J1.Path=J.Path+EN1,J.Path+EN1表示将连接节点EN1添加到路径表达式J.Path中,EN1的数据集不进行Map端连接操作;
新的状态节点J2的路径表达式J2.Path=J.Path-EN'+(EN'*EN1);J.Path-EN'表示将路径表达式J.Path中的最后一个连接节点EN'除去;EN'*EN1表示一个二元连接结构,EN'与EN1两个连接节点数据集在Map端进行连接操作;
当J.type=LP时,生成一个新的状态节点J1添加到队列Queue中:
新的状态节点J1的路径表达式J1.Path=J.Path+EN1;
新的状态节点根据路径表达式更新作业的执行代价,当新的状态节点的执行代价大于minCost且新的状态节点路径表达式中最后一个参与连接操作结构的类型为LP时,该状态节点则放弃掉;当新的状态节点路径表达式已经是完整的查询语句时,如果新的状态节点的执行代价小于minCost则更新minCost值,不是完整查询语句则继续将生成的状态节点添加进队列Queue中,得到最优的查询计划树;
所述步骤110中解析出MapReduce作业的输入文件的具体过程如下:根据最优的查询计划树找出作业的输入文件,包括Map端不进行连接的节点文件和Map端进行连接的组合中的子孙节点文件。
优选的,步骤111中执行MapReduce查询作业的具体过程如下:
步骤111-1、根据查询计划树设置MapReduce作业输入,启动查询作业;
步骤111-2、进入MAP阶段,如果需要进行谓词连接,则进行相应的条件过滤和连接判定;
步骤111-3、判断查询计划树中规定节点是否需要进行Map端的连接操作;若否,则进入步骤111-4;若是,则找出与规定节点进行连接的祖先节点集,进行连接判定,然后进入步骤111-4;
步骤111-4、将Map的输出结果根据节点的信息或节点对中子节点的信息进行分区再输出;
步骤111-5、进入Shuffle阶段,在Shuffle阶段对Map阶段的输出的中间结果集按照编码的大小规则从小到大排好序;
步骤111-6、进入Reduce阶段,对每一组输入数据进行连接后输出最终结果,即MapReduce作业后输出的最后结果;其中每读到一个节点数据,找出对应的祖先节点的栈,跟栈中节点进行连接判定,若判定成功且该数据不是最后要输出的数据,则压到对应的栈里,若判定成功且该数据为最后要输出的数据,则先判断区域地址是否为节点Map输出进行分区时地址最大的区域,若是,则作为最终结果输出,否则就抛弃。
更进一步的,所述步骤111-3中,进行连接判定的具体过程如下:
读取输入节点N,读取父亲节点NP,当节点N的start值N.start小于父亲节点NP的start值Np.start时,即N.start<Np.start时,则对节点N和父亲节点NP两者进行关系判定,其中当连接符号为/时,判断两者是否符合父子关系条件,当连接符号为//时,则判断两者是否符合父子关系条件,若两者符合父子关系或者祖孙关系条件,则将两个节点信息组成节点对,然后进入步骤111-4;若两者不符合关系条件,则继续查找,直到N.start>Np.start,则表明输入节点N不符合连接条件,则读取下一个输入节点,并从Np开始进行连接判定。
本发明的第二目的通过以下技术方案实现:一种用于实现上述XML数据查询方法的基于MapReduce的XML数据查询系统,包括客户端和服务器:
客户端,用于接收用户发出XML查询请求,并且将查询语句发送给服务器,接收查询结果显示;
服务器,用于接收客户端发出的查询请求,使用Hadoop集群的MapReduce进行查询后将查询到的结果返回给客户端;
所述客户端包括
界面展示模块,用于与终端用户进行交互,包括查询语句的输入以及查询结果的输出;
和数据通信模块:用于客户端与服务器之间的通信,与服务器进行连接;包括向服务器发送XML查询请求以及接收服务器发送的查询结果;
所述服务器包括
请求解析模块,用于解析客户端发送的XML查询请求;
和查询处理模块,用于将XML查询请求转化为Hadoop作业执行。
本发明相对于现有技术具有如下的优点及效果:
本发明方法基于MapReduce对海量XML数据进行XPath查询,本发明方法实现了对原始的XML文档进行编码,依据编码结果进行XPath查询整个流程。该方法相比传统的基于内存的查询方法来说具有明显的查询速度优势,相比其它分布式XML查询方法来讲,只要编码一次,便可以利用编码文件进行多次查询而不用每次查询都需要处理整个XML文档。本发明方法在查询处理过程中建立了代价模型,通过代价估算方法对查询计划进行优化,该方法具有执行效率较高、加速比高和可伸缩性的优点,同时提出的代价估算模型和优化方法有效的提高了XML数据查询处理的性能。
附图说明
图1是本发明实施例方法流程图。
图2是本发明实施例方法中查询语句的查询优化过程示意图。
图3是本发明实施例方法中执行MapReduce查询作业的过程示意图。
图4是本发明实施例方法中Reduce过程的示意图。
图5是本发明实施例方法中查询计划生成示意图。
图6是本发明实施例系统结构框图。
具体实施方式
下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。
实施例
如图1所示,本实施例公开了一种基于MapReduce的XML数据查询方法,其特征在于,步骤如下:
步骤101、服务器接收客户端的XPath查询请求;
步骤102、服务器接收到XPath查询请求后,查看待查询XML文档是否已进行区间编码;
若否,则进入步骤103;
若是,则进入步骤104;
步骤103、对待查询XML文档进行区间编码,然后进入步骤104;在本步骤中,使用MapReduce对XML文档数据中XML树中的节点进行区间编码,具体过程如下:Hadoop框架将XML文档数据中XML树中的节点以键值对的方式输入给Map函数处理,Map函数的输入包括二种类型,其中一种值是开始标签,另一种值是结束标签;Map函数每获取一组键值对,根据Map算法进行处理;Map函数处理完所有输入后,在关闭输入前判断栈是否为空,不为空,则将栈中所有记录出栈,输出完所有键值对后将分块的偏移信息输出到HDFS上;Reducer则是通过Map阶段输出的分块偏移信息建立偏移表,根据偏移表对XML文档数据中XML树中的节点进行完整编码后输出;编码后的XML树中的节点信息按从小到大的顺序存储到Hadoop框架中HDFS上各个文件中;
XML文档进行区间编码后,XML树中的各节点的编码格式为:<start,end,level>,其中start是节点在整棵XML树中前序遍历序号,end为以该节点为根节点的子树中最大的start值,level为节点在树中的深度。其中节点的三元组将满足以下规律,假设有2个节点,a是b节点的祖先节点,那么一定满足start(a)<start(b)<end(b)<=end(a),若a是b节点的父亲节点,那么则需要满足start(a)<start(b)<end(b)<=end(a)和level(b)=level(a)+1。start(a)和start(b)分别指的是
在本实施例中区间编码阶段Map和Reduce算法的具体计算机程序如下:
IntervalMap Algorithm:
输入:标签数据集ENR
输出:不完整编码的数据集
(1)FOR(EN in ENR)DO://EN属性为(splitId,tag)
(2)IF value is start-tag THEN//根据标签类型进行赋值,开始标签
(3)count←count+1;level←level+1;
(4)build a new label L<tagname,count,-1,level,tagvalue>;
(5)Push L into S;
(6)ELSE//结束标签
(7)IF(S is not empty)THEN
(8)L←pop from S;
(9)L.end←count;
(10)ELSE
(11)build a new label L<tagname,-1,count,level,tag-value>;
(12)level←level-1;
(13)build(K,L);
(14)output(K,L);//输出给Reduce
(15)END FOR;
IntervalReduce Algorithm:
Input:同标签名的一组不完整编码的数据集ENR;
Output:完整编码
(1)IF IsRead==false THEN
(2)Read the data on HDFS and build offset table T;
(3)IsRead←true;
(4)FOR(EN in ENR)DO:
(5)L←EN;
(6)If(L.end==-1)THEN//开始标签
(7)L.start←L.start+T.get(L.splitId).count;
(8)L.level←L.level+T.get(L.splitId).level;
(9)Push L into S;
(10)ELSE IF L.start==-1THEN//结束标签
(11)L.end←L.end+T.get(L.splitId).count;
(12)L.level←L.level+T.get(L.splitId).level;
(13)L1←pop from S;
(14)Merge(L,L1);
(15)Add L to list;
(16)ELSE//完整标签编码
(17)L.start←L.start+T.get(L.splitId).count;
(18)L.end←L.end+T.get(L.splitId).count;
(19)L.level←L.level+T.get(L.splitId).level;
(20)Output(L,list).
(21)END FOR;
(22)IF(list is not empty)THEN
(23)Output the node in list as ths final result;
(24)/**merge function**/
(25)Merge(Label L1,Label L2)://合并开始标签和结束标签
(26)L1.start←L2.start;
(27)L1.level←L2.level;
(28)/**Output function**/
(29)Output(Label L,ArrayList list)://输出结果
(30)L1←list.getFirst();
(31)While(L1.start<L.start)
(32)BEGIN
(33)Output L1as the result;
(34)list.removeFirst();
(35)L1←list.getFirst();
(36)END;
(37)output L as the final result;
步骤104、服务器查看待查询XML文档是否已进行层次编码;
若否,则进入步骤105;
若是,则进入步骤106;
步骤105、对待查询XML文档进行层次编码,然后进入步骤106;
在本步骤中,对XML文档数据中XML树中的节点进行层次编码的具体过程如下:首先,获取到进行层次编码的节点的父节点的层次编码信息和其他兄弟节点信息;其次,将区间编码后深度相同的节点放在一个文件中;然后,将节点按深度从小到大进行编码,每一层将使用一个作业完成;再者,当深度为1和2时,节点N(i,level)的编码按照层次编码规则赋值,通过串行执行实现层次编码;当深度大于2时,节点N(i,level)的编码按照层次编码规则赋值,通过启动MapReduce作业执行实现层次编码;
XML文档进行层次编码后XML树中的各节点的编码格式为:<Hid,nodeCount,level>,其中Hid为层次编码序列,nodeCount为相同层次编码序列的节点个数,level为节点的深度;
本实施例中层次编码规则具体如下:
当节点N(i,level)为根节点时(level=1),编码为0;
当节点N(i,level)的深度大于1时,则节点的编码由2部分组成,编码序列Hid=S(i,level)+Hid(i,level-1),Hid(i,level-1)是N(i,level)的父亲节点编码序列;
当节点N(i,level)的深度为2时,如果N(i,level)是第i(从0开始)个在第二层中不重复出现的节点,那么S(i,level)为一个二进制的序列,在序列中从右到左第i位为1,其他位都为0。假设有4个标签名不同的兄弟节点,节点为第二个,则二进制序列为0010,加上父亲节点编码即成为完整层次编码00100。
当节点N(i,level)的深度大于2时,S(i,level)则表示N(i,level)在同一层所有兄弟节点中第i个出现的二进制序列。假设有4个标签名不同的兄弟节点,节点为第二个,父亲节点编码为00100,则节点编码为1000100;
其中MapReduce作业执行实现层次编码的具体过程如下:
Map阶段读取到节点的区间编码后找到其父亲节点,获取父亲节点的层次编码,将父亲节点的层次编码赋值给子节点,最后将子节点不完整的层次编码结果输出;
Shuffle阶段根据Map输出内容进行二次排序,层次编码相同的节点为一组,组内按区间编码的start值进行排序;
Reduce阶段根据层次编码的层次编码规则对节点的编码补充完整后输出。
在本实施例中在本实施例中层次编码阶段Map和Reduce算法的具体计算机程序如下:
HierarchyMap Algorithm:
输入:一个未编码数据集ENR<prd,name>,上一层已编码数据集LR<prd,name>
输出:不完整编码的数据集
(1)FOR(EN in ENR)DO:
(2)/*通过节点的编码可以获得其父亲编码*/
(3)parentEN←getParent(EN);
(4)/*获取父亲节点的层次编码*/
(5)parentHid←getHid(parentEN,LR);
(6)newEN←(<parentHid,EN>,EN);
(7)output(newEN);
(8)ENDFOR;
HierarchyReduce Algorithm:
输入:父节点相同的一组数据集ENR
输出:完整编码的数据集
(1)初始化Set;
/*EN属性<parentHid,prd,name>分别为父节点层次编码,节点本身的前缀编码,标签名*/
(2)FOR(EN in ENR)DO:
(3)add NAME(EN)into Set;
/*将EN名字在Set中的位置按规则转为二进制*/
(4)S←Transform(EN,Set);
/*S加上父节点的层次编码形成子节点层次编码*/
(5)Hid←S+parentHid(EN);
(6)output(EN,Hid);
(7)ENFFOR
步骤106、服务器将XPath查询请求中的查询语句发送至Hadoop集群进行解析,提取出查询语句中出现的标签名、连接符号和谓词结构,并且作为解析结果保存到解析类中;对于一个查询语句,不同的查询计划会使得执行代价不同。为了对代价进行评估,需要对结构连接操作结果集的数目进行估算,对MapReduce作业建立代价模型。本步骤的解析结果将作为以下步骤中代价评估基础。
步骤107、逐步增加查询语句出现的连接结构生成查询计划树,对查询计划树的结构连接结果进行估算;本步骤中,查询计划树的结构连接结果进行估算包括对于父子连接操作的结果集估算和对于祖孙连接操作的结果集估算;
对于父子连接操作的结果集估算的过程如下:首先对一个集合B中的每一项节点b,遍历另一个集合A,查找另一个集合A中是否存在节点a与节点b满足父子关系,如果是,则停止查找,然后将集合B中满足父子关系的b添加到结果集R中,最后将结果集R中的每个节点层次编码信息中的nodeCount进行相加,得到的和即为两个集合A和B的结果集数目的预估值;例如A/B,A表示一个集合标签名,A.result表示名字相同的节点层次编码的集合。为了对A/B的结果集R进行估算,需要对B集合的每一项b,遍历A集合,查找A集合中是否存在节点a与节点b满足父子关系,如果是则停止查找,并将b添加到R中。最后将R中的每个节点编码信息中的nodeCount进行相加,得到的和就是A/B的结果集数目的预估值。
对于祖孙连接操作的结果集估算的过程如下:首先对一个集合B中的每一项节点b,遍历另一个集合A,查找另一个集合A中是否存在节点a与节点b满足祖孙关系,如果是,将集合B中满足祖孙关系的b添加到结果集R中,并且继续查找,直到遍历完集合A,最后将结果集R中的每个节点层次编码信息中的nodeCount进行相加,得到的和即为两个集合A和B的结果集数目的预估值;例如A//B,需要对B集合的每一项b,遍历A集合,查找A集合中是否存在节点a与节点b满足祖孙关系,如果是则将b添加到R中,并继续查找直到遍历完。最后将R中的每个节点编码信息中的nodeCount进行相加,得到的和就是A//B的结果集数目的预估值。
其中判断两个节点a和b是否为父子关系的公式如下:
level(a)+1=level(b);
若上述等式成立,则表示节点a和b为父子关系,level(a)为节点a的深度,level(b)为节点b的深度;
其中判断两个节点a和b是否为祖孙关系的公式如下:
Hid(b)&(2encodinglength(Hid(a))-1)=Hid(a);
若上述等式成立,则节点a和b为祖孙关系;Hid(a)为节点a的层次编码序列,Hid(b)为节点b的层次编码序列,encodinglength(Hid(a))为节点a的编码长度。
步骤108、对MapReduce作业建立代价模型,根据代价模型对查询计划树的执行代价估算;本步骤中,对查询计划树的执行代价估算时考虑三个因素:I/O开销、CPU的开销和网络传输的开销,如表1所示为本实施例代价模型所使用的参数。
表1模型参数
本步骤中,对MapReduce作业建立代价模型过程中,包括对Map过程中的两种操作分别建立代价模型和对Shuffle和Reduce阶段建立代价模型;
Map过程中的两种操作分别为不进行连接操作的Map阶段和进行连接操作的Map阶段;
不进行连接操作的Map阶段建立的代价模型为:
RC=NUM(Ii)*SIZE*Crh;
PC=NUM(Ii)*Cm;
WC=NUM(Ii)*Cwl*SIZE;
其中RC为从HDFS上读取输入文件的代价,PC为数据集进行分区输出的CPU代价,WC为Map数据输出到本地文件的代价;其中NUM(Ii)表示的是数据集Ii的数目,SIZE为一个节点编码的数据大小,Cm为读取本地磁盘一个数据的代价,Cwl为写到本地磁盘上一个数据的代价;
路径Path(i,i)在不进行连接操作的Map阶段的代价CMi为:
进行连接操作的Map阶段的建立的代价模型为:
RAC=NUM(Ii-1)*SIZE*Crh;
PPC=R(Ii-1,Ii)*Cm;
WPC=R(Ii-1,Ii)*Cwl*2*SIZE;
其中RAC为在HDFS读取祖先节点数据集的代价,PPC对连接结果数据集进行分区输出的CPU代价,WPC为结果数据集输出节点到本地磁盘的代价;NUM(Ii-1)表示的是数据集Ii-1的数目;R(Ii-1,Ii)表示数据集Ii-1和数据集Ii连接结果数据集;
路径Path(j-1,j)在进行连接操作的Map阶段的代价CM(j-1,j)为:
Path(x1,x2)为指x1节点到x2节点组成的路径表达式,当x1=x2时,代表Path(x1,x2)为一个节点名称,当x1<x2时,路径Path(x1,x2)为长路径,当x1=x2-1时,Path(x1,x2)表示一个二元连接结构;Path(i,i)对应的节点数据集为Ii;Path(j-1,j)表示的是j-1节点到j节点组成的路径表达式;
Shuffle和Reduce阶段建立的代价模型为:
CR=Cshuffle(RI)+Crjoin(RI)+NUM(RO)*Cwh;
其中Cshuffle(RI)代表从Map获取输出文件到Reduce输入的整个shuffle过程的全部代价;Crjoin(RI)代表对Reduce端对集合RI进行连接的CPU代价;NUM(RO)*Cwh代表的是Reduce的输出代价;
一个查询的MapReduce作业的全部代价计算公式如下:
Cost(Job)=(∑CMi+∑CM(j-1,j))/K+CR;
Job表示一个MapReduce作业,∑CMi是查询计划树中Map阶段不进行连接操作的数据集的执行代价总和,∑CM(j-1,j)是查询计划树中Map阶段进行连接操作的数据集的执行代价总和;其中K=min(N,M),其中N为查询计划的Map任务数,M为集群最大的并行Map任务数。由于MapReduce的作业的Map任务数是跟输入文件的大小相关,并行的Map任务数不同也会导致作业的效率不同,所以进行代价评估时也需要考虑并行Map任务数的影响,而Reduce的组数一直大于集群中并行的Reduce任务数,所以本实施例中不计入Reduce任务数的影响。
步骤109、根据查询计划树的执行代价估算值,采用启发式算法找出最优查询计划树;本步骤采用最佳优先搜索算法找到最优查询计划树,具体过程如下:
109-1、初始化优先队列Queue,用于保存状态节点并每次返回执行代价最低的状态节点,minCost用于表示查询语句的最低执行代价,初始化为双浮点最大值,minJ用于存储执行代价最低的完整查询路径;
109-2、初始化第一个状态节点J,J.Path=Path(1,1),根据路径表达式计算出各个变量的数据后存储,添加到Queue中;其中每个状态节点保存了三个变量,分别为路径表达式Path,路径表达式Path的执行代价Cost,路径表达式Path中最后一个参与连接操作结构的类型type,其中type有两种类型,分别为EN和LP,EN表示是元素节点名,LP表示是一个二元连接结构的长路径;J.Path表示状态节点J的路径表达式,J.type表示状态节点J路径表达式J.Path中最后一个参与连接操作结构的类型,J.Cost表示状态节点J路径表达式J.Path中最后一个参与连接操作结构的类型;
109-3、当Queue不为空时,返回队列中代价最低的状态节点J,根据状态节点J的路径表达式结构添加新的连接节点EN1,添加规则如下:
当J.type=EN时,生成两个新的状态节点J1和J2添加到队列Queue中,若J.Path的最后一个连接节点为EN',则:
新的状态节点J1的路径表达式J1.Path=J.Path+EN1,J.Path+EN1表示将连接节点EN1添加到路径表达式J.Path中,EN1的数据集不进行Map端连接操作;
新的状态节点J2的路径表达式J2.Path=J.Path-EN'+(EN'*EN1);J.Path-EN'表示将路径表达式J.Path中的最后一个连接节点EN'除去;EN'*EN1表示一个二元连接结构,EN'与EN1两个连接节点数据集在Map端进行连接操作;
当J.type=LP时,生成一个新的状态节点J1添加到队列Queue中:
新的状态节点J1的路径表达式J1.Path=J.Path+EN1;
新的状态节点根据路径表达式更新作业的执行代价,当新的状态节点的执行代价大于minCost且新的状态节点路径表达式中最后一个参与连接操作结构的类型为LP时,该状态节点则放弃掉;当新的状态节点路径表达式已经是完整的查询语句时,如果新的状态节点的执行代价小于minCost则更新minCost值,不是完整查询语句则继续将生成的状态节点添加进队列Queue中,得到最优的查询计划树。
举个例子,对于查询语句/A/B//C/D的优化过程如图2所示,通过该优化过程得到最优的查询计划树。图中用|号表示分割,分割点所在的连接操作在Reduce端完成,其余连接操作都在Map端完成,其中图2中1、2、3、4、5是指执行的顺序。本实施例中最佳优先搜索算法的计算机程序具体如下:
Optimization Algorithm
输入:一个查询语句XPath
输出:一个执行计划树
/*对语句进行解析*/
(1)Parse(XPath);
/*初始化优先队列Queue,代价最小作业minJob;*/
(2)minJob.cost←MAX;
(3)J.Path←Xpath(1,1);
(4)Push J into Queue;
/*优先队列,每次返回代价最小节点*/
(5)WHILE Queue is not empty DO
(6)J←pop from Queue;
(7)IF(minJob.cost>J.cost)
(8)break;
/*对路径根据类型进行扩展,不是完整路径则压入Queue中,是的话根据代价更新minJob*/
(9)ExpandAndUpdate(J,minJob,Queue);
(10)ENDWHILE;
(11)return minJob.path;
步骤110、根据步骤109求出的最优查询计划树,解析出MapReduce作业的输入文件,然后启动MapReduce查询作业;本步骤中解析出MapReduce作业的输入文件的具体过程如下:根据最优的查询计划树找出作业的输入文件,包括Map端不进行连接的节点文件和Map端进行连接的组合中的子孙节点文件。另外,如图5所示,对一条查询语句构造其查询计划树,可能出现Map阶段输出结果可以重用或者输入文件可以重用的情况,这时可以利用重用数据以减少开销。
例如:A/B/C/B,设查询计划分解为:A/B,C/B两个组合,其中标签B在Map中需要做A/B和C/B连接判断,都需要标签B的节点编码文件要作为输入文件,此时可以输入一遍标签B的节点就行。又如:A/B/A/B,查询计划分解为:A/BA/B,其中Map端需要做A/B的连接判定两次,也可以合并为1次
步骤111、执行MapReduce查询作业;如图3所示,本步骤中执行MapReduce查询作业的具体过程如下:
步骤111-1、根据查询计划树设置MapReduce作业输入,启动查询作业。
步骤111-2、进入MAP阶段,如果需要进行谓词连接,则进行相应的条件过滤和连接判定;如谓词语句:A[B=20],当读到标签名为A的节点时,则读取标签名为B的数据集,每读取一个标签名为B的节点,先判断其条件是否符合(即B=20),符合的话再与A进行连接判定,如果存在A与B连接判定成功,即表示A符合谓词过滤条件,则进行下一步操作。
步骤111-3、判断查询计划树中规定节点是否需要进行Map端的连接操作;若否,则进入步骤111-4;若是,则找出与规定节点进行连接的祖先节点集,进行连接判定,然后进入步骤111-4;
步骤111-4、将map的输出结果根据节点的信息或节点对中子节点的信息进行分区再输出;本实施例中分区规则如下:
节点N的区间编码<start,end,level>,分区长度B,则[0,B-1]为区域0,[B,2B-1]为区域1,以此类推。
令first=start/B,last=end/B;则节点N将输出到区域first到区域last。例如N编码为<20,30,3>,B=5,分配到区域4,5,6。
通过分区,数据会产生一定的冗余,例如同个节点编码输出到了不同的区域里,但是保证了Reducer端连接时每一组包含连接所需要的所有节点信息。
步骤111-5、进入Shuffle阶段,在Shuffle阶段对Map阶段的输出的中间结果集按照区间编码的大小规则从小到大排好序,具体是按照区间编码的start值大小进行从小到大的排序。
步骤111-6、进入Reduce阶段,对每一组输入数据进行连接后输出最终结果,即MapReduce作业后输出的最后结果;如图4所示为本实施例查询方法在Reduce阶段的示意图。其中每读到一个节点数据,找出对应的祖先节点的栈,跟栈中节点进行连接判定,若判定成功且该数据不是最后要输出的数据,则压到对应的栈里,若判定成功且该数据为最后要输出的数据,则先判断区域地址是否为节点Map输出进行分区时地址最大的区域,若是,则作为最终结果输出,否则就抛弃,这是为了避免不同分区输出相同的结果。
其中步骤111-3中,进行连接判定的具体过程如下:
读取输入节点N,读取父亲节点NP,当节点N的start值N.start小于父亲节点NP的start值Np.start时,即N.start<Np.start时,则对节点N和父亲节点NP两者进行关系判定,其中当连接符号为/时,判断两者是否符合父子关系条件,当连接符号为//时,则判断两者是否符合父子关系条件,若两者符合父子关系或者祖孙关系条件,则将两个节点信息组成节点对,然后进入步骤111-4;若两者不符合关系条件,则继续查找,直到N.start>Np.start,则表明输入节点N不符合连接条件,则读取下一个输入节点,并从Np开始进行连接判定。在本实施例中进行连接判定的计算机程序具体如下:
MapJoin Algorithm:
输入:节点数据集ENR,其祖先节点数据集AR
输出:节点对数据集
(1)parentEN←the first item in AR;
(2)初始化List;
/*EN为一个节点的编码信息(三种编码中任意一种)*/
(3)FOR(EN in ENR)DO:
/*EN先与List里的节点做连接判定,并删除不满足连接条件的节点*/
(4)JoinList(EN,List);
/*parentEN<EN的判断规则如定义4*/
(5)WHILE parentEN<EN DO
(6)IF join(parentEN,EN)=true THEN
/*满足连接条件,分区后输出到Reduce*/
(7)partitionAndOutput(parentEN,EN);
(8)Add parentEN to List;
(9)ENDIF
(10)parentEN←the next item in AR;
(11)ENDWHILE
(12)ENDFOR
其中如图5所示,/site/regions//item/description/parlist/listitem//parlist/listitem语句中有2个组合是相同的,即{parlist/listitem}。在Reduce阶段,当读到{parlist/listitem}的结果数据时,要与{parlist/listitem}的结果作Ancestor-Descendant关系(祖孙关系)判定,还是与{item/description}的结果作Parent-Child关系(父子关系)判定,由于不能马上判断出读到的数据是属于哪个{parlist/listitem}组合。采取的策略是按表达式从后向前进行连接判定,先判断{parlist/listitem}与{parlist/listitem}两个是否是Ancestor-Descendant关系,不是的话再判断{parlist/listitem}与{item/description}的Parent-Child关系。
步骤112、将MapReduce作业输出文件构造成XML数据结果集作为查询结果,并且返回给服务器;
步骤113、服务器根据XML数据结果集将XML数据查询结果返回给客户端。
如图6所示,本实施例还公开了一种用于实现权利要求1所述XML数据查询方法的基于MapReduce的XML数据查询系统201,包括客户端202和服务器203:
客户端202,用于接收用户发出XML查询请求,并且将查询语句发送给服务器203,接收查询结果显示;
服务器203,用于接收客户端发出的查询请求,使用Hadoop集群的MapReduce进行查询后将查询到的结果返回给客户端;
客户端202包括
界面展示模块204,用于与终端用户进行交互,包括查询语句的输入以及查询结果的输出,
和数据通信模块205:用于客户端202与服务器203之间的通信,与服务器203进行连接;包括向服务器203发送XML查询请求以及接收服务器203发送的查询结果。
所述服务器203包括
请求解析模块206,用于解析客户端202发送的XML查询请求;
和查询处理模块207,用于将XML查询请求转化为Hadoop作业执行。
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。
Claims (10)
1.一种基于MapReduce的XML数据查询方法,其特征在于,步骤如下:
步骤101、服务器接收客户端的XPath查询请求;
步骤102、服务器接收到XPath查询请求后,查看待查询XML文档是否已进行区间编码;
若否,则进入步骤103;
若是,则进入步骤104;
步骤103、对待查询XML文档进行区间编码,然后进入步骤104;
步骤104、服务器查看待查询XML文档是否已进行层次编码;
若否,则进入步骤105;
若是,则进入步骤106;
步骤105、对待查询XML文档进行层次编码,然后进入步骤106;
步骤106、服务器将XPath查询请求中的查询语句发送至Hadoop集群进行解析,提取出查询语句中出现的标签名、连接符号和谓词结构,并且作为解析结果保存到解析类中;
步骤107、逐步增加查询语句出现的连接结构生成查询计划树,对查询计划树的结构连接结果进行估算;
步骤108、对MapReduce作业建立代价模型,根据代价模型对查询计划树的执行代价估算;
步骤109、根据查询计划树的执行代价估算值,找出最优查询计划树;
步骤110、根据步骤109求出的最优查询计划树,解析出MapReduce作业的输入文件,然后启动MapReduce查询作业;
步骤111、执行MapReduce查询作业;
步骤112、将MapReduce作业输出文件构造成XML数据结果集作为查询结果,并且返回给服务器;
步骤113、服务器根据XML数据结果集将XML数据查询结果返回给客户端。
2.根据权利要求1所述的基于MapReduce的XML数据查询方法,其特征在于,所述步骤103中,使用MapReduce对XML文档数据中XML树中的节点进行区间编码,具体过程如下:Hadoop框架将XML文档数据中XML树中的节点以键值对的方式输入给Map函数处理,Map函数的输入包括二种类型,其中一种值是开始标签,另一种值是结束标签;Map函数每获取一组键值对,根据Map算法进行处理;Map函数处理完所有输入后,在关闭输入前判断栈是否为空,不为空,则将栈中所有记录出栈,输出完所有键值对后将分块的偏移信息输出到HDFS上;Reducer则是通过Map阶段输出的分块偏移信息建立偏移表,根据偏移表对XML文档数据中XML树中的节点进行完整编码后输出;编码后的XML树中的节点信息按从小到大的顺序存储到Hadoop框架中HDFS上各个文件中;
XML文档进行区间编码后,XML树中的各节点的编码格式为:<start,end,level>,其中start是节点在整棵XML树中前序遍历序号,end为以该节点为根节点的子树中最大的start值,level为节点在树中的深度。
3.根据权利要求2所述的基于MapReduce的XML数据查询方法,其特征在于,所述步骤105中,对XML文档数据中XML树中的节点进行层次编码的具体过程如下:首先,获取到进行层次编码的节点的父节点的层次编码信息和其他兄弟节点信息;其次,将区间编码后深度相同的节点放在一个文件中;然后,将节点按深度从小到大进行编码,每一层将使用一个作业完成;再者,当深度为1和2时,节点N(i,level)的编码按照层次编码规则赋值,通过串行执行实现层次编码;当深度大于2时,节点N(i,level)的编码按照层次编码规则赋值,通过启动MapReduce作业执行实现层次编码;
XML文档进行层次编码后XML树中的各节点的编码格式为:<Hid,nodeCount,level>,其中Hid为层次编码序列,nodeCount为相同层次编码序列的节点个数,level为节点在树中的深度。
4.根据权利要求3所述的基于MapReduce的XML数据查询方法,其特征在于,MapReduce作业执行实现层次编码的具体过程如下:
Map阶段读取到节点的区间编码后找到其父亲节点,获取父亲节点的层次编码,将父亲节点的层次编码赋值给子节点,最后将子节点不完整的层次编码结果输出;
Shuffle阶段根据Map输出内容进行二次排序,层次编码相同的节点为一组,组内按区间编码的start值进行排序;
Reduce阶段根据层次编码的层次编码规则对节点的编码补充完整后输出。
5.根据权利要求3所述的基于MapReduce的XML数据查询方法,其特征在于,所述步骤107中,查询计划树的结构连接结果进行估算包括对于父子连接操作的结果集估算和对于祖孙连接操作的结果集估算;
对于父子连接操作的结果集估算的过程如下:首先对一个集合B中的每一项节点b,遍历另一个集合A,查找另一个集合A中是否存在节点a与节点b满足父子关系,如果是,则停止查找,然后将集合B中满足父子关系的b添加到结果集R中,最后将结果集R中的每个节点层次编码信息中的nodeCount进行相加,得到的和即为两个集合A和B的结果集数目的预估值;
对于祖孙连接操作的结果集估算的过程如下:首先对一个集合B中的每一项节点b,遍历另一个集合A,查找另一个集合A中是否存在节点a与节点b满足祖孙关系,如果是,将集合B中满足祖孙关系的b添加到结果集R中,并且继续查找,直到遍历完集合A,最后将结果集R中的每个节点层次编码信息中的nodeCount进行相加,得到的和即为两个集合A和B的结果集数目的预估值;
其中判断两个节点a和b是否为父子关系的公式如下:
level(a)+1=level(b);
若上述等式成立,则表示节点a和b为父子关系,level(a)为节点a的深度,level(b)为节点b的深度;
其中判断两个节点a和b是否为祖孙关系的公式如下:
Hid(b)&(2encodinglength(Hid(a))-1)=Hid(a);
若上述等式成立,则节点a和b为祖孙关系;Hid(a)为节点a的层次编码序列,Hid(b)为节点b的层次编码序列,encodinglength(Hid(a))为节点a的编码长度。
6.根据权利要求3所述的基于MapReduce的XML数据查询方法,其特征在于,所述步骤108中,对查询计划树的执行代价估算时考虑三个因素:I/O开销、CPU的开销和网络传输的开销;
步骤108中,对MapReduce作业建立代价模型过程中,包括对Map过程中的两种操作分别建立代价模型和对Shuffle和Reduce阶段建立代价模型;
Map过程中的两种操作分别为不进行连接操作的Map阶段和进行连接操作的Map阶段;
不进行连接操作的Map阶段建立的代价模型为:
RC=NUM(Ii)*SIZE*Crh;
PC=NUM(Ii)*Cm;
WC=NUM(Ii)*Cwl*SIZE;
其中RC为从HDFS上读取输入文件的代价,PC为数据集进行分区输出的CPU代价,WC为Map数据输出到本地文件的代价;其中NUM(Ii)表示的是数据集Ii的数目,SIZE为一个节点编码的数据大小,Cm为读取本地磁盘一个数据的代价,Cwl为写到本地磁盘上一个数据的代价;
路径Path(i,i)在不进行连接操作的Map阶段的代价CMi为:
进行连接操作的Map阶段的建立的代价模型为:
RAC=NUM(Ii-1)*SIZE*Crh;
PPC=R(Ii-1,Ii)*Cm;
WPC=R(Ii-1,Ii)*Cwl*2*SIZE;
其中RAC为在HDFS读取祖先节点数据集的代价,PPC对连接结果数据集进行分区输出的CPU代价,WPC为结果数据集输出节点到本地磁盘的代价;NUM(Ii-1)表示的是数据集Ii-1的数目;R(Ii-1,Ii)表示数据集Ii-1和数据集Ii连接结果数据集;
路径Path(j-1,j)在进行连接操作的Map阶段的代价CM(j-1,j)为:
Path(x1,x2)为指x1节点到x2节点组成的路径表达式,当x1=x2时,代表Path(x1,x2)为一个节点名称,当x1<x2时,路径Path(x1,x2)为长路径,当x1=x2-1时,Path(x1,x2)表示一个二元连接结构;Path(i,i)对应的节点数据集为Ii;Path(j-1,j)表示的是j-1节点到j节点组成的路径表达式;
Shuffle和Reduce阶段建立的代价模型为:
CR=Cshuffle(RI)+Crjoin(RI)+NUM(RO)*Cwh;
其中Cshuffle(RI)代表从Map获取输出文件到Reduce输入的整个shuffle过程的全部代价;Crjoin(RI)代表对Reduce端对集合RI进行连接的CPU代价;NUM(RO)*Cwh代表的是Reduce的输出代价;
一个查询的MapReduce作业的全部代价计算公式如下:
Cost(Job)=(∑CMi+∑CM(j-1,j))/K+CR;
Job表示一个MapReduce作业,∑CMi是查询计划树中Map阶段不进行连接操作的数据集的执行代价总和,∑CM(j-1,j)是查询计划树中Map阶段进行连接操作的数据集的执行代价总和;其中K=min(N,M),其中N为查询计划的Map任务数,M为集群最大的并行Map任务数。
7.根据权利要求6所述的基于MapReduce的XML数据查询方法,其特征在于,所述步骤109中采用最佳优先搜索算法找到最优查询计划树,具体过程如下:
109-1、初始化优先队列Queue,用于保存状态节点并每次返回执行代价最低的状态节点,minCost用于表示查询语句的最低执行代价,初始化为双浮点最大值,minJ用于存储执行代价最低的完整查询路径;
109-2、初始化第一个状态节点J,J.Path=Path(1,1),根据路径表达式计算出各个变量的数据后存储,添加到Queue中;其中每个状态节点保存了三个变量,分别为路径表达式Path,路径表达式Path的执行代价Cost,路径表达式Path中最后一个参与连接操作结构的类型type,其中type有两种类型,分别为EN和LP,EN表示是元素节点名,LP表示是一个二元连接结构的长路径;J.Path表示状态节点J的路径表达式,J.type表示状态节点J路径表达式J.Path中最后一个参与连接操作结构的类型,J.Cost表示状态节点J路径表达式J.Path中最后一个参与连接操作结构的类型;
109-3、当Queue不为空时,返回队列中代价最低的状态节点J,根据状态节点J的路径表达式结构添加新的连接节点EN1,添加规则如下:
当J.type=EN时,生成两个新的状态节点J1和J2添加到队列Queue中,若J.Path的最后一个连接节点为EN',则:
新的状态节点J1的路径表达式J1.Path=J.Path+EN1,J.Path+EN1表示将连接节点EN1添加到路径表达式J.Path中,EN1的数据集不进行Map端连接操作;
新的状态节点J2的路径表达式J2.Path=J.Path-EN'+(EN'*EN1);J.Path-EN'表示将路径表达式J.Path中的最后一个连接节点EN'除去;EN'*EN1表示一个二元连接结构,EN'与EN1两个连接节点数据集在Map端进行连接操作;
当J.type=LP时,生成一个新的状态节点J1添加到队列Queue中:
新的状态节点J1的路径表达式J1.Path=J.Path+EN1;
新的状态节点根据路径表达式更新作业的执行代价,当新的状态节点的执行代价大于minCost且新的状态节点路径表达式中最后一个参与连接操作结构的类型为LP时,该状态节点则放弃掉;当新的状态节点路径表达式已经是完整的查询语句时,如果新的状态节点的执行代价小于minCost则更新minCost值,不是完整查询语句则继续将生成的状态节点添加进队列Queue中,得到最优的查询计划树;
所述步骤110中解析出MapReduce作业的输入文件的具体过程如下:根据最优的查询计划树找出作业的输入文件,包括Map端不进行连接的节点文件和Map端进行连接的组合中的子孙节点文件。
8.根据权利要求2所述的基于MapReduce的XML数据查询方法,其特征在于,步骤111中执行MapReduce查询作业的具体过程如下:
步骤111-1、根据查询计划树设置MapReduce作业输入,启动查询作业;
步骤111-2、进入MAP阶段,如果需要进行谓词连接,则进行相应的条件过滤和连接判定;
步骤111-3、判断查询计划树中规定节点是否需要进行Map端的连接操作;若否,则进入步骤111-4;若是,则找出与规定节点进行连接的祖先节点集,进行连接判定,然后进入步骤111-4;
步骤111-4、将Map的输出结果根据节点的信息或节点对中子节点的信息进行分区再输出;
步骤111-5、进入Shuffle阶段,在Shuffle阶段对Map阶段的输出的中间结果集按照区间编码的大小规则从小到大排好序;
步骤111-6、进入Reduce阶段,对每一组输入数据进行连接后输出最终结果,即MapReduce作业后输出的最后结果;其中每读到一个节点数据,找出对应的祖先节点的栈,跟栈中节点进行连接判定,若判定成功且该数据不是最后要输出的数据,则压到对应的栈里,若判定成功且该数据为最后要输出的数据,则先判断区域地址是否为节点Map输出进行分区时地址最大的区域,若是,则作为最终结果输出,否则就抛弃。
9.根据权利要求8所述的基于MapReduce的XML数据查询方法,其特征在于,所述步骤111-3中,进行连接判定的具体过程如下:
读取输入节点N,读取父亲节点NP,当节点N的start值N.start小于父亲节点NP的start值Np.start时,即N.start<Np.start时,则对节点N和父亲节点NP两者进行关系判定,其中当连接符号为/时,判断两者是否符合父子关系条件,当连接符号为//时,则判断两者是否符合父子关系条件,若两者符合父子关系或者祖孙关系条件,则将两个节点信息组成节点对,然后进入步骤111-4;若两者不符合关系条件,则继续查找,直到N.start>Np.start,则表明输入节点N不符合连接条件,则读取下一个输入节点,并从Np开始进行连接判定。
10.一种用于实现权利要求1所述XML数据查询方法的基于MapReduce的XML数据查询系统,其特征在于,包括客户端和服务器:
客户端,用于接收用户发出XML查询请求,并且将查询语句发送给服务器,接收查询结果显示;
服务器,用于接收客户端发出的查询请求,使用Hadoop集群的MapReduce进行查询后将查询到的结果返回给客户端;
所述客户端包括
界面展示模块,用于与终端用户进行交互,包括查询语句的输入以及查询结果的输出;
和数据通信模块:用于客户端与服务器之间的通信,与服务器进行连接;包括向服务器发送XML查询请求以及接收服务器发送的查询结果;
所述服务器包括
请求解析模块,用于解析客户端发送的XML查询请求;
和查询处理模块,用于将XML查询请求转化为Hadoop作业执行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510391100.6A CN105005606B (zh) | 2015-07-03 | 2015-07-03 | 基于MapReduce的XML数据查询方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510391100.6A CN105005606B (zh) | 2015-07-03 | 2015-07-03 | 基于MapReduce的XML数据查询方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105005606A true CN105005606A (zh) | 2015-10-28 |
CN105005606B CN105005606B (zh) | 2018-06-29 |
Family
ID=54378282
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510391100.6A Active CN105005606B (zh) | 2015-07-03 | 2015-07-03 | 基于MapReduce的XML数据查询方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105005606B (zh) |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105677740A (zh) * | 2015-12-29 | 2016-06-15 | 中国民用航空上海航空器适航审定中心 | 基于实体的文本数据与xml文档的匹配方法 |
CN106202364A (zh) * | 2016-07-07 | 2016-12-07 | 华南理工大学 | 面向MapReduce的XML数据划分优化方法及其系统 |
CN107025273A (zh) * | 2017-03-17 | 2017-08-08 | 南方电网科学研究院有限责任公司 | 一种数据查询的优化方法和装置 |
CN107256217A (zh) * | 2017-04-19 | 2017-10-17 | 江苏师范大学 | 一种xml数据的快速查询方法 |
WO2018177060A1 (zh) * | 2017-03-31 | 2018-10-04 | 华为技术有限公司 | 查询优化方法及相关装置 |
CN108804626A (zh) * | 2018-05-31 | 2018-11-13 | 华中科技大学 | 一种基于分布感知的二元等值连接倾斜优化方法和系统 |
CN109101468A (zh) * | 2018-08-02 | 2018-12-28 | 浙江大学 | 一种文本数据转换脚本的执行优化方法 |
CN109344216A (zh) * | 2018-09-17 | 2019-02-15 | 南京中物联科技有限公司 | 一种面向大数据的k近邻连接查询方法 |
CN110321456A (zh) * | 2019-07-17 | 2019-10-11 | 哈尔滨工业大学 | 一种海量不确定xml近似查询方法 |
CN110866033A (zh) * | 2018-08-28 | 2020-03-06 | 北京国双科技有限公司 | 一种用于预测查询资源占用量的特征确定方法及装置 |
CN112115302A (zh) * | 2020-09-29 | 2020-12-22 | 集美大学 | 一种XML文档的并行XPath查询方法、终端设备及存储介质 |
CN113434907A (zh) * | 2021-07-09 | 2021-09-24 | 四川大学 | 一种面向私有数据集的安全高效分位数聚合方法及装置 |
CN114238343A (zh) * | 2021-12-23 | 2022-03-25 | 南京华飞数据技术有限公司 | 基于大数据的多维度可变性自动化造数据模型的实现方法 |
CN115033595A (zh) * | 2022-08-10 | 2022-09-09 | 杭州悦数科技有限公司 | 基于超级节点的查询语句处理方法、系统、装置和介质 |
CN116737763A (zh) * | 2023-08-16 | 2023-09-12 | 腾讯科技(深圳)有限公司 | 结构化查询语句执行方法、装置、计算机设备、存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101183385A (zh) * | 2007-12-04 | 2008-05-21 | 西安交通大学 | 一种基于多模态索引结构的xml查询方法 |
CN101719156A (zh) * | 2009-12-30 | 2010-06-02 | 南开大学 | 一种在关系型数据库中无缝集成纯xml查询引擎的系统 |
US20110202570A1 (en) * | 2010-02-16 | 2011-08-18 | Lascom | Method for structuring hierarchical data in relational databases |
CN104598454A (zh) * | 2013-10-31 | 2015-05-06 | 南京思润软件有限公司 | 一种基于xml的信息搜索方法 |
-
2015
- 2015-07-03 CN CN201510391100.6A patent/CN105005606B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101183385A (zh) * | 2007-12-04 | 2008-05-21 | 西安交通大学 | 一种基于多模态索引结构的xml查询方法 |
CN101719156A (zh) * | 2009-12-30 | 2010-06-02 | 南开大学 | 一种在关系型数据库中无缝集成纯xml查询引擎的系统 |
US20110202570A1 (en) * | 2010-02-16 | 2011-08-18 | Lascom | Method for structuring hierarchical data in relational databases |
CN104598454A (zh) * | 2013-10-31 | 2015-05-06 | 南京思润软件有限公司 | 一种基于xml的信息搜索方法 |
Non-Patent Citations (1)
Title |
---|
陈文浩: "XQuery查询处理器设计与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105677740A (zh) * | 2015-12-29 | 2016-06-15 | 中国民用航空上海航空器适航审定中心 | 基于实体的文本数据与xml文档的匹配方法 |
CN106202364A (zh) * | 2016-07-07 | 2016-12-07 | 华南理工大学 | 面向MapReduce的XML数据划分优化方法及其系统 |
CN106202364B (zh) * | 2016-07-07 | 2019-05-17 | 华南理工大学 | 面向MapReduce的XML数据划分优化方法及其系统 |
CN107025273A (zh) * | 2017-03-17 | 2017-08-08 | 南方电网科学研究院有限责任公司 | 一种数据查询的优化方法和装置 |
WO2018177060A1 (zh) * | 2017-03-31 | 2018-10-04 | 华为技术有限公司 | 查询优化方法及相关装置 |
CN108664516A (zh) * | 2017-03-31 | 2018-10-16 | 华为技术有限公司 | 查询优化方法及相关装置 |
CN107256217A (zh) * | 2017-04-19 | 2017-10-17 | 江苏师范大学 | 一种xml数据的快速查询方法 |
CN107256217B (zh) * | 2017-04-19 | 2020-10-02 | 江苏师范大学 | 一种xml数据的快速查询方法 |
CN108804626B (zh) * | 2018-05-31 | 2019-11-22 | 华中科技大学 | 一种基于分布感知的二元等值连接倾斜优化方法和系统 |
CN108804626A (zh) * | 2018-05-31 | 2018-11-13 | 华中科技大学 | 一种基于分布感知的二元等值连接倾斜优化方法和系统 |
CN109101468A (zh) * | 2018-08-02 | 2018-12-28 | 浙江大学 | 一种文本数据转换脚本的执行优化方法 |
CN110866033A (zh) * | 2018-08-28 | 2020-03-06 | 北京国双科技有限公司 | 一种用于预测查询资源占用量的特征确定方法及装置 |
CN110866033B (zh) * | 2018-08-28 | 2022-06-21 | 北京国双科技有限公司 | 一种用于预测查询资源占用量的特征确定方法及装置 |
CN109344216A (zh) * | 2018-09-17 | 2019-02-15 | 南京中物联科技有限公司 | 一种面向大数据的k近邻连接查询方法 |
CN110321456A (zh) * | 2019-07-17 | 2019-10-11 | 哈尔滨工业大学 | 一种海量不确定xml近似查询方法 |
CN110321456B (zh) * | 2019-07-17 | 2021-06-29 | 哈尔滨工业大学 | 一种海量不确定xml近似查询方法 |
CN112115302A (zh) * | 2020-09-29 | 2020-12-22 | 集美大学 | 一种XML文档的并行XPath查询方法、终端设备及存储介质 |
CN113434907A (zh) * | 2021-07-09 | 2021-09-24 | 四川大学 | 一种面向私有数据集的安全高效分位数聚合方法及装置 |
CN114238343A (zh) * | 2021-12-23 | 2022-03-25 | 南京华飞数据技术有限公司 | 基于大数据的多维度可变性自动化造数据模型的实现方法 |
CN114238343B (zh) * | 2021-12-23 | 2022-10-28 | 南京华飞数据技术有限公司 | 基于大数据的多维度可变性自动化造数据模型的实现方法 |
CN115033595A (zh) * | 2022-08-10 | 2022-09-09 | 杭州悦数科技有限公司 | 基于超级节点的查询语句处理方法、系统、装置和介质 |
CN115033595B (zh) * | 2022-08-10 | 2022-11-22 | 杭州悦数科技有限公司 | 基于超级节点的查询语句处理方法、系统、装置和介质 |
CN116737763A (zh) * | 2023-08-16 | 2023-09-12 | 腾讯科技(深圳)有限公司 | 结构化查询语句执行方法、装置、计算机设备、存储介质 |
CN116737763B (zh) * | 2023-08-16 | 2023-11-21 | 腾讯科技(深圳)有限公司 | 结构化查询语句执行方法、装置、计算机设备、存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN105005606B (zh) | 2018-06-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105005606A (zh) | 基于MapReduce的XML数据查询方法和系统 | |
CN111526060B (zh) | 业务日志的处理方法及系统 | |
CN101765842B (zh) | 用于xml策略匹配的方法和装置 | |
Willemin et al. | Image sequence coding by split and merge | |
EP2674875B1 (en) | Method, controller, program and data storage system for performing reconciliation processing | |
US7941417B2 (en) | Processing structured electronic document streams using look-ahead automata | |
CN101593180A (zh) | 将sparql查询转化成sql查询的方法和装置 | |
CN101183385B (zh) | 一种基于多模态索引结构的xml查询方法 | |
Ghrab et al. | Grad: On graph database modeling | |
Essayeh et al. | Towards ontology matching based system through terminological, structural and semantic level | |
Hartig | Foundations to Query Labeled Property Graphs using SPARQL. | |
CN106796607A (zh) | 用于基于模型的搜索及网络数据检索的系统和方法 | |
Liu et al. | Dynamically querying possibilistic XML data | |
CN108241709A (zh) | 一种数据集成方法、装置和系统 | |
CN103412883A (zh) | 基于p2p技术的语义智能信息发布订阅方法 | |
US20090307187A1 (en) | Tree automata based methods for obtaining answers to queries of semi-structured data stored in a database environment | |
Gu et al. | Optimization of service addition in multilevel index model for edge computing | |
CN115827885A (zh) | 一种运维知识图谱的构建方法、装置及电子设备 | |
Wu et al. | Efficient service re-composition using semantic augmentation for fast cloud fault recovery | |
Battre | Caching of intermediate results in DHT-based RDF stores | |
CN104063215A (zh) | 一种RESTful Web服务匹配系统 | |
d’Orazio et al. | Graph Constraints in Urban Computing: Dealing with conditions in processing urban data | |
Chen et al. | A semantic unification approach for M2M applications based on ontology | |
Gao et al. | Evaluating path query mechanisms as a foundation for SDN network control | |
CN110413797B (zh) | 不定长嵌套结构的最大语义保持的匿名类解析存储方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |