著录项信息
专利名称 | 海量结构化数据复杂查询任务的分布式查询方法和系统 |
申请号 | CN201110442091.0 | 申请日期 | 2011-12-26 |
法律状态 | 暂无 | 申报国家 | 中国 |
公开/公告日 | 2012-06-27 | 公开/公告号 | CN102521406A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F17/30 | IPC分类号 | G;0;6;F;1;7;/;3;0查看分类表>
|
申请人 | 中国科学院计算技术研究所 | 申请人地址 | 北京市海淀区首体南路22号楼十六层B区
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 国信电子票据平台信息服务有限公司 | 当前权利人 | 国信电子票据平台信息服务有限公司 |
发明人 | 吴广君;李超;王树鹏;云晓春;王勇;李斌斌 |
代理机构 | 北京泛华伟业知识产权代理有限公司 | 代理人 | 王勇 |
摘要
本发明提供一种海量结构化数据复杂查询任务的分布式查询方法和系统。其中海量结构化数据的分布式查询方法包括:接收用户发出的查询任务并将查询任务分解为多个查询子任务;以及根据该多个查询子任务中的每个查询子任务,对分布式存储的数据并发执行分批次查询,并分布式返回查询到的结果集。本发明采用的分批次查询并保持中间结果状态的查询方法,充分考虑了界面展示应用中小数据量快速查询的需求,同时也兼顾了统计、分析背景下的大结果集的统计需求。
1.一种海量结构化数据的分布式查询方法,包括:数据加载步骤和查询步骤,所述数据加载步骤包括:从用户端接收高速加载的数据,利用双滑动窗口结构,将加载的数据进行分布式缓存;其中该双滑动窗口结构包括数据写入窗口和数据查询窗口,该数据写入窗口用于接收实时加载的数据,并修改相关的系统元数据信息;该数据查询窗口用于接收查询子任务,并根据建立的元数据记录信息直接查询本窗口的数据;所述数据查询窗口和数据写入窗口根据时间周期进行流式转变,进行流式转变的方式如下:一个写入周期完成时,当前的数据写入窗口的角色转化为数据查询窗口,重新开辟新的缓存结构接收加载数据,生成新的数据写入窗口;当再经过一个写入周期,新的数据查询窗口产生,此时旧的数据查询窗口不再提供数据查询服务,回收该旧的数据查询窗口使用的资源,从而实现多个窗口之间的角色根据时间周期的流式转变;
所述查询步骤包括:
步骤1,接收用户发出的查询任务并根据查询条件将查询任务分解为多个查询子任务;
以及
步骤2,根据该多个查询子任务中的每个查询子任务,对分布式存储的各组数据并发执行分批次查询,并分布式返回查询到的结果集,其中,所述查询子任务被所述数据查询窗口接收,所述数据查询窗口根据建立的元数据记录信息对本窗口缓存的数据直接进行查询操作。
2.如权利要求1所述的分布式查询方法,还包括:步骤3,对分布式返回的结果集进行汇总,并将汇总后的结果集呈现给用户。
3.如权利要求1或2所述的分布式查询方法,其中步骤1包括根据分区类查询条件、过滤类查询条件或全局统计分析类查询条件将查询任务分解为多个查询子任务。
4.如权利要求3所述的分布式查询方法,其中根据分布式存储的数据的索引类型设置分区类查询条件。
5.如权利要求4所述的分布式查询方法,其中根据以时间属性建立的索引,以时间属性设置该分区类查询条件。
6.如权利要求3所述的分布式查询方法,其中对分布式存储的各组数据并发执行分批次查询的步骤包括针对分布式存储的每组数据执行以下步骤:
步骤211,为查询分布式存储数据的操作设置单次最大返回记录数目;
步骤212,根据查询子任务对存储的数据进行查询,并且基于该单次最大返回记录数目,获得结果集;
步骤213,判断该结果集中的记录数目是否达到单次最大返回记录数目,如果未达到单次最大返回记录数目,则执行步骤215,如果达到单次最大返回记录数目,则由用户确定是否继续进行查询,如果需要继续查询即为多次查询,则执行步骤214,否则为单次查询,执行步骤215;
步骤214,保存当前的查询状态并基于该查询状态继续进行查询,直到获得包括符合查询条件的所有记录的结果集;以及
步骤215,返回查询到的结果集。
7.如权利要求6所述的分布式查询方法,其中步骤212包括通过分区类查询条件获得目标索引分片,在每个索引分片上并发执行过滤类查询条件,以获得结果集。
8.如权利要求7所述的分布式查询方法,其中步骤212还包括:在获得结果集之后,执行全局统计、分析类查询条件。
9.如权利要求8所述的分布式查询方法,其中执行全局统计、分析类查询条件包括:根据查询子任务中的分组命令,利用hash算法进行数据集快速分组操作。
10.如权利要求8所述的分布式查询方法,其中执行全局统计、分析类查询条件还包括:根据查询子任务中的去重命令进行组内去重或全局去重。
11.如权利要求8所述的分布式查询方法,其中执行全局统计、分析类查询条件包括根据统计函数SUM、COUNT、AVG、MAX、MIN对查询结果计算统计结果,其中SUM是对分组后的字段计算具体数值,COUNT是统计记录条数,AVG是计算平均值,MAX是查询到的所有记录中的最大值,MIN是查询到的所有记录中的最小值。
12.如权利要求6所述的分布式查询方法,其中步骤212包括:当查询到的符合查询条件的记录数目达到该单次最大返回记录数目时获得结果集,或者虽然查询到的符合查询条件的记录未达到该单次最大返回记录数目但已经完成了对所有存储数据的查询时获得的结果集。
13.如权利要求6所述的分布式查询方法,其中步骤213包括:当该结果集中的记录数目等于单次最大返回记录数目时,将“未全面查询”的标记返回给用户,用户基于该标记根据实际需要确定是否继续查询。
14.如权利要求6所述的分布式查询方法,其中步骤214包括:为每个查询子任务提供一个与其相关的标识符,并且根据该标识符保存当前的查询状态。
15.如权利要求2所述的分布式查询方法,其中步骤3包括:
步骤311,将分布式返回的结果集进行合并;
步骤312,根据统计分析查询命令,对合并后的结果集执行全局统计、分析类操作;以及
步骤313,对生成的结果集根据用户要求的格式、路径生成结果文件,并将该结果文件呈现给用户。
16.如权利要求6所述的分布式查询方法,还包括在步骤214之后,对所有的结果集进行全局排序。
17.如权利要求2所述的分布式查询方法,其中步骤3包括通过分页查询机制,将汇总后的结果集分页呈现给用户。
18.如权利要求1或2所述的分布式查询方法,其中步骤2还包括:在对分布式存储的数据并发执行分批次查询的同时,对通过双滑动窗口结构实现分布式缓存的每组数据并发执行分批次查询,并分布式返回结果集。
19.如权利要求18所述的分布式查询方法,其中该双滑动窗口结构包括数据写入窗口和数据查询窗口,该数据写入窗口接收实时加载的数据,并修改相关的系统元数据信息;该数据查询窗口接收查询子任务,并根据建立的元数据记录信息直接查询本窗口的数据。
20.一种海量结构化数据分布式查询系统,包括:
数据加载装置,用于从用户端接收高速加载的数据,利用双滑动窗口结构,将加载的数据进行分布式缓存;其中该双滑动窗口结构包括数据写入窗口和数据查询窗口,该数据写入窗口用于接收实时加载的数据,并修改相关的系统元数据信息;该数据查询窗口用于接收查询子任务,并根据建立的元数据记录信息直接查询本窗口的数据;所述数据查询窗口和数据写入窗口根据时间周期进行流式转变,进行流式转变的方式如下:一个写入周期完成时,当前的数据写入窗口的角色转化为数据查询窗口,重新开辟新的缓存结构接收加载数据,生成新的数据写入窗口;当再经过一个写入周期,新的数据查询窗口产生,此时旧的数据查询窗口不再提供数据查询服务,回收该旧的数据查询窗口使用的资源,从而实现多个窗口之间的角色根据时间周期的流式转变;
用于接收用户发出的查询任务并根据查询条件将查询任务分解为多个查询子任务的装置;以及
用于根据该多个查询子任务中的每个查询子任务对分布式存储的数据并发执行分批次查询、并分布式返回查询到的结果集的装置。
海量结构化数据复杂查询任务的分布式查询方法和系统\n技术领域\n[0001] 本发明涉及一种信息安全领域中的海量数据管理系统和方法,更具体地涉及面向复杂查询任务的查询以及分布式数据管理方法和系统,主要用于信息安全领域网络报文的落地存储、分析和海量日志数据的统计、分析等应用。\n背景技术\n[0002] 当代信息安全领域中数据管理不再局限于传统的数据采样、分析等简单的数据处理方式,而是借助高效的数据存储系统,进行数据落地存储,并支持事后复杂的数据统计、分析等功能。\n[0003] 由于目前普遍使用的关系型数据库受到一致性约束,因此基于关系型数据库的查询方法和查询系统在海量数据存储和查询的条件下加载效率低、检索速度慢,而且无法实现系统的平滑扩容的目标。为了适应海量数据存储、查询等应用需求、提高数据的查询效率,提出了一种基于Hadoop开源分布式NO-SQL数据库(也称为KEY-VALUE型数据库),例如Hbase、Hypertable等,这些数据库通过降低一致性约束,提高了系统的存储规模与数据处理效率。但是基于Hadoop的NO-SQL数据库仅能提供KEY-VALUE查询模式,即根据给定的KEY值,查找对应的VALUE值或值区间,因此,其无法满足海量结构化数据的复杂条件的统计、分析查询功能。\n[0004] 现有技术中针对海量结构化数据的查询,有一种基于Hadoop实现的分布式数据仓库HIVE以及基于HIVE的查询方法和查询系统,其能够支持较完备的复杂SQL查询。虽然HIVE能够支持复杂的SQL查询,但是其存在以下不足:\n[0005] (1)HIVE需要查询到满足条件的所有记录后才将查询结果返回给用户使用,如果结果集过大用户需要等待大量的时间才能获得结果。因此导致HIVE实时查询效率较低、延迟大,无法实现在线数据加载与快速查询的目的,无法满足界面展示这种不需要大量结果集的查询应用。\n[0006] (2)HIVE中没有索引,其所有的查询操作都是通过读取原始数据文件执行的。因此,查询效率低。\n[0007] (3)HIVE的查询过程是用户通过HQL语言(一种类似于SQL语言的查询表达方式)描述查询规则,虽然通过HQL语言可以描述更复杂的关联查询、等值连接JOIN,但是由于其主要是面向MapReduce的任务分解方法(即在执行查询任务时,需要多次磁盘写入、读取操作),因此其执行效率低,并且其无法直接用于流记录数据的查询。\n[0008] (4)HIVE是从数据文件中读取数据的,因此不支持记录流式频繁加载方式,也不支持缓存加载数据或缓存查找数据。虽然现有技术中存储系统具有开辟缓存结构、提高数据加载效率的功能,但是需要等到缓存数据写入到磁盘中后才能支持查询操作,流式记录数据应用场合是持续不断的加载到系统中,而且近期数据相对具有更高的使用频率,因此传统方法无法满足查询的需求。\n[0009] 因此,在针对海量结构化数据的查询和管理领域,亟需一种能够支持复杂查询条件并且能够实现快速查询目的的方法和系统。\n发明内容\n[0010] 本发明要解决的技术问题是提供一种能够支持复杂的SQL查询并且能够实现快速查询的海量结构化数据分布式查询方法和系统。\n[0011] 根据本发明的一个方面,提出一种海量结构化数据的分布式查询方法,包括:步骤\n1,接收用户发出的查询任务并将查询任务分解为多个查询子任务;以及步骤2,根据该多个查询子任务中的每个查询子任务,对分布式存储的数据并发执行分批次查询,并分布式返回查询到的结果集。\n[0012] 根据本发明的另一方面,提出一种海量结构化数据分布式查询系统,包括:用于接收用户发出的查询任务并将查询任务分解为多个查询子任务的装置;以及用于根据该多个查询子任务中的每个查询子任务对分布式存储的各组数据并发执行分批次查询、并分布式返回查询到的结果集的装置。\n[0013] 本发明采用的分批次查询并保持中间结果状态的查询方法,充分考虑了界面展示应用中小数据量快速查询的需求,同时也兼顾了统计、分析背景下的大结果集的统计需求。\n附图说明\n[0014] 图1为根据本发明第一实施例的海量结构化数据分布式查询方法的流程图。\n[0015] 图2为根据本发明一个实例的对存储在硬盘中的数据进行分批查询并分批返回结果集的流程图。\n[0016] 图3为根据本发明另一实例的执行分批查询并分批返回结果集的流程图。\n[0017] 图4为示出对查询结果集进行汇总的各步骤的流程图。\n[0018] 图5为双滑动窗口结构及其工作原理的示意图。\n[0019] 图6为根据本发明第二实施例的海量结构化数据分布式存储方法的流程图。\n[0020] 图7为根据本发明第二实施例的海量结构化数据分布式查询方法的流程图。\n具体实施方式\n[0021] 在本发明的海量结构化数据的分布式存储方法和查询方法中,所采用的数据结构包括两个基本部分:全排序索引和记录数据。全排序索引是把记录所有的属性值根据字典序进行全排序。记录数据是把每条记录以行为单位按序存储。全排序索引支持过滤类查询条件,如WHERE中的查询条件。\n[0022] 在对本发明做详细说明之前,首先对本发明中所涉及的相关概念“分批次查询”进行定义。分批次查询指对具有大量查询结果集的查询任务,根据用户需求选择获得少量结果集的单次查询或获得所有结果集的多次查询。\n[0023] 下面结合附图和具体实施方式对本发明加以说明。\n[0024] 在针对海量结构化数据的查询方法中,通常采用分布式数据存储结构来实现海量数据的查询。\n[0025] 图1为根据本发明实施例的海量结构化数据分布式查询方法的流程图。如图1所示,本发明的海量结构化数据的分布式查询方法主要针对流记录数据,该方法包括以下步骤:\n[0026] 步骤1,接收用户发出的查询任务并将查询任务分解为多个查询子任务。\n[0027] 在海量数据查询过程中,针对具体的查询条件如果所有存储装置之间按照串行方式执行查询任务,则无法发挥出分布式系统的整体计算能力。因此,为了提高分布式环境下海量数据的查询效率,本发明对具体的查询任务进行分解,并将分解后的子任务发送到各个存储装置上进行并发执行。\n[0028] 根据本发明的一个实施例,可以根据分区类查询条件、过滤类查询条件或全局统计分析类查询条件将查询任务分解为多个查询子任务。其中,分区类查询条件是进行数据文件级别的查询,可以根据所存储的数据的索引类型设置分区类查询条件。例如,在本发明中,以时间属性为例为存储数据建立集中索引(基本的数据组织规则是根据时间属性把数据进行分块存储,数据分块之间保证时间属性的有序性,并建B+Tree索引支持统一的数据文件的查询,从而实现基于时间属性的文件级分区快速查找),则可以选用时间属性作为分区查询条件,通过在基于时间属性建立的B+tree索引中执行操作,来执行分区查询条件;\n过滤类查询条件针对目标索引文件内的具体记录进行过滤或匹配,这类条件可以在多个存储装置中并发执行。数据统计分析类查询条件,需要针对最后的结果集进行统一处理,才能保证查询语义的正确性。\n[0029] 除上述查询任务的分解方法之外,本领域技术人员可以理解还可以根据其它类型的查询条件对查询任务进行分解,以提高分布式环境下海量数据的查询效率。\n[0030] 本发明通过在分布式建立面向复杂条件的查询任务分解机制和并发子查询任务调度机制,从而充分利用分布式环境下的计算资源,并发执行查询子任务,以提高海量结构化数据的查询效率。\n[0031] 步骤2,根据该多个查询子任务中的每个查询子任务,对分布式存储的数据并发执行分批次查询,并分布式返回查询到的结果集。\n[0032] 在海量数据查询过程中,根据用户的查询条件可能会产生大量的结果集,甚至多达上亿条记录。处理如此大规模的结果集会占用大量时间,对于例如以B/S为应用背景的仅需要返回例如几百条记录界面展示来说,将所有的结果集都返回用户是没有必要的并且浪费了宝贵的数据处理时间。为此,本发明提出了分批查询的方法,以适用于海量数据查询需要快速返回结果集的需要。\n[0033] 图2为根据本发明一个实例的对存储在数据存储装置中的数据进行分批查询并分批返回结果集的流程图。如图2所示,其包括以下步骤:\n[0034] 步骤211,为查询操作设置单次最大返回记录数目(也称为阈值),例如将该阈值设置为100万条。\n[0035] 步骤212,根据查询子任务,对存储在各存储装置中的数据进行查询,并基于该阈值获得查询结果集。其中包括:当查询到的符合查询条件的记录数目达到阈值时获得结果集,例如当查询到100万条符合查询条件的记录时,将该100万条记录返回,还包括虽然查询到的符合查询条件的记录未达到阈值(例如100万条)但当已经完成了对整个存储装置的查询时获得的结果集。\n[0036] 步骤213,判断该结果集中的记录数目是否达到单次最大返回记录数目,如果未达到单次最大返回记录数目,则说明已经对整个数据存储装置进行了全面查询并且已经获得了所有符合查询条件的结果集,从而执行步骤215,如果达到单次最大返回记录数目,则将“未全面查询”的标记返回给用户,由用户确定是否继续进行查询,如果需要继续查询,则执行步骤214,否则执行步骤215。\n[0037] 步骤214,保存当前的查询状态并基于该查询状态继续进行查询。在本发明中,通过为每个查询子任务提供一个与查询子任务相关的标识符Session ID并根据Session ID保存查询状态。具体而言,对于同一个查询任务的多个批次的查询,其Session ID是相同的,因此在接收到查询子任务时,将查询子任务中的Session ID与保存的查询状态信息进行匹配,如果Session ID相同,则利用已保存的包括Session ID的查询状态信息,对上次查询中未查询到的数据进行查询,直到用户获得了所需的全部结果集。\n[0038] 步骤215,将查询到的结果集返回给用户。\n[0039] 根据本发明的另一实施例,还可以通过如图3流程图所示的步骤执行分批查询并分批返回结果集,其包括:\n[0040] 步骤D2100,为查询操作设置单次最大返回记录数目(也称为阈值),例如将该阈值设置为100万条。\n[0041] 步骤D2200,接收多个查询子任务,通过分区查询条件,获得目标索引分片,在每个索引分片上并发执行过滤类查询条件;并获得满足条件的结果集。\n[0042] 步骤D2300,判断查询子任务中是否有分组命令GROUP BY,如果有分组命令则执行步骤D2400,否则执行步骤D2500。\n[0043] 步骤D2400,利用Hash算法快速判断结果集是否属于同一个分组。Hash分组的具体方法是:使用Hash对需要分组的属性进行Hash计算,把得到的Hash值作为一个桶号标示,在标示的桶内放置Hash值与桶号相同的纪录。由于每个桶内是Hash值相同的记录,因此能够实现在O(1)时间内对记录的快速分组操作。\n[0044] 步骤D2500,判断查询子任务中是否有去重命令,即关键字DISTINCT,如果有则执行步骤D2600的;否则执行步骤D2700。\n[0045] 步骤D2600,对记录进行去重,区分DISTINCT出现在整条记录的前面、型如“SELECT DISTINCT…”,还是针对统计字段去重、型如“SELECT SUM(DISTINCT name)…”;对于型如“SELECT DISTINCT…”命令,表示针对整条记录去重,型如“SELECT SUM(DISTINCT name)…”表示针对分组name后的字段去重做统计(通常SUM与GROUP BY字段同时出现)。\n为了提高计算效率,数据去重时利用bloom filter进行加速重复字段的判断。\n[0046] 步骤D2700,判断查询条件中是否有SELECT…LIMIT K,一般K很小(比如K=\n100),远远小于单次最大返回记录数目(100万),如果有则在并发查询时每个查询子任务查询到满足条件的K条记录后停止查询,执行步骤D2810;否则执行步骤D2800。该步骤是针对流记录应用场合中,仅查询符合条件的一小部分数据应用情况而设计,在查询中即使没有达到分批的阈值,数据存储装置对于此类查询也不再缓存查询状态。\n[0047] 步骤D2800,判断查询到的记录数目是否达到阈值(例如100万条),如果达到了阈值,则将“未全面查询”的标记返回给用户,由用户根据实际需要确定是否继续查询,如果确定继续查询,则执行步骤D2820;如果确定不继续查询或者查询到的记录数目未达到阈值,则为单批次返回的结果集,执行步骤D2810。\n[0048] 步骤D2810,对于单批次返回的结果集,判断是否有统计函数SUM、COUNT、AVG、MAX、MIN函数,如果有执行步骤D2811,否则执行步骤D2812。\n[0049] 步骤D2811,根据统计函数命令,计算具体的数值,SUM是对分组后的字段计算具体数值,COUNT是统计记录条数,AVG是计算平均值,MAX是记录最大值,MIN是记录最小值。\n[0050] 步骤D2812,如果有排序操作命令,则进行数据排序。排序的功能包括:针对某一个字段的排序;或经过SUM、COUNT、AVG等统计函数计算的结果数据进行排序,关键字ASC表示升序排序,DESC表示降序排序,默认为升序排序。\n[0051] 步骤D2813,将结果集返回。\n[0052] 步骤D2820,将本次查询的中间结果文件暂存于临时文件中,支持与下一个批次的查询结果进行合并后得到最后的查询结果文件。\n[0053] 步骤D3821,根据查询子任务中的SessionID判断是否是新发起的查询请求。每次发出查询子任务时,在查询子任务中包含SessionID,同一个查询子任务中的SessionID相同。\n[0054] 步骤D2822,判断是否有去重命令;如果有去重命令执行步骤D2823,否则执行步骤D2824。\n[0055] 步骤D2823,根据DISTINCT关键字的位置,通过bloom filter进行字段去重。\n[0056] 步骤D2824,判断是否有分组命令,如果有分组命令执行步骤D2825;否则执行步骤D2826。\n[0057] 步骤D2825,统计分组过程先从临时文件中读取结果集,由于临时文件中保存的结果集是已经经过上次分组运算后的数据,只需比较每个分组的第一条记录,判断本批次的数据是否与上批次统计后的结果集属于同一分组。\n[0058] 步骤D2826,是否有统计函数SUM、COUNT、AVG、MAX、MIN、如果有则执行步骤D2827;\n否则执行步骤D2828。\n[0059] 步骤D2827,根据统计函数命令,计算具体的数值,SUM对分组后的字段计算具体数值,COUNT统计记录条数,AVG计算平均值,MAX选择最大值,MIN选择最小值。在计算过程中涉及到两个批次之间的合并操作。例如,对于COUNT、SUM直接与上一批次计算的结果累加;对于MAX、MIN统计函数选取当前批次与上一个批次的最大或最小值。\n[0060] 步骤D2828,判断分批次查询是否结束,即判断是否已查询了所有的数据集,如果没有结束,执行步骤D2820;否则执行步骤D2829。\n[0061] 步骤D2829,对最后的结果集进行全局排序,排序内容可以针对某一个字段进行排序,可以针对聚合函数SUM、COUNT、AVG等计算结果进行排序,默认结果集采用升序排序规则。\n[0062] 步骤D2830,把统计的结果由临时文件转化为最终的结果文件,并按照指定的格式进行数据的导出,以返回结果集。\n[0063] 根据本发明的又一实施例,海量结构化数据的分布式查询方法还可以包括:步骤\n3,对分布式查询返回的结果集进行汇总,并将该结果集呈现给用户。\n[0064] 图4示出根据本发明的一个实施例的对查询结果集进行汇总的各步骤的流程图。\n如图4所示,包括:\n[0065] 步骤311,对分布式返回的结果集进行合并,之后,判断是否有全局统计、分析类查询条件,如Group By、Order By、SUM、COUNT、AVG、TOP、LIMIT、MAX、MIN等需要汇总后执行分析类的查询命令;如果有,执行步骤312,如果没有执行步骤313。\n[0066] 步骤312,根据统计分析查询命令,执行全局统计、分析类操作。\n[0067] 步骤313,对生成的结果集根据用户要求的格式、路径生成结果文件,并将该结果文件呈现给用户。为此,本发明提供分页查询机制,所谓分页查询机制是指用户可以任意显示数据集中的某一部分数据集进行界面展示,如经过步骤313后,生成的结果文件中一共有i条记录,界面上每页可以显示j条记录(i>j),则一共有 页(取i/j的上整数),用户可以根据需要直接选择结果集中的任意一页进行展示。之后,退出查询操作。\n[0068] 本发明的海量结构化数据分布式查询方法,由于采用了分批查询并返回结果集,因此在不需要大量结果集的应用下,能够使查询结果集在达到一定阈值后,直接返回给用户端,也可以根据需要将查询结果进行暂存以支持分批查询操作。因此对于界面展示的查询应用,选择单批次返回结果集用于在界面上进行展示;而对于具有数据统计分析功能的查询应用,通过保存的查询状态,进行多批次查询,直到查询到满足条件的所有结果集为止。因此在海量数据管理系统中,本发明既能满足对返回结果集的数据需求量小但是需要快速响应这一类型应用的需求(例如界面展示查询类型),也能满足对响应时间要求不高但需要返回大量结果集的数据统计分析查询这一类型应用的需求(例如以数据挖掘为应用背景的信息分析)。\n[0069] 由于在分布式海量结构化数据存储系统中建立了索引以及建立了复杂查询条件分解和并发子查询任务调度机制,因此,本发明通过充分利用分布式环境下的计算资源,并发执行查询子任务,从而提高了海量结构化数据的查询效率。\n[0070] 在流数据等应用背景下,近期加载数据具有很高的使用频率。基于此,根据本发明的一个实施例,提出一种数据存储方法,利用双滑动窗口结构将近期加载的数据进行缓存,并且通过对所缓存的数据进行查询,以提高流数据应用下的查询效率。\n[0071] 图5为双滑动窗口结构及其工作原理的示意图。如图5所示,该双滑动窗口结构包括:数据写入窗口和数据查询窗口。其中,数据写入窗口接收实时加载的数据,为数据建立索引,并修改相关的系统元数据信息;数据查询窗口接收查询子任务,并根据建立的元数据记录信息直接查询本窗口的数据。其中,数据查询窗口和数据写入窗口根据时间周期进行流式转变。\n[0072] 例如将时间窗口设置为5分钟。如图5所示,当时间达到5分钟时,数据写入窗口内保存的是完整的5分钟内的数据,此时数据写入窗口不再写入新数据,窗口角色转化为数据查询窗口。重新开辟新的缓存结构接收加载数据,生成新的数据写入窗口。数据查询窗口内保证完整的5分钟内记录数据,接收查询命令,根据元数据记录信息直接查询本窗口的数据,返回满足条件的结果集。当再经过一个写入周期时,会有新的数据查询窗口产生。\n此时旧的数据查询窗口不再提供数据查询服务,而是通过网络把该窗口内缓存的批量数据进行存储(例如存储到硬盘中)。待窗口内的数据全部写入被存储后回收该窗口使用的资源。从而实现多个窗口之间的角色根据时间周期的流式转变。\n[0073] 基于上述双滑动窗口结构,根据本发明的一个实施例,提出一种海量结构化数据分布式存储方法。如图6所示,根据本发明的海量结构化数据分布式存储方法包括:\n[0074] 步骤1,从用户端接收高速加载的数据。\n[0075] 步骤2,建立具有固定查询周期的双滑动窗口结构,以将加载的数据进行缓存,该双滑动窗口结构在后期的数据查询步骤中还使能对缓存数据的查询。\n[0076] 数据缓存装置利用高速缓存设备接收实时加载的数据并进行本地缓存。通常数据缓存装置通过开辟大存储空间内存或固态硬盘实现。经过固定的时间周期,数据缓存装置会把缓存的数据写入到数据存储管理装置中,实现数据持久存储。\n[0077] 通过本发明的海量结构化数据分布式存储方法,能够实现对新加载数据的缓存,从而在后期查询数据时能够提高流数据这种对近期加载数据使用频率高的应用下的查询效率。\n[0078] 根据本发明的一个实施例,可以基于上述将新加载的数据进行缓存的海量结构化数据的分布式存储方法,在对分布式存储的数据并发执行分批次查询的同时,对通过双滑动窗口结构实现分布式缓存的每组数据并发执行分批次查询,并分布式返回结果集。\n[0079] 基于上述分布式数据存储方法,根据本发明的一个实施例,提出另一种海量结构化数据的分布式查询方法。如图7所示,该查询方法包括:\n[0080] 步骤1,接收用户发出的查询任务并将查询任务分解为多个查询子任务。\n[0081] 步骤2,根据该多个查询子任务,对分布式缓存的每组数据并发执行分批次查询,并分布式返回查询到的结果集。\n[0082] 其中对在将查询任务分解为多个查询子任务的步骤中也可以根据分区类查询条件、过滤类查询条件或全局统计、分析类查询条件将查询任务分解为多个查询子任务的步骤,从而在进行查询时进一步提高查询效率。\n[0083] 根据本发明的另一实施例,该海量结构化数据的分布式查询方法还包括:步骤3,对分批返回的查询结果集进行汇总,并将该结果集呈现给用户。\n[0084] 根据本发明的又一实施例,该海量结构化数据的分布式查询方法还包括在对分布式缓存的每组数据并行执行分批次查询的同时还对分布式存储的每组数据并行执行分批次查询。\n[0085] 根据本发明的另一实施例,也可以采用如图2和图3所示的方式对分布式缓存的每组数据进行分批查询。\n[0086] 本发明通过直接对加载数据进行缓存,并对缓存的数据直接进行查询操作,因此无需等到所有数据统一存储之后再执行查询,从而尤其提高了近期存储的数据使用频率非常高(例如日志类流记录数据)这种应用下的查询效率。\n[0087] 当然,本领域技术人员也可以理解,在前面描述的针对分布式存储的每组数据执行分批次查询的同时\n[0088] 最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。
法律信息
- 2018-09-14
专利权的转移
登记生效日: 2018.08.24
专利权人由中国科学院计算技术研究所变更为国信电子票据平台信息服务有限公司
地址由100190 北京市海淀区中关村科学院南路6号变更为100044 北京市海淀区首体南路22号楼十六层B区
- 2014-06-25
- 2012-09-05
实质审查的生效
IPC(主分类): G06F 17/30
专利申请号: 201110442091.0
申请日: 2011.12.26
- 2012-06-27
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2008-08-27
|
2008-03-18
| | |
2
| | 暂无 |
2001-03-14
| | |
3
| |
2011-11-23
|
2011-07-27
| | |
4
| |
2010-12-08
|
2010-08-17
| | |
5
| |
2011-04-06
|
2010-12-01
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |