一种基于云计算的多维区间查询方法及其系统的制作方法

文档序号:6521090阅读:286来源:国知局
一种基于云计算的多维区间查询方法及其系统的制作方法
【专利摘要】本发明提供了一种基于云计算的多维区间查询方法,该方法包括:索引创建步骤和多维区间数据查询步骤;索引创建步骤为通过外部输入的索引创建命令,自动创建并保存分布式网格文件索引和元数据;多维区间数据查询步骤为通过外部输入的查询命令,基于分布式网格文件索引和元数据,定位需要读取的数据块,并将读取请求自动均匀分布到服务器集群的各个节点后,在系统中并行处理查询请求,并行获取所有查询结果,经汇总后返回给用户。本发明还提供了一种基于分布式网格文件索引的多维区间查询系统。
【专利说明】—种基于云计算的多维区间查询方法及其系统
【技术领域】
[0001]本发明涉及海量数据的多维索引领域,尤其涉及海量数据的多维区间查询相关的索引技术。
【背景技术】
[0002]在智能电网中,海量采集类数据需要高效地存储与快速地查询。而采集类大数据与互联网领域,如社交网络、搜索引擎等,产生的大数据相比,具有独特的特征:(1)采集频率高;(2)海量采集终端产生海量数据;(3)采集的每条记录字段数固定;(4)具有鲜明的空间和时间特征。不仅如此,面向采集类数据的查询也具有独特的特征:(I)多维区间查询特征明显;⑵查询维度一般固定;⑶聚集值(如记录的总数,各列的Sum、Max、Min等)查询比例较大。
[0003]由于上面提到采集类数据与查询的显著特征,提供数据存储与分析的系统需要具备以下的特征:(I)快速写入能力;(2)动态可扩展性;(3)高效的多维区间查询能力。面对高频率采集的海量数据,系统应具有高吞吐的写入能力;随着采集频率的增加,数据量会急速膨胀,所以系统应具有良好的可扩展性,通过增加系统规模来应对大数据的冲击;最后,系统应具有高效的多维区间索引结构,以应对业务需求。
[0004]在云计算环境下,目前具有上述特征的系统主要分为三类:
[0005]NoSQL系统,是一种为了应对大数据产生的分布式存储系统,下面按照数据模型分类,介绍NoSQL领域的一些典型代表,以阐述其实现原理、特点与在处理采集类海量数据方面的不足。
[0006]稀疏列存储多版本表数据模型:典型代表为BigTable、HBase与Cassandra。该类系统的数据模型,如图1所示,每条记录通过行键、列族、列名与时间戳作为键值进行查找,数据分布模型一般采用DHT (Distributed Hash Table,分布式哈希表)或可扩展区间表。该类系统具有高速读写能力与良好的可扩展性,但是查询能力有限,如HBase,只能提供基于键值的一维查询与简单的二维查询(但是二维查询速度较低);Cassandra提供基于键值的一维查询,此外还提供基于哈希的多维索引能力(但是无法提供多维区间查询能力)。
[0007]键值数据模型:典型代表为Dynamo与Voldemort。该类系统采用简单的键值数据模型,并使用DHT进行数据分布。该类系统具有高速读写吞吐能力与良好的扩展性,但是其查询能力有限,只提供简单的基于键值的一维查询能力。
[0008]文档类数据模型:典型代表为MongoDB。该类系统采用基于文档的数据模型,例如MongoDB采用类似Json的Bson结构。该类系统具有良好的可扩展性,提供了功能强大的查询接口,并具有多维索引功能。但是,该类系统的写入速度很慢,很难满足采集类大数据的写入需求。
[0009]NewSQL系统,是一种结合传统RDBMS与NoSQL优点的新一代数据存储与处理系统。其兼具传统RDBMS的ACID特性与NoSQL良好的可扩展性。下面以典型代表VoltDB来阐述NewSQL系统的实现原理、特点与在处理采集类海量数据方面的不足。[0010]VoltDB:是一种基于内存的分布式OLTP数据库,不仅具有NoSQL良好的可扩展性,还具有RDBMS的ACID特性。在VoltDB中,单个事务是以预定义好的存储过程的形式存在的,这样可以最大限度地避免网络通信。但是VoltDB的数据全部保存在内存中,很难满足海量采集类数据存储的需求。
[0011]批处理分析系统,是一种构建于分布式存储上的海量数据仓库,提供类SQL的查询接口,下面以几类典型代表来阐述批处理分析系统的实现原理、特点与在处理采集类海量数据方面的不足。。
[0012]Hive、Pig:两个系统都是以 HDFS (Hadoop Distributed File System, Hadoop分布式文件系统)作为存储层,并提供丰富的类SQL查询语句,通过将查询语句转换为MapReduce任务进行数据查询与分析。
[0013]Shark =Shark以HDFS作为存储层,并使用Hive的查询语言与编译系统,通过将查询结果以工作集的形式缓存在内存,从而提高后面查询或者迭代算法的速度。
[0014]Impala =Impala以HDFS作为存储层,使用并行数据库的查询流程代替MapReduce,通过将查询转换为HDFS本地读的操作,从而大大提高查询速度。
[0015]可以从上面3类批处理分析系统的介绍中发现,这类系统一般以HDFS作为存储层,所以具有良好的写入速度与良好的可扩展性,并且提供丰富的类SQL查询语言。但是,由于缺乏多维索引结构,造成多维区间查询缓慢,难以满足采集类大数据的查询需求。
[0016]上面所述前两类系统,都需要将采集类数据入库,保存为系统可以识别的数据形式,才能提供查询,入库的速度往往比较慢。但是一旦数据入库,查询速度就会比较快。而第三类系统,无需入库过程,可以直接在文件系统之上进行数据查询,但是查询缓慢。所以最好的方法为结合两者的优点,即在文件系统之上提供前两类系统的功能。

【发明内容】

