一种基于查询状态机的xml流数据查询方法
【技术领域】
[0001]本发明涉及计算机网络中XML流数据查询处理方法,属于大数据的查询技术,用于在具有XML格式等复杂类型的海量网络数据流中快速准确地查找用户所需要的信息。
技术背景
[0002]可扩展标记语言(XML语言)已经成为互联网上数据交换和数据共享事实上的标准。随着互联网应用的急剧增长,XML数据量也在不断增加,高性能的XML流数据处理已经成为大数据分析和处理技术不可缺少的核心技术之一。为了从不断到达的海量数据中找出用户关心的的少量数据,需要丰富的查询功能和强大的查询处理能力,在识别出有价值数据的同时,避免占用过多的系统资源。然而,鉴于XML数据本身所具有的半结构化数据特征,在XML流数据上完成复杂的数据查询会导致很大的时间开销和空间开销。
[0003]XML流数据查询的总体目标是在有限的内存中处理无限的数据流,同时得到高效实时的查询响应,达到高吞吐量,并且也要允许用户使用功能强大的查询请求。XPath查询语言为XML数据的查询提供了丰富的查询定位功能,包括多种结构连接、多查询步表示的查询路径、多重筛选条件,以及位置谓词、值约束谓词与基于路径的存在谓词等多种筛选条件的使用。本发明针对XPath语言路径表达式方式描述的查询请求,将XML流数据查询过程表示为状态转移过程,通过构造查询状态机来表示整个流数据查询的过程,基于查询状态机来识别、获取和筛选XML流数据中的XML数据元素。这种流数据查询方法允许用户在查询请求中使用祖先后代关系和双亲子女关系的多级结构连接,使用多重值谓词和存在谓词组成的筛选条件,并且能够及时释放所使用的内存空间,达到比较高的数据吞吐量,进而降低时间延迟,实现高性能的实时响应。
【发明内容】
[0004]本发明的目的是为支持多重筛选条件、多个查询步组成的路径表达式的查询请求、提供高效灵活的流数据查询方法,以支持高性能XML流数据处理。
[0005]本发明采用的技术方案实施步骤如下,
[0006]步骤(I)对表示查询请求的路径表达式中包含筛选条件的所有查询步按照以下步骤做预处理:
[0007]步骤(1.1)如果筛选条件中只包含一个查询步,则不作处理,否则将第一个查询步之外的其他查询步合并,组成新的筛选条件添加到第一个查询步的筛选条件中。
[0008]步骤(1.2)对筛选条件中的每一个查询步按照步骤(I)进行处理,直到查询请求中每个查询步包含的筛选条件均为单查询步时为止。
[0009]步骤(2)为表示查询请求的路径表达式中的每个查询步,建立各自的状态机,以表示自身的查询处理进展状态:
[0010]步骤(2.1)对于没有筛选条件的每个查询步,各自建立一个初始状态和一个结束状态;建立一个状态转移,从初始状态指向结束状态,以查询步中名字检测的开始标签作为转移标记;建立一个状态转移,从结束状态指向初始状态,以查询步中名字检测的结束标签作为转移标记;
[0011]步骤(2.2)对于其他查询步,各自建立一个初始状态、一个准备状态和一个就绪状态;建立一个状态转移,从初始状态指向准备状态,以查询步中名字检测的开始标签作为转移标记;建立一个状态转移,从准备状态指向初始状态,以查询步中名字检测的结束标签作为转移标记;建立一个状态转移,从就绪状态指向初始状态,以查询步中名字检测的结束标签作为转移标记;建立一个状态转移,从准备状态指向就绪状态,用于支持满足筛选条件时的状态转移。
[0012]步骤(2.3)为采用祖先后代连接关系的查询步,建立一个状态转移,从初始状态指向自身;
[0013]步骤(2.4)为路径表达式中的每个查询步,设置一个缓冲队列,用来保存查询到的中间结果;
[0014]步骤(3)对于查询请求中查询步内部的各种筛选条件,采用步骤(2.1)到步骤(2.3)为筛选条件中的查询步,建立各自的状态机,以表示筛选条件检查过程:
[0015]步骤(4)对于每个具有筛选条件的查询步,设置一个布尔数组,用来保存筛选条件的检查结果;数组大小和筛选条件的数量相同;对于值约束形式的筛选条件,在最内层的查询步对应的状态机的准备状态上附加约束条件;
[0016]步骤(5)为路径表达式形式的查询请求,按照以下步骤构造查询状态机:
[0017]步骤(5.1)为每个筛选条件,针对其中唯一的查询步,构造一个筛选状态机:
[0018]步骤(5.1.1)如果该查询步自身没有筛选条件,则该查询步的状态机组成了筛选状态机;并且以它的初始状态作为筛选状态机的初始状态;
[0019]步骤(5.1.2)如果该查询步自身具有筛选条件,则针对每个筛选条件,采用步骤(5.1)分别构造各自的子筛选状态机,并且将该查询步状态机的准备状态作为这些子筛选状态机的初始状态;该查询步的状态机和每个子查询状态机组成整个筛选条件的筛选状态机,并且以它的初始状态作为筛选状态机的初始状态;
[0020]步骤(5.2)对于仅包含一个查询步的路径表达式,如果该查询步自身没有筛选条件,则该查询步的状态机组成了整个查询请求的查询状态机;并且,以它的初始状态作为查询状态机的初始状态;否则,针对查询步自身的每个筛选条件,采用步骤(5.1)分别构造各自的筛选状态机,并且将该查询步状态机的准备状态作为这些筛选状态机的初始状态;该查询步的状态机和每个筛选状态机组成整个查询请求的查询状态机,并且以它的初始状态作为查询状态机的初始状态;
[0021]步骤(5.3)对于包含多个查询步的路径表达式,则针对第一个查询步以外的其他查询步组成的路径表达式,采用步骤(5)构造子查询自动机;如果第一个查询步没有筛选条件,以第一查询步状态机的结束状态作为这个子查询状态机的初始状态,并且以它的初始状态作为整个查询状态机的初始状态;否则,以第一查询步状态机的准备状态作为这个子查询状态机的初始状态,并且复制该子查询状态机,以第一查询步状态机的就绪状态作为复制的子查询状态机的初始状态;最后,以第一查询步的状态机和两个子查询状态机组成整个查询请求的查询状态机;并且,以该查询步状态机的初始状态作为查询状态机的初始状态;
[0022]步骤(6)在步骤(5)构造的查询状态机上,按照以下步骤,设置处理动作,用以配置不同状态的处理方法:
[0023]步骤(6.1)对于路径表达式中末端的查询步对应的状态机,在结束状态指向开始状态的状态转移上,附加入队动作,保证候选的查询结果被保存在缓冲队列;
[0024]步骤(6.2)对于各种筛选条件中查询步对应的状态机,在就绪状态指向开始状态的状态转移上,附加标志设置动作,用以保存筛选条件的计算结果;
[0025]步骤(6.3)对于路径表达式中非末端的查询步对应的状态机,如果标记为结束标签的状态转移起点为就绪状态,而且终点为前一查询步的状态机的准备状态,则将上传动作附加到这个状态转移上,从而保证下层查询结果返回到上层;
[0026]步骤(6.4)对于路径表达式中非末端的查询步对应的状态机,如果标记为结束标签的状态转移起点为准备状态,而且终点为前一查询步的状态机的准备状态,则将清空动作附加到这个状态转移上,从而保证筛选条件不成立时,放弃缓冲队列中候选的查询结果;
[0027]步骤(6.5)对于路径表达式中非末端的查询步对应的状态机,如果标记为结束标签的状态转移起点为就绪状态,而且终点为前一查询步的状态机的就绪状态,则将输出动作附加到这个状态转移上,从而输出缓冲队列的候选结果;
[0028]步骤(7)依据步骤(5)所有构造的查询状态机,使用步骤(6)设置的处理动作,按照以下步骤,对由XML元素的开始标签和结束标签组成的XML流数据进行查询:
[0029]步骤(7.1)将路径表达式中第一查询步的开始状态作为当前状态;
[0030]步骤(7.2)读取XML输入流的第一开始标签作为当前标签;
[0031]步骤(7.3)获得以当前状态为起始状态的所有状态转移;
[0032]步骤(7.4)如果当前标签和某个状态转移上的转移标签相同,则以这个状态转移的目标状态为当前状态,进行状态转移,完成了双亲子女关系下的结构连接运算;并且,按照这个状态转移上的附加动作,进行以下处理:
[0033]步骤(7.4.1)如果附加动作是入队动作,则将当前XML元素添加到当前查询步的缓冲队列的队尾;
[0034]步骤(7.4.2)如果附加动作是标记设置动作,则将当前状态的布尔数组中对应的数组元素设置为真;
[0035]步骤(7.4.3)如果附加动作是上传动作,则取出当前查询步对应的缓冲队列中的数据,添加前一查询步对应缓冲队列中;
[0036]步骤(7.4.4)如果附加动作是清空动作,则清空当前查询步对应的缓冲队列;
[0037]步骤(7.4.5)如果附加动作是输出动作,则输出当前查询步的缓冲队列中的数据;
[0038]步骤(7.5)如果目标状态为准备状态,则依据筛选条件进行状态转移:
[0039]步骤(7.5.1)检查值约束方式的筛选