一种基于动态索引结构的海量数据实时查询方法
技术领域
本发明涉及计算机大数据查询技术领域,特别涉及一种基于动态索引结构的海量数据实时查询方法。
背景技术
随着互联网的飞速发展,社交网络、移动应用等日趋火热,我们看到网络信息的数据量在日益增多,大数据作为一种新兴数据概念而被定义,数据作为信息的载体,起着举足轻重的作用。数据的***式增长使得我们进入了大规模数据分析的时代,其特点是计算强度大,并且要求大规模并发存储和处理能力。如何快速地处理海量数据,及时有效地从海量数据中提取有价值的信息,是急需解决的技术问题。
目前,大规模数据分析有2种主流技术:第一种是20世纪80年代开始,以Teradata、Gamma研究项目为代表的并行数据库逐步发展成熟,它是由一系列操作符组成,前一操作符的输出流是下个操作符的输入流,记录按流水线的方式依次经过这些操作符,具有较高的性能。第2种是以Google为首的基于Map Reduce和分布式文件***GFS组成一种“无共享”的简单函数式编程的并行计算框架,支持其每天亿万次的搜索。Apache的Hadoop是一种Map Reduce的开源实现。但这些大规模数据处理技术难以满足实时性要求,更多的是针对离线数据的处理。Hadoop更像是一种ETL工具,两者的关系不是相互竞争而是互为补充。
另一方面,由Guttman提出的动态索引结构R-Tree及基于R-Tree的变种,其***、查询等操作可以同时进行,并且支持多维的模型,在众多空间索引技术中的优势非常明显,但是其针对大规模数据处理时随着树高度的增加,其查询结点重叠度增加,造成查询效率下降较快。而本发明能够很好地解决上面的问题。
发明内容
本发明目的在于提供一种基于动态索引结构(DC-Tree)的大规模多维数据实时查询方法,该方法解决了大规模多维数据处理的滞后性问题,实现了在分布式架构体系上的海量数据实时查询模型。
本发明解决其技术问题所采用的技术方案是:本发明提出一种基于动态索引结构(DC-Tree)的海量数据实时查询方法,该方法包括如下步骤:
步骤1:多维数据记录DR通过MasterNode中Z Curve映射函数fz,生成降维结果集S;
步骤2:MasterNode选定k个哈希函数,通过Bloom Filter对结果集S进行映射,生成节点集NN;
步骤3:更新数据记录DR,对节点集NN中每个元素实行动态构建;
步骤4:用户User查询MDS结果,通过步骤1、步骤2获得节点集NN,启用并行查询方法;
步骤5:用户User对节点集NN中所有访问节点的结果集进行聚合,得到最终查询结果Rset。
本发明是基于动态索引结构将海量多维数据集降维,支持高空间效率低查询时间的方法,并支持分布式冗余存储,从而提升了传统分布式机制中数据分配的效率,适应大规模数据的处理。本发明建立了具有概念层次化结构的多维数据树,打破传统的单一属性查询方法,使带有多维功能属性的数据集分成不同维度进行构建,大大降低了单一属性查询时的聚合工作量。
本发明通过将高维数据空间数据映射到一维空间,大大降低了数据管理节点的工作负担,支持数据存储节点的动态增加。同时设计了海量数据***和查询方法,支持多维属性数据的动态构建,并支持海量数据查询的实时性效果,增加了查询过程访问锁机制,适应查询的并发性需求。
一、***架构
图1给出海量数据实时查询***的体系架构,该***由以下四部分组成:数据管理节点(Master Node)、动态索引树(DC-Tree)、数据存储节点(Data Node)及用户(User)。MasterNode负责数据查询/更新的定位,主要运用降维和快速查询技术。DC-Tree主要是用于动态构建多维属性数据查询树,提供实时查询效果。DataNode负责具体数据的存储。用户(User)向MasterNode发送查询请求,MasterNode将对查询请求内容处理,确定所查询内容在部分DataNode上,并将这些符合要求的DataNode提交给用户。完成这个操作之后,用户将于MasterNode断开连接,并主动访问提交的DataNode进行查询。***整体架构如下图1所示。
本发明的海量数据实时查询方案由以下四部分操作组成:MDS(最小描述子集)分解、Zcurve降维处理、Bloom Filter定位、DC-Tree索引及结果聚合。
二、方法流程
1.MDS(最小描述子集)分解
MDS(最小描述子集)表现形式为(M
1,...,M
d),其中
不妨设M
i={a
i1,a
i2,...,a
ik},其中1≤i≤d,a
ik∈D
i,则此MDS(最小描述子集)对应的多维数据记录集为{(a
11,a
21,...,a
d1),...,(a
1k,a
2k,...,a
dk)},记为MM。
2.Z curve降维处理
根据上述步骤1中所得结果集MM,运用Z Curve方法进行降维操作,设Z Curve映射函数为fz(p,m,n),其中p∈MM,m为Z Curve阶数,n为多维模型的维度数,不妨设映射函数fz返回值为yp。该映射函数计算过程伪代码如下:
(1)yp=0;
REPEAT
REPEAT
(2)yp=yp+2n(i-1)+j-1aji
UNTIL j≥n
UNTIL i≥m
(3)RETURN yp
由于n维m阶Z Curve的映射函数空间复杂度为O(n),所以上述结果需要长度为n的数组来存放结果集yp,不妨设此结果集为S。
3.Bloom Filter定位
根据上述步骤2中所得降维处理后的结果集S={y1,...,yn},再根据相关工作中对BloomFilter的阐述,此时需要选择k个哈希函数HFi,其中1≤i≤k,由于Bloom Filter本身存在一定的错误率,为了能够减少这种正向性错误,本发明在构建哈希函数时运用了Knuth论证:两个哈希函数HF1和HF2通过下面的形式可以生成更多的哈希函数:
HFi=[HF1+HF2+f(i)]mod r
其中1≤i≤k,r为Bloom Filter数组长度,HF1和HF2是两个相互独立的哈希函数。当f(i)=0时,采用双哈希函数机制,否则就为扩展哈希函数机制,这样产生的哈希函数保持了正向性错误率不变,并且提高了***的计算效率。
选定k个函数函数后,对集合S中数据进行映射,返回一个DataNode节点集,不妨设为NN。并将此集NN返回至用户。
4.DC-Tree索引及结果聚合
用户根据上述步骤3中所得集合NN,定位到所需进行索引的DataNode,DataNode采用DC-Tree索引方法进行查找。在每个DataNode上进行查找后,会将索引结果发送到一个索引结果集中,不妨设为RSet,此时再对该索引结果集进行聚合,获得最终查询结果。
有益效果:
1、本发明提高了数据分配的效率,适应大规模数据的处理,降低了单一属性查询时的聚合工作量。
2、本发明实现了大规模数据高效并发处理和实时性功能。
附图说明
图1是本发明的***架构图。
图2是本发明的动态***方法流程图。
图3是本发明的并行查询方法流程图。
具体实施方式
下面通过结合说明书附图,进一步说明本发明的技术方案。
实施例1
如图2和图3所示,本发明提出一种基于动态索引结构(DC-Tree)的海量数据实时查询方法,该方法包括如下步骤:
步骤1:多维数据记录DR通过MasterNode中Z Curve映射函数fz,生成降维结果集S;
步骤2:MasterNode选定k个哈希函数,通过Bloom Filter对结果集S进行映射,生成节点集NN;
步骤3:更新数据记录DR,对节点集NN中每个元素实行动态构建;
步骤4:用户User查询MDS结果,通过步骤1、步骤2获得节点集NN,启用并行查询方法;
步骤5:用户User对节点集NN中所有访问节点的结果集进行聚合,得到最终查询结果Rset。
本发明是基于动态索引结构将海量多维数据集降维,支持高空间效率低查询时间的方法,并支持分布式冗余存储,从而提升了传统分布式机制中数据分配的效率,适应大规模数据的处理。本发明建立了具有概念层次化结构的多维数据树,打破传统的单一属性查询方法,使带有多维功能属性的数据集分成不同维度进行构建,大大降低了单一属性查询时的聚合工作量。
本发明的一个新的多维数据记录DR,通过MasterNode快速定位查询节点集NN,并动态添加到相应DC-Tree,用户User通过MDS查询节点集NN,聚合返回查询结果。
则其具体实施方式为:
(1)多维数据记录DR通过MasterNode中Z Curve映射函数fz,生成降维结果集S;
(2)MasterNode选定k个哈希函数,通过Bloom Filter对结果集S进行映射,生成节点集NN;
(3)更新数据记录DR,对节点集NN中每个元素实行动态构建;
动态***:为根节点D申请加锁LOCK;更新目录结点的Measure值;如果DR仅仅包含在D的一个孩子的MDS中,那么令D置为这个目录孩子结点;如果DR包含在多个D的孩子的MDS中,那么找出这些孩子中包含最少数据结点的那个孩子,并将D置为这个目录孩子结点;如果DR不包含在D的任何一个孩子的MDS中,首先拷贝一份D,不妨设为D’,将DR添加到D的每一个孩子结点中,计算添加后的重叠值,选择重叠值最小的那个孩子结点,并将其设为D;将数据记录DR***到D中,并更新D的Measure值;如果D的容纳空间已经达到最大,则调用***函数SPLIT,将D作为参数传递;更新D的父亲结点的Measure和MDS;令D指向D的父亲结点,如果D没有更新或者D不是根节点,则重新将数据记录DR***到D中,并更新D的Measure值,继续执行,否则结束;为根节点D申请解锁UNLOCK;
(4)用户User查询MDS结果,通过步骤1、步骤2获得节点集NN,启用并行查询方法;
并行查询:对节点集NN中所有节点,如果该节点没有上锁,则并发访问所有在NN中节点;为根节点D申请加锁LOCK;对D的每一次孩子结点C,对C的任何一个维度,如果与查询MDS不在同一维度层次上,则将两者中较低维度层次转换为较高维度层次;如果C的_MDS包含在查询MDS中,则将该_MDS及其Measure Values加入到结果集中;如果C的_MDS和查询MDS有重叠但并不包含在查询MDS中,则将该孩子结点C设为D,递归调用并行查询函数PARALLEL QUERY,继续及NN中节点执行同样操作;如果C为叶子结点,则访问结束;为根节点D申请解锁UNLOCK;
(5)用户User对节点集NN中所有访问节点的结果集进行聚合,得到最终查询结果Rset;
(6)全过程结束。
实施例2
如图1所示,本发明给出海量数据实时查询***的体系架构,该***由以下四部分组成:数据管理节点(Master Node)、动态索引树(DC-Tree)、数据存储节点(Data Node)及用户(User)。MasterNode负责数据查询/更新的定位,主要运用降维和快速查询技术。DC-Tree主要是用于动态构建多维属性数据查询树,提供实时查询效果。DataNode负责具体数据的存储。用户(User)向MasterNode发送查询请求,MasterNode将对查询请求内容处理,确定所查询内容在部分DataNode上,并将这些符合要求的DataNode提交给用户。完成这个操作之后,用户将于MasterNode断开连接,并主动访问提交的DataNode进行查询。
本发明的海量数据实时查询方法由以下四个操作部分组成,包括:MDS(最小描述子集)分解、Z curve降维处理、Bloom Filter定位、DC-Tree索引及结果聚合。