[0017]本发明所要解决的技术问题在于克服现有系统无法同时满足采集类大数据多维区间查询需求与快速写入能力、动态可扩展性的缺陷,提出了一种基于云计算多维区间查询方法及其系统。
[0018]为实现上述目的,本发明提供了一种基于云计算的多维区间查询方法,其特征在于,所述方法,包括:
[0019]索引创建步骤:通过外部输入的索引创建命令,自动创建并保存分布式网格文件索引和元数据;
[0020]多维区间数据查询步骤:通过外部输入的查询命令,基于分布式网格文件索引和元数据,定位需要读取的数据块,并将读取请求自动均匀分布到服务器集群的各个节点后,在系统中并行处理查询请求,并行获取所有查询结果,经汇总后返回给用户。
[0021]上述基于云计算的多维区间查询方法,其特征在于,所述分布式网格文件索引包含多个网格文件单元块GFU,所述网格文件单元块GFU由坐标信息key及所述key对应的value值进行标识,并作为key/value对进行保存;所述元数据为所述数据块的位置信息、所述分布式网格文件索引的每个维度的区间长度信息和索引层数。
[0022]上述基于云计算的多维区间查询方法,其特征在于,所述分布式网格文件索引包含多层网格文件索引,所述网格文件依据不同粒度被划分为多层网格文件结构。[0023]上述基于云计算的多维区间查询方法,其特征在于,所述key包含:所述GFU坐标值和所述GFU所在的所述多层网格索引的层数。
[0024]上述基于云计算的多维区间查询方法,其特征在于,所述分布式网格文件单元块的key/value对通过哈希算法映射到分布式哈希表DHT中进行保存。
[0025]上述基于云计算的多维区间查询方法,其特征在于,所述value值中包含:头部header 大小、header 和 List〈Block_Location>。
[0026]上述基于云计算的多维区间查询方法,其特征在于,所述header中记录所述数据块的聚集值,所述聚集值为建立索引时预计算获取的位于所述网格文件单元块中数据的统计信息。
[0027]上述基于云计算的多维区间查询方法,其特征在于,所述List〈Block_Location>为Block_Location的集合,所述Block_Location包含:用于记录所述数据块所在的文件名称、块偏移和块内索引。其中,所述块偏移为所述数据块在所述文件中的偏移量,所述块内索引为数据在块内的偏移量。
[0028]上述基于云计算的多维区间查询方法,其特征在于,所述索引创建由MapReduce计算框架完成。
[0029]上述基于云计算的多维区间查询方法,其特征在于,所述方法,还包括:
[0030]命令解析步骤:用于将外部输入的所述查询命令或索引创建命令进行格式解析。
[0031]上述基于云计算的多维区间查询方法,其特征在于,所述多维区间数据查询步骤,还包括:
[0032]协调处理步骤:将所述查询命令分解并包装成所述查询请求进行分发,并汇总接收处理完成所述查询结果反馈客户端;
[0033]查询处理步骤:接收所述查询请求,并行完成处理后,汇总所述查询结果返回给所述协调处理步骤。
[0034]上述基于云计算的多维区间查询方法,其特征在于,所述协调处理步骤,还包括:
[0035]Key集合获取步骤:根据所述解析后查询命令,转化为多维区间查询条件,并且查询所述元数据,通过所述索引的每个维度区间长度信息,获取所述索引的所述GFU的Key的集合;
[0036]区域划分步骤:根据已经获取的所述Key集合,将所述Key集合中根据所述查询条件将查询空间划分为内部区域和边缘区域,所述内部区域为完全符合所述查询条件的区域,所述边缘区域为部分符合所述查询条件的区域;
[0037]判断步骤:根据所述解析后查询命令,判断是否为聚集值查询,并且根据所述Block_Location,判断是否有块内索引;
[0038]聚集值查询步骤:如果为所述聚集值查询,对于内部区域,直接从所述分布式哈希表DHT中得到所述内部区域对应的header,从所述header中直接读取所述聚集值,将所述聚集值作为所述查询结果的一部分,等待合并;对于边缘区域,从所述分布式哈希表DHT中得到对应的所述List〈Block_Location>信息,获取需要查询的数据块名称集合。
[0039]非聚集值查询步骤:如果为非聚集值查询,需要从所述分布式哈希表DHT中得到所述内部区域和所述边缘区域对应的所述List〈Block_Location>值,获取需要查询的所述数据块名称集合。[0040]访问数据块集合步骤:对于所述数据块名称集合,如果有所述块内索引,则合并相同块的所述块内索引,得到最终所需的查询的数据块名称集合;如果没有所述块内索引,将所述数据块名称集合进行去重,得到最终所需的查询的数据块名称集合。
[0041]查询物理地址步骤:根据所述最终数据块名称集合,查询所述元数据得到需要查询的所述数据块的位置信息;
[0042]块读取请求分配步骤:将所述数据块的查询请求自动均衡的定位分配到服务器集群中的各个节点,所述查询请求包含:分配到本节点的所述数据块位置信息和所述查询条件,或所述数据块位置信息和所述块内索引和所述查询条件;
[0043]等待返回步骤:执行所述查询处理步骤后,将所述查询结果合并后返回客户端。
[0044]上述基于云计算的多维区间查询方法,其特征在于,所述查询处理步骤,还包括:
[0045]查询并行处理步骤:对所述查询请求并行处理,并行进行数据查询,返回所述查询结果;
[0046]生成最终查询结果步骤:根据所述查询条件并行检查返回的查询结果,如果满足所述查询条件则所述查询结果为结果集的一部分,合并所有所述查询结果和所述聚集值查询步骤中获取的所述聚集值,作为最终查询结果,执行所述等待返回步骤。
[0047]进一步的,本发明提供的基于云计算的多维区间查询系统,采用所述多维区间查询方法,所述查询系统部署在服务器集群的各个节点,其特征在于,所述系统,包括:
[0048]索引创建模块:通过外部输入的索引创建命令,自动创建并保存分布式网格文件索引和元数据;
[0049]多维区间数据查询模块:通过外部输入的查询命令,基于分布式网格文件索引和元数据,定位需要读取的数据块,并将读取请求自动均匀分布到服务器集群的各个节点后,在系统中并行处理查询请求,并行获取所有查询结果,经汇总后返回给用户。
[0050]上述基于云计算的多维区间查询系统,其特征在于,所述系统,还包括:
[0051]命令解析模块:用于将外部输入的所述查询命令或索引创建命令进行格式解析。
[0052]上述基于云计算的多维区间查询系统,其特征在于,所述分布式网格文件索引包含多个网格文件单元块,所述网格文件单元块由坐标信息key及所述key对应的value值进行标识,并作为key/value对进行保存;所述元数据为所述数据块的位置信息和索引的每个维度的区间长度信息和索引层次。
[0053]上述基于云计算的多维区间查询系统,其特征在于,所述索引创建模块,还包括:
[0054]索引信息存储模块:用于保存所述分布式网格文件索引和所述元数据。
[0055]上述基于云计算的多维区间查询系统,其特征在于,所述多维区间数据查询模块,还包括:
[0056]协调处理模块:用于将所述查询命令分解并包装成所述查询请求进行分发,并汇总接收处理完成所述查询结果反馈客户端;
[0057]查询处理模块:接收所述查询请求,并行完成处理后,汇总所述查询结果返回给所述协调处理模块。
[0058]并行数据读取模块:用于接收所述查询处理模块发送的所述子查询命令,并行读取文件系统中的数据;
[0059]数据块位置信息收集模块:用于定时收集数据块的位置信息,并保存在所述元数据中。
[0060]与现有技术相比,本发明具有以下有益效果:
[0061]1、本发明米用的DGFIndex(Distributed Grid File Index,分布式网格文件索引);为HDFS中数据提供多维区间索引结构,可以大大减少查询数据量,从而提高查询速度;
[0062]2、本发明基于DGFIndex的多维区间查询系统可提供DGFIndex索引创建、数据高速写入与快速多维区间查询功能;
[0063]3、本发明基于多级DGFIndex的过滤区域缩减技术可减少需要读取的数据量,进一步提高查询速度。
[0064]4、本发明中采用的块分配算法可消除数据块重复读取,均衡需要读取的数据块在服务器集群中的分布。
[0065]5、基于GFUIndex的聚集值预计算技术可加速多维区间聚集值查询的速度。
[0066]总之,本发明采用基于DGFIndex的多维区间索引结构,可以大大减少需要读取的数据量,并将用户的查询均衡的分布到服务器集群中的各个节点上,从而提供比现有系统更快的多维区间查询速度。与此同时,保持了 HDFS快速的数据写入能力与良好的可扩展性。
【专利附图】

【附图说明】
[0067]图1为NoSQL稀疏列存储多版本表数据模型;
[0068]图2为本发明的DHT结构;
[0069]图3为本发明的网格文件索引示意图;
[0070]图4为本发明的HDFS结构示意图;
[0071]图5为本发明的MapReduce计算流程;
[0072]图6为本发明的DGFIndex结构图;
[0073]图7为本发明的GFU结构;
[0074]图8为本发明的具有块内索引的Block_Location的一种形式;
[0075]图9为本发明的DGFIndex中过滤问题示意图;
[0076]图10为本发明的多层DGFIndex示意图;
[0077]图11为本发明的基于云计算的多维区间查询系统逻辑架构;
[0078]图12为本发明的基于云计算的多维区间查询方法流程示意图;
[0079]图13为本发明的协调处理步骤流程示意图;
[0080]图14为本发明的查询条件定位DGFKey集合示意图;
[0081]图15为本发明的constructGFUKey不意图;
[0082]图16为本发明的GFUValue合并示意图。
[0083]其中,附图标记:
[0084]I索引创建模块 2多维区间数据查询模块
[0085]3命令解析模块
[0086]11索引信息存储模块
[0087]21协调处理模块22查询处理模块[0088]23并行数据读取模块 24数据块位置信息收集模块
[0089]SI?S2、S21?S22、S211?S218、S221?S222:本发明各实施例的施行步骤
【具体实施方式】
[0090]以下结合附图和具体实施例对本发明进行详细描述,但不作为对本发明的限定。
[0091]下面结合附图和【具体实施方式】,对本发明做进一步的说明。
[0092]本发明提供了一种面向采集类大数据的多维区间查询方法及其系统。本发明整合了 HDFS存储系统高吞吐、良好可扩展性的优势,与Grid File良好的多维区间索引能力,并使用基于DHT的Key/Value数据库存储DGFIndex,借此将查询均衡地分布在服务器集群中,从而提供直接在HDFS上的多维区间查询能力。
[0093]为了使本发明的目的,技术方案及优点更加清楚明白,以下结合附图通过具体实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0094]为了方便后面的描述,首先介绍一些术语以及用到的一些系统:
[0095]DHT,全称Distributed Hash Table,即分布式哈希表。DHT提供了一种动态进行分布式存储和路由的方法。如图2所示,一个哈希函数的输出范围被视为一个固定的很大的环形空间,系统中每一个服务器节点都被分配空间中一个随机的值,代表服务器节点在环上的位置,如图2中所示的节点。这种数据分布方式为系统提供了良好的扩展性,加入或移除服务器节点时也只能有少量的数据需要重新分配。为保证系统具有良好的可用性,系统中存储的数据一般会设置副本,即存储多份。
[0096]Grid File,即网格文件。Grid File是一种良好的多维区间索引结构,结构如图3所示,图中以二维查询空间为例,Grid File按照X和Y维度对查询空间进行划分,X维度每隔10划分为一个区间,Y维度每隔30划分为一个区间。假设有某个查询,条件为15 < X< 35且15 < Y < 75,这样通过Grid File可以快速定位需要访问的区域(虚线所围的区域)。二维以上的空间思想类似。
[0097]Hadoop,主要由两部分构成:
[0098]HDFS,全称 Hadoop Distributed File System,即 Hadoop 分布式文件系统。HDFS具有良好的可扩展性、高可用性以及高吞吐的特点。HDFS采用主从结构,如图4所示,主节点叫做名字节点,主要负责保存文件的块构成信息与块位置;从节点叫做数据节点,主要负责管理本节点中的数据块。一般HDFS服务器集群由一个名字节点与多个数据节点构成。HDFS为基于数据块的存储,即文件被分割为固定大小的数据块,分布于服务器集群中,数据块较大,一般为64MB,数据块的大小是可以调节的。如图3所示,假设某个保存于HDFS中的文件由块1,2,3,4,5构成,可以看到,块被均匀的分布在数据节点中。为了提供系统可用性(即某个节点宕机后,系统仍可提供服务),每个块有一个副本,如果保存某个块的节点宕机了,可以从其他节点读取。当客户端读取HDFS中的数据时,先与名字节点通信,得到相关数据块的位置,然后再与数据节点通信,读到所需数据。
[0099]MapReduce,是构建于HDFS之上的计算框架,由于其计算流程主要由Map与Reduce函数构成而得名。主要计算流程如图5所示,首先输入数据会自动分割成分片,一般与HDFS中块大小一致,然后每个分片由一个Map函数处理。然后Map处理后的结果经过洗牌和排序,分割为Reduce数量的输入,每份输入由Reduce函数处理,最终Reduce将计算结果输出。用户只需书写Map与Reduce函数的计算逻辑,而其他所有的工作都由Hadoop的MapReduce框架自动完成。
[0100]下面首先描述DGFIndex的结构。
[0101]DGFIndex,全称 Distributed Grid File Index,即分布式网格文件索引。DGFIndex由众多GFU组成,GFU全称Grid File Unit,即网格文件单元块,如图3中各个小方块。DFGIndex基于DHT+Grid File构建,利用DHT良好的可扩展性,将GFU分布于DHT中的节点,通过采用副本策略,提升了索引的可用性与读取性能。
[0102]Grid File可以按照查询维度将查询空间划分为GFU。GFU以每个块左下角坐标为Key,以其中的值列表为Value。这样就可以将DFGIndex中的GFU以Key/Value对的形式,通过一致性哈希算法映射到DHT中。如图6所示(这里未标识存在副本的情况),查询空间按照X维和Y维分为16个GFU,每个GFU通过Key的哈希值映射到服务器集群中各个节点上,如GFU A被映射到I号节点,GFU B被映射到7号节点。
[0103]DGFIndex中每个GFU的结构在DHT中保存为Key/Value对,其中Key为GFU左下角坐标的值,Key中包含了 GFU的多维坐标值和GFU在多层网格文件中的所在层数,将多维坐标转换为一维Key的方法有很多种,比如简单使用将多维坐标值进行字符串连接,例如:10_30_1,10表示X维坐标,30表示Y维坐标,I表示GFU在多层网格文件中的第I层。
[0104]而Value的格式如图7所示,由三部分构成:
[0105]头部Header大小,当该GFU需要过滤或无需计算聚集值时,可以略过Header,直接读取相关数据块的位置信息。
[0106]头部Header, Header中记录位于GFU中相关数据的聚集值,聚集值在创建索引时预计算得到,该聚集值为建立索引时预计算获取的位于网格文件单元块中数据的统计信息,例如:位于该GFU中记录的总数,各列的Sum、Max、Min等。
[0107]List<Block_Location> 为 Block_Location 的集合,记录位于该 GFU 中数据在相关HDFS Block块中的位置。这样可以利用HDFS提供的接口函数直接读取相关块。通过将HDFS上的多维区间查询改为分布式并行顺序读操作,大大加快查询速度。其中,Block,Location包含:用于记录数据块所在的文件名称、块偏移和块内索引,其中,块偏移为数据块在所在文件中的偏移量,块内索引为数据在块内的偏移量。
[0108]当查询为聚集值查询时,DGFIndex定位的区域分为两部分,内部区域和边缘区域,内部区域为完全匹配查询条件的区域,边缘区域为不能完全匹配查询条件的区域,内部区域可以直接读取Header中预计算的聚集值,而无需访问HDFS ;边缘区域需要根据List〈Bl0Ck_L0Cati0n>中的Block位置信息,从HDFS读取数据并过滤分析。为了说明该问题,以二维空间为例。如图9,查询区域为A:{(x,y) |bl≤X≤b2,b3≤y≤b4},但是经过DGFIndex定位到的区域为B: {{x, y} | al ^ x ^ a2, a3 ^ y ^ a4},其中区域C为内部区域:{(x,y) I Cl≤X≤c2,c3≤y≤c4}为结果集的一部分,不需要数据过滤。而区域C-B是边缘区域,有需要过滤的部分,因为该区域中存在一部分不属于结果集。直观来讲,需要过滤的区域越大,性能损耗越大,所以应尽量减小需要过滤的区域。
[0109]在DGFIndex中,我们采用多层Grid File的形式来减小过滤区域,依据不同粒度,将查询空间划分为多层Grid File结构。因为HDFS中的块大小是可调节的,所以在某些环境中,块会比较大,这样读取并解析块的耗时会比较长,这就造成多维区间查询速度很慢。造成这个问题的根本原因是,某个GFU只与块中的一小部分数据相关,但是我们却读取并解析了块中的全部数据。为了克服这个问题,本发明在Bl0Ck_L0Cati0n中建立了块内索弓丨,索引的形式有很多种,如图8所示,展示了其中一种形式,即记录相关数据相对块起始位置的偏移量,这样在读取某个块时,只需读取并解析相关数据,略过无关数据,可以大大加快查询速度。块内的索引是为了定位块内的数据,从而避免读取整块数据;而多层网格文件是为了减少边缘区域的大小。
[0110]如图10所示,在图9索引的基础上,对查询空间进一步细分,纵横实线为第一层DGFIndex索引,以较大的粒度分割查询空间。纵横虚线为第二层DGFIndex索引,以较小的粒度分割查询空间。查询区域与图9相同,依然为A。当查询来临时,先在第一层DGFIndex中搜索相关区域,找到图9中的区域B,其中不需要过滤的区域为C,需要过滤的区域为C-B。占整个查询区域的33.33% (假设第一层DGFIndex中每个GFU大小相等)。然后,在第二层DGFIndex索引中,对需要过滤的区域进一步细化搜索,得到需要过滤的区域为D-C,其中,区域D为{(x,y) |dl≤X≤d2,d3≤y≤d4}。此时,需要过滤的区域占整个查询空间的13.33% (假设第二层DGFIndex中每个GFU大小相等)。两层DGFIndex的使用使需要过滤的区域减少了 60.01%。由此可知,如果使用更多层次的DGFIndex,可以使需要过滤的区域进一步减少,但是层次越多,构建索引的过程就会越缓慢,索引占用的空间越大,所以需要根据实际应用做一定的权衡。
[0111]当然,多层DGFIndex也可以应用于非聚集值查询,这样就可以缩小查询边缘区域,从而减少需要读取的数据量,最终加快查询速度。
[0112]本发明提供了一种基于云计算的多维区间查询系统,如图11所示,在服务器集群中,每台数据节点都需部署DGFIndex查询系统服务器,任何一台DGFIndex服务器都可以接收客户端查询,基于DGFIndex的多维区间查询系统主要由2个模块构成:
[0113]索引创建模块1,多维区间数据查询模块2 ;
[0114]进一步,多维区间查询系统,还包括一命令解析模块3:用于将外部输入的所述查询命令或索引创建命令进行格式解析;命令解析模块3由命令解析器构成,由于本系统提供SQL查询接口,所以命令解析模块3主要负责SQL解析,解析为多维区间数据查询模块2和索引创建模块I可以识别的形式。
[0115]索引创建模块1:通过外部输入的索引创建命令,自动创建数据索引。索引创建模块I包含:索引创建处理器,MapReduce任务提交器和MapReduce计算框架;索引创建处理器接收命令解析器解析后的索引创建命令,生成MapReduce任务,并将该任务交给MapReduce任务提交器。该MapReduce任务生成的索引信息会写入DGFIndex,而索引的维度信息与索引层次信息会写入元数据中。MapReduce任务提交器,负责接收索引创建处理器生成的MapReduce任务,并将该任务发送到MapReduce计算框架,进行索引创建。
[0116]其中,索引创建模块1,还包括:
[0117]索引信息存储模块11:用于保存分布式网格文件索引DGFIndex和元数据。该模块负责存储索引相关数据,服务器集群信息以及数据块位置信息。DGFIndex中保存各个索引中的GFU Key/Value对;元数据中保存所有已创建索引的表中全部数据块的位置信息、每个索引各个维度的区间信息和索引层次。[0118]多维区间数据查询模块2:通过外部输入的查询命令,基于分布式网格文件索引DGFIndex和元数据,生成定位查找数据块的查询请求,并将查询请求自动均匀分布到服务器集群的各个节点后,在系统中并行处理查询请求,并行获取所有查询结果。
[0119]进一步的,多维区间数据查找模块2,还包括:
[0120]协调处理模块21:用于将所述查询命令分解并包装成所述查询请求进行分发,并汇总接收处理完成所述查询结果反馈客户端;协调处理模块由协调器构成,协调器具有分发汇总与接收返回的功能。分发汇总:接收命令解析器解析后的查询命令,读取元数据,获取查询涉及数据块的位置信息,从而将查询请求分解为子查询请求并分发到服务器集群中其他节点。发送结束后,协调器需等待所有子查询请求任务的返回,并汇总子查询结果返回给用户。如果某个子查询请求任务超时未返回,则将该子查询请求任务进一步分解为更小的子任务,发送到其他节点(或将子查询直接发送到其他节点)。接收返回:接收由其他节点发送过来的子查询请求命令,然后将子查询请求任务发送给查询处理器进行处理。待查询处理器处理结束后,将子查询结果发送到子查询来源节点的协调器。
[0121]查询处理模块22:接收所述查询请求,并行完成处理后,汇总所述查询结果返回给所述协调处理模块。查询处理模块22由查询处理器构成,用于接收来自协调器的查询请求,通过HDFS并行数据读取器并行读取块数据处理,并行处理结束后,汇总结果返回协调器。
[0122]并行数据读取模块23:用于接收查询处理模块22发送的查询请求,并行读取文件系统中的数据;并行数据读取模块23由HDFS并行数据读取器构成。该模块主要负责与Hadoop的交互。负责接收来自查询处理器的数据读取请求,然后并行读取HDFS数据。
[0123]数据块位置信息收集模块24:用于定时收集数据块的位置信息,并保存在元数据中。数据块位置信息收集模块24由HDFS块信息收集器构成。负责定时收集所有已创建索引表的全部数据块的位置信息,并保存在元数据中。
[0124]本发明提供一种基于云计算的多维区间查询方法,如图12所示,具体步骤如下:
[0125]索引创建步骤S1:通过外部输入的索引创建命令,自动创建并保存分布式网格文件索引和元数据;
[0126]多维区间数据查询步骤S2:通过外部输入的查询命令,基于分布式网格文件索引和元数据,定位需要读取的数据块,并将读取请求自动均匀分布到服务器集群的各个节点后,在系统中并行处理查询请求,并行获取所有查询结果,经汇总后返回给用户。
[0127]本发明提供的一种基于云计算的多维区间查询方法,步骤还包括:
[0128]命令解析步骤S3:用于将外部输入的查询命令或索引创建命令进行格式解析。接收客户端的查询命令或索引创建命令,将其转换为系统可以识别的形式,然后将其传递给协调器。
[0129]其中,多维区间数据查询步骤S2,还包括:
[0130]协调处理步骤S21:将查询命令分解并包装成查询请求进行分发,并汇总接收处理完成查询结果反馈客户端;
[0131]查询处理步骤S22:接收查询请求,并行完成处理后,汇总查询结果返回给协调处理步骤。查询处理器接收协调器的查询请求,得到本节点需要处理的HDFS数据块名称集合与对应的GFUKey集合。[0132]其中,协调处理步骤S21,如图13所示,还包括:
[0133]Key集合获取步骤S211:根据解析后查询命令,转化为多维区间查询条件,并且查询元数据,通过索引的每个维度区间长度信息,获取索引的GFU的Key的集合;
[0134]区域划分步骤S212:根据已经获取的Key集合,将Key集合中根据查询条件将查询空间划分为内部区域和边缘区域,内部区域为完全符合查询条件的区域,边缘区域为部分符合查询条件的区域;
[0135]首先,查询元数据,得到索引列的分区信息,根据多维区间查询条件与索引列分区信息可以定位到的所有相关GFUKey集合,如图14,查询条件为15 < X < 30且15 < Y < 75,索引列分区信息记录X最小值为0,分区区间为10,Y最小值为0,分区区间为30。经过定位得到查询相关的GFUKey集合。该集合分为两部分:内部区域与边缘区域。在图14中,内部区域的GFUKey集合为{20_30_1},边缘区域GFUKey集合为{10_0_1,20_0_1,30_0_1,10_30_1,30_30_1,10_60_1,20_60_1,30_60_1}。
[0136]判断步骤S213:根据解析后查询命令,判断是否为聚集值查询,并且根据Block_Location,判断是否有块内索引;根据解析后查询命令的的抽象语法树,查看在Select部分是否有聚集值查询,从而判断是否为聚集值查询;
[0137]聚集值查询步骤S214:如果为所述聚集值查询,对于内部区域,直接从所述分布式哈希表DHT中得到所述内部区域对应的header,从所述header中直接读取所述聚集值,将所述聚集值作为所述查询结果的一部分,等待合并;对于边缘区域,从所述分布式哈希表DHT中得到对应的所述List〈Block_Location>信息,获取需要查询的数据块名称集合。
[0138]非聚集值查询步骤S215:如果为非聚集值查询,需要从分布式哈希表DHT中得到内部区域和边缘区域对应的List〈Block_Location>值获取需要查询的数据块名称集合。
[0139]如果为聚集值查询,则内部区域GFUKey集合与边缘区域GFUKey集合分别访问Key/Value 数据库的 getHeader 接口与 getList〈Block_Location> 接 口,内部区域 GFUKey集合得到所有的Header信息,边缘区域得到所有的List〈Block_Location>信息,然后合并所有的Header区域,得到内部区域的子结果。从List〈Block_Location>中得到所有需要访问的数据块名称集合;
[0140]如果为非聚集值查询,则将所有的GFUKey集合通过Key/Value数据库的getList〈Block_Location> 接 口得到所有的 List〈Block_Location>。从 List〈Block_Location〉中得到所有需要访问的数据块名称集合。
[0141]访问数据块集合步骤S215:对于数据块名称集合,如果有块内索引,则合并相同块的块内索引,得到最终所需的查询的数据块名称集合;如果没有块内索引,将数据块名称集合进行去重,得到最终所需的查询的数据块名称集合。
[0142]如果没有块内索弓丨,则将得到的块集合中的块去重,得到所有需要查询的块集合;如果有块内索引,则合并相同块的块内索引,得到所有需要查询的数据块名称集合与其内的块内索弓I,通过块内索引可以获取块内偏移量。
[0143]查询物理地址步骤S216:根据最终数据块名称集合,查询元数据得到需要查询的数据块位置信息;
[0144]块读取请求分配步骤S217:将数据块的集群位置信息自动均衡的定位分配到服务器集群中的各个节点,查询请求包含:分配到本节点的数据块位置信息和查询条件,或数据块位置信息和块内索引和查询条件;
[0145]根据运行块分配算法(后面描述),将数据块查询请求均衡分配到服务器集群中各个节点上。分配结束后,将各个节点的数据块位置信息或数据块位置信息和块内索引包装为查询请求发送到对应节点的协调器,将属于本节点的查询请求发送到查询处理器。
[0146]等待返回步骤S218:执行查询处理步骤S22后,将所述查询结果合并后返回客户端。所有请求返回后,将子查询结果合并返回给客户端。
[0147]其中,查询处理步骤S22,还包括:
[0148]查询并行处理步骤S221:对查询请求并行处理,并行进行数据查询,返回所述查询结果;
[0149]如有块内索引,将所有需要读取的HDFS数据块位置信息与块内索引发送给HDFS并行数据读取器;如没有块内索引,则只将所有需要读取的HDFS数据块位置信息发送给HDFS并行数据读取器,数据返回后,多线程并行处理各个块。
[0150]生成最终查询结果步骤S222:根据查询条件并行检查返回的查询结果,如果满足查询条件则查询结果为结果集的一部分,合并所有查询结果和聚集值查询步骤中获取的聚集值,作为最终查询结果,执行等待返回步骤S218。
[0151]如为聚集值查询,则将子查询结果与聚集值查询步骤S214中的Header子结果合并,返回客户端。
[0152]每个线程根据查询条件检查某条记录是否满足条件,如满足则计算每条记录的聚集值,该线程所有数据处理结束后,合并所有的聚集值,线程结束。
[0153]待所有线程结束后,合并所有线程返回的结果,将合并后的结果返回协调器。
[0154]HDFS并行数据读取器使用线程池,从查询处理器得到所需的块读取请求,然后并行读取块数据并返回。
[0155]以下结合具体实施例,进一步说明本发明的索引创建算法。
[0156]索引创建算法为一个MapReduce任务,分为Map函数和Reduce函数,Map函数的算法如下所示,Map函数的输入为HDFS块block、建立索引列下标列表indexFieldPosList、需要预计算聚集值的列下标列表aggregatorFieldPosList、索引列的分区信息fieldPartitionlnfo以及列分隔符delimeter,这些信息除block外全部由用户指定,此外,用户还需指定建立索引的表名(在HDFS中为一个目录,这样MapReduce框架可以将输入数据分块)。而block由MapReduce框架分割输入数据自动创建。
[0157]Map函数负责为块中的每行记录创建对应的GFUKey与GFUValue,第I行通过Hadoop提供的API得到块的偏移量,第2行遍历块中每行记录,第3行根据列分隔符deI imeter将每行记录分割为列列表f ieIdLi St,第4行根据参数索引列下标列表IndexFieldPosList得到所有索引列列表indexFieldList,第5行根据索引列列表与参数索引列分区信息fieldPattitionlnfo将索引列映射到对应的GFU中,得到GFUKey,第6行根据参数需要预计算聚集值的列下标列表aggragatorFieldPosList得到所有需要预计算聚集值的列列表aggregatorFieldList,第7行得到该条记录的偏移量(这一步可选,只有当需要创建块内索引的时候需要),第8行由得到的aggregatorFieldList、offset与offsetinBlock 构建 GFUValue,第 9 行将构建好的 GFUKey 与 GFUValue 传递给 Reduce 函数。[0158]算法Map(block,indexFieldPosList, aggregatorFieldPosList,fieldPartitionlnfo,delimeter)
[0159]1.0ffset — block, offset ()
[0160]2.for line ^ block
[0161]3.do f ieldList — line, split (delimeter)
[0162]4.1ndexFieldList 一 fieldList.subList(indexFieldPosList)
[0163]5.GFUKey — constructGFUKey(indexFieldList, fieldPartitionlnfo)
[0164]6.aggregatorFieldList 一 fieldList.subList (aggregatorFieldPosList)
[0165]7.0ffsetinBlock — offset+line.getBytesNum()
[0166]8.GFUValue — constructGFUValue (aggregatorFieIdList, offset,offsetinBlock)
[0167]9.submitToReduce (GFUKey, GFUValue)
[0168]上面第5行的constructGFUKey函数的逻辑如下所示,图15为该函数执行的一个例子,fieldPartitio nlnfo表示各个维度的最小值与区间值,在图15中,即为X维度最小值为0,区间值为10 'Y维度最小值为0,区间值为30。indexFieldList为Map中从每行得到的需要建立索引的列值,在图15中为(X:15,Y:75)。第2-4行得到各个维度映射到的GFU的坐标值,如图15中第一步所示。第5行为得到一维的GFUKey,图15中为第2步,将GFU的左下角坐标通过下划线连接,最后的I代表是第一层索引。
[0169]算法constructGFUKey (indexFieldList,f ieldPatitionlnfo)
[0170]1.StandardValueList <- 0
[0171]2.for indexField ^ indexFieldList
[0172]3.do standardValue — getStandardValue (fieldPartitionlnfo)
[0173]4.standardValueList 一 standardValueList U standardValue
[0174]5.return combine (standardValueList)
[0175]Map函数中第8行的constructDGFValue函数逻辑如下所示,该函数负责为每行记录生成其对应的GFUValue,第2行遍历所有需要预计算聚集值的列,第3_6行预计算每列的count、min、max和sum,因为目前只有一行记录,所以聚集值都为本身,而count为I。第7行构建该列的聚集值列表,第8行将所有列的聚集值列表保存在header中,第9行得到header的大小headersize,第10-14行构建List〈Block—location〉,因为目前只有一行记录,所以只需要记录处理的该块的偏移以及该条记录在块内的偏移量即可。第15行合并前面生成的 headersize、header 与 List〈Block—Location〉,即 GFUValue。
[0176]算法constructGFUValue (aggregatorFieldList,offset, offsetinBlock)
[0177]1.header 0
[0178]2.for aggregatorFieId ^ aggregatorFieldList
[0179]3.do count — I
[0180]4.min — aggr egat orF i e I d
[0181]5.max — aggr egat orF i e I d
[0182]6.s am — aggr egat orF i e I d
[0183]7.aggregator 一 constructAggregator (aggregator, count,min, max, sum)
【权利要求】
1.一种基于云计算的多维区间查询方法,其特征在于,所述方法,包括: 索引创建步骤:通过外部输入的索引创建命令,自动创建并保存分布式网格文件索引和元数据; 多维区间数据查询步骤:通过外部输入的查询命令,基于分布式网格文件索引和元数据,定位需要读取的数据块,并将读取请求自动均匀分布到服务器集群的各个节点后,在系统中并行处理查询请求,并行获取所有查询结果,经汇总后返回给用户。
2.根据权利要求1所述基于云计算的多维区间查询方法,其特征在于,所述分布式网格文件索引包含多个网格文件单元块GFU,所述网格文件单元块GFU由坐标信息key及所述key对应的value值进行标识,并作为key/value对进行保存;所述元数据为所述数据块的位置信息、所述分布式网格文件索引的每个维度的区间长度信息和索引层次。
3.根据权利要求2所述基于云计算的多维区间查询方法,其特征在于,所述分布式网格文件索引包含多层网格文件索引,所述网格文件依据不同粒度被划分为多层网格文件结构。
4.根据权利要求3所述基于云计算的多维区间查询方法,其特征在于,所述key包含:所述GFU坐标值和所述GFU所在的所述多层网格索引的层数。
5.根据权利要求4所述基于云计算的多维区间查询方法,其特征在于,所述分布式网格文件单元块的key/value对通过哈希算法映射到分布式哈希表DHT中进行保存。
6.根据权利要求5所述基于云计算的多维区间查询方法,其特征在于,所述value值中包含:头部 header 大小、header 和 List〈Block_Location>。
7.根据权利要求6所述基于云计算的多维区间查询方法,其特征在于,所述header中记录所述数据块的聚集值,所述聚集值为建立索引时预计算获取的位于所述网格文件单元块中数据的统计信息。
8.根据权利要求7所述基于云计算的多维区间查询方法,其特征在于,所述List<Block_Location> 为 Block_Location 的集合,所述 Block_Location 包含:用于记录所述数据块所在的文件名称、块偏移和块内索引。其中,所述块偏移为所述数据块在所述文件中的偏移量,所述块内索引为数据在块内的偏移量。
9.根据权利要求1所述基于云计算的多维区间查询方法,其特征在于,所述索引创建由MapReduce计算框架完成。
10.根据权利要求1所述基于云计算的多维区间查询方法,其特征在于,所述方法,还包括: 命令解析步骤:用于将外部输入的所述查询命令或索引创建命令进行格式解析。
11.根据权利要求1所述的基于云计算的多维区间查询方法,其特征在于,所述多维区间数据查询步骤,还包括: 协调处理步骤:将所述查询命令分解并包装成所述查询请求进行分发,并汇总接收处理完成所述查询结果反馈客户端; 查询处理步骤:接收所述查询请求,并行完成处理后,汇总所述查询结果返回给所述协调处理步骤。
12.根据权利要求11所述的基于云计算的多维区间查询方法,其特征在于,所述协调处理步骤,还包括:Key集合获取步骤:根据所述解析后查询命令,转化为多维区间查询条件,并且查询所述元数据,通过所述索引的每个维度区间长度信息,获取所述索引的所述GFU的Key的集合; 区域划分步骤:根据已经获取的所述Key集合,将所述Key集合中根据所述查询条件将查询空间划分为内部区域和边缘区域,所述内部区域为完全符合所述查询条件的区域,所述边缘区域为部分符合所述查询条件的区域; 判断步骤:根据所述解析后查询命令,判断是否为聚集值查询,并且根据所述Block_Location,判断是否有块内索引; 聚集值查询步骤:如果为所述聚集值查询,对于内部区域,直接从所述分布式哈希表DHT中得到所述内部区域对应的header,从所述header中直接读取所述聚集值,将所述聚集值作为所述查询结果的一部分,等待合并;对于边缘区域,从所述分布式哈希表DHT中得到对应的所述List〈Block_Location>信息,获取需要查询的数据块名称集合。 非聚集值查询步骤:如果为非聚集值查询,需要从所述分布式哈希表DHT中得到所述内部区域和所述边缘区域对应的所述List〈Block_Location>值获取需要查询的所述数据块名称集合。 访问数据块集合步骤:对于所述数据块名称集合,如果有所述块内索引,则合并相同块的所述块内索引,得到最终所需的查询的数据块名称集合;如果没有所述块内索引,将所述数据块名称集合进行去重,得到最终所需的查询的数据块名称集合。 查询物理地址步骤:根据所述最终数据块名称集合,查询所述元数据得到需要查询的所述数据块的位置信息; 块读取请求分配步骤:将所述`数据块的集群位置信息自动均衡的定位分配到所述服务器集群中的各个节点,所述查询请求包含:分配到本节点的所述数据块位置信息和所述查询条件,或所述数据块位置信息、所述块内索引和所述查询条件; 等待返回步骤:执行所述查询处理步骤后,将所述查询结果合并后返回客户端。
13.根据权利要求11所述的基于云计算的多维区间查询方法,其特征在于,所述查询处理步骤,还包括: 查询并行处理步骤:对所述查询请求并行处理,并行进行数据查询,返回所述查询结果; 生成最终查询结果步骤:根据所述查询条件并行检查返回的查询结果,如果满足所述查询条件则所述查询结果为结果集的一部分,合并所有所述查询结果和所述聚集值查询步骤中获取的所述聚集值,作为最终查询结果,执行所述等待返回步骤。
14.一种基于云计算的多维区间查询系统,采用如权利要求1-13任一项所述多维区间查询方法,所述查询系统部署在服务器集群的各个节点,其特征在于,所述系统,包括: 索引创建模块:通过外部输入的索引创建命令,自动创建并保存分布式网格文件索引和元数据; 多维区间数据查询模块:通过外部输入的查询命令,基于分布式网格文件索引和元数据,定位需要读取的数据块,并将读取请求自动均匀分布到服务器集群的各个节点后,在系统中并行处理查询请求,并行获取所有查询结果,经汇总后返回给用户。
15.根据权利要求14所述基于云计算的多维区间查询系统,其特征在于,所述系统,还包括: 命令解析模块:用于将外部输入的所述查询命令或索引创建命令进行格式解析。
16.根据权利要求14所述基于云计算的多维区间查询系统,其特征在于,所述分布式网格文件索引包含多个网格文件单元块,所述网格文件单元块由坐标信息key及所述key对应的value值进行标识,并作为key/value对进行保存;所述元数据为所述数据块的位置信息和索引的每个维度的区间长度信息和索引层次。
17.根据权利要求14所述基于云计算的多维区间查询系统,其特征在于,所述索引创建模块,还 包括: 索引信息存储模块:用于保存所述分布式网格文件索引和所述元数据。
18.根据权利要求14所述基于云计算的多维区间查询系统,其特征在于,所述多维区间数据查询模块,还包括: 协调处理模块:用于将所述查询命令分解并包装成所述查询请求进行分发,并汇总接收处理完成所述查询结果反馈客户端; 查询处理模块:接收所述查询请求,并行完成处理后,汇总所述查询结果返回给所述协调处理模块。 并行数据读取模块:用于接收所述查询处理模块发送的所述子查询命令,并行读取文件系统中的数据; 数据块位置信息收集模块:用于定时收集数据块的位置信息,并保存在所述元数据中。
【文档编号】G06F17/30GK103678520SQ201310618681
【公开日】2014年3月26日 申请日期:2013年11月29日 优先权日:2013年11月29日
【发明者】刘越, 虎嵩林, 李彦虎, 刘万涛, 陈建, 李祥珍, 吴凯峰, 王志强, 张春光, 裴旭斌, 肖政, 崔蔚 申请人:中国科学院计算技术研究所, 国网浙江省电力公司信息通信分公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1