著录项信息
专利名称 | 一种基于Hadoop的海量流数据存储和查询方法及系统 |
申请号 | CN201010546473.3 | 申请日期 | 2010-11-15 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2011-03-30 | 公开/公告号 | CN101996250A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F17/30 | IPC分类号 | G;0;6;F;1;7;/;3;0查看分类表>
|
申请人 | 中国科学院计算技术研究所 | 申请人地址 | 北京市海淀区中关村科学院南路6号
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 中国科学院计算技术研究所 | 当前权利人 | 中国科学院计算技术研究所 |
发明人 | 郭斯杰;熊劲 |
代理机构 | 北京律诚同业知识产权代理有限公司 | 代理人 | 祁建国;梁挥 |
摘要
本发明公开了一种基于Hadoop的海量流数据存储和查询方法及系统。所述方法,包括下列步骤:构建段级列簇式存储结构:将流数据依次存储为列簇记录,并对列簇记录从前往后进行压缩得到压缩数据页,将该压缩数据页写到一个列簇数据,同时将该压缩数据页的页面概要信息追加写入到列簇数据的尾端,得到完整的数据段;在查询语句执行的过程中,根据过滤条件,利用存储在数据段尾端的所述页面概要信息构建出一张扫描表对数据进行快速过滤。
1.一种基于Hadoop的海量流数据存储和查询方法,其特征在于,所述方法,包括下列步骤:
步骤100.构建段级列簇式存储结构:将流数据依次存储为列簇记录,并对列簇记录从前往后进行压缩得到压缩数据页,将该压缩数据页写到一个列簇数据,同时将该压缩数据页的页面概要信息追加写入到列簇数据的尾端,得到完整的数据段;
步骤200.在查询语句执行的过程中,根据过滤条件,利用存储在数据段尾端的所述页面概要信息构建出一张扫描表对数据进行快速过滤;
所述步骤100,包括下列步骤:
步骤110.将缓存中的流数据根据表的列簇定义依序存储为列簇记录,写入到内存中;
步骤120.对内存中该列簇的列簇记录从前往后进行压缩,直到得到近似一个指定数据页大小的压缩数据页,将该数据页写到一个列簇数据中,如此反复写完整个列簇数据,存为一个数据段;
步骤130.在写数据页的同时,将该数据页的页面概要信息记录在内存中,并把该数据段的元数据信息追加写入到列簇数据的尾端,形成一个完整的数据段加入存储文件中;
步骤140.判断所述数据段的大小是否近似等于分布式文件系统中一个数据块的大小,若是,则执行步骤150;否则,返回步骤110;
步骤150.将新的数据段追加在上一数据段的尾端,重复步骤110-130生成新的数据段,并;
步骤160.判断所述存储文件长度是否达到设定长度阈值,若是,则加载服务器将内存中描述该存储文件内所有数据段的索引信息写到存储文件的尾端,关闭该存储文件,并重新建立新的存储文件;否则返回步骤150;
所述步骤200,包括下列步骤:
步骤210.判断过滤条件涉及的字段是否集中在一个列簇数据中,若是,则执行步骤
220;否则,执行步骤230;
步骤220.遍历所述列簇数据的所有数据页的页面概要信息,并根据过滤条件表达式的操作类型及其所有子表达式,计算每个数据页在该过滤条件表达式下的扫描模式,以建立扫描表;
步骤230.将过滤条件表达式按照列簇数据归类拆分成多个子表达式,使得每个子表达式只包含该列簇数据中的字段,然后,分别对每个子表达式运用步骤220的方法,构建每个列簇的扫描模式列表;最后,将每个子表达式构建的扫描模式列表进行相应的逻辑运算,得到最终的扫描表;
所述步骤220,包括下列步骤:
步骤221.判断所述过滤条件表达式的运算类型,如果是比较运算,则执行步骤222;如果是逻辑运算,则执行步骤223;如果是其他类型,则执行步骤224;
步骤222.所述过滤条件表达式为比较运算时,根据该数据页的最大值和最小值判断该数据页中的所有记录是不是都能满足该比较表达式;如果所有记录都满足该比较表达式,则该数据页的扫描模式为POSITIVE;如果所有记录都不能满足该比较表达式,则该数据页的扫描模式为NEGATIVE;否则,该数据页的扫描模式为ROUGH;
步骤223.所述过滤条件表达式为逻辑运算时,首先计算其子表达式的扫描模式;接着,判断逻辑运算符:如果为AND或者0R操作,则将其子表达式运算得来的扫描模式进行逻辑运算得到最终数据页的扫描模式;如果为NOT操作,则对其子表达式运算得来的扫描模式进行取反操作:POSITIVE变为NEGATIVE,NEGATIVE变为POSITIVE,ROUGH则保持不变;
步骤224.所述过滤条件表达式为其他类型,则该数据页的扫描模式为ROUGH;
所述步骤230,包括下列步骤:
步骤231.从不同列簇数据的第一个数据页开始遍历;
步骤232.分别取得该数据页对应的页面概要信息和该数据页当前的扫描模式;通过比较两个数据页的起始记录号和结束记录号,判断这两个数据页的相互关系,若是包含关系,则执行步骤233;若是等价关系,则执行步骤234;若是其他情况,则执行步骤235;
步骤233.假设第一数据页包含第二数据页,如果两个数据页进行逻辑与操作并且第一数据页的扫描模式为NEGATIVE,则设置第二数据页的扫描模式为NEGATIVE;如果两个数据页进行逻辑或操作并且第一数据页的扫描模式为POSITIVE,则设置第二数据页的扫描模式为POSITIVE;
步骤234.如果两个数据页进行逻辑与操作并且任一数据页的扫描模式为NEGATIVE,则设置另一个数据页的扫描模式为NEGATIVE;如果两个数据页进行逻辑或操作并且任一数据页的扫描模式为POSITIVE,则设置另一个数据页的扫描模式为POSITIVE;
步骤235.其他情况,则不做任何操作;
步骤236.根据计算需求移动相应列簇数据的下一个数据页,返回步骤232,直到遍历完所述不同的列簇数据。
2.根据权利要求1所述的基于Hadoop的海量流数据存储和查询方法,其特征在于,步骤110中,根据列簇定义,确定每个字段的类型,并计算出每个字段在记录中的偏移量;对于定长字段,直接通过偏移量可以访问到相应的值;而对于变长字段,则需要从变长字段偏移区中读取该字段的实际偏移,然后根据这个偏移值到变长字段存储区中访问相应的值。
3.一种基于Hadoop的海量流数据存储和查询系统,其特征在于,所述系统,包括:
段级列簇式存储模块,用于将流数据依次存储为列簇记录,并对列簇记录从前往后进行压缩得到压缩数据页,将该压缩数据页写到一个列簇数据,同时将该压缩数据页的页面概要信息追加写入到列簇数据的尾端,得到完整的数据段;
过滤模块,在查询语句执行的过程中,根据过滤条件,利用存储在数据段尾端的所述页面概要信息构建出一张扫描表对数据进行快速过滤;
所述段级列簇式存储模块,包括:
列簇记录存储模块,用于将缓存中的流数据根据表的列簇定义依序存储为列簇记录,写入到内存中;
压缩模块,用于对内存中该列簇的列簇记录从前往后进行压缩,直到得到近似一个指定数据页大小的压缩数据页,将该数据页写到一个列簇数据中,如此反复写完整个列簇数据,存为一个数据段;
页面概要信息记录模块,用于在写数据页的同时,将该数据页的页面概要信息记录在内存中,并把该数据段的元数据信息追加写入到列簇数据的尾端,形成一个完整的数据段加入存储文件中;
数据段尺寸判断模块,用于判断所述数据段的大小是否近似等于分布式文件系统中一个数据块的大小,若是,则触发数据段生成模块;否则,触发列簇记录存储模块;
数据段生成模块,用于生成新的数据段,并将新的数据段追加在上一数据段的尾端;
文件长度判断模块,用于判断所述存储文件长度是否达到设定长度阈值,若是,则加载服务器将内存中描述该存储文件内所有数据段的索引信息写到存储文件的尾端,关闭该存储文件,并重新建立新的存储文件;否则触发数据段生成模块;
所述过滤模块,包括:
判断模块,用于判断过滤条件涉及的字段是否集中在一个列簇数据中,若是,则触发独立扫描模块;否则,触发并行扫描模块;
独立扫描模块,用于遍历所述列簇数据的所有数据页的页面概要信息,并根据过滤条件表达式的操作类型及其所有子表达式,计算每个数据页在该过滤条件表达式下的扫描模式,以建立扫描表;
并行扫描模块,用于将过滤条件表达式按照列簇数据归类拆分成多个子表达式,使得每个子表达式只包含该列簇数据中的字段,然后,分别对每个子表达式运用独立扫描模块的方法,构建每个列簇的扫描模式列表;最后,将每个子表达式构建的扫描模式列表进行相应的逻辑运算,得到最终的扫描表;
所述独立扫描模块,包括:
运算类型判断模块,用于判断所述过滤条件表达式的运算类型,如果是比较运算,则触发比较运算标记模块;如果是逻辑运算,则触发逻辑运算标记模块;如果是其他类型,则触发其他类型标记模块;
比较运算标记模块,用于当所述过滤条件表达式为比较运算时,根据该数据页的最大值和最小值判断该数据页中的所有记录是不是都能满足该比较表达式;如果所有记录都满足该比较表达式,则该数据页的扫描模式为POSITIVE;如果所有记录都不能满足该比较表达式,则该数据页的扫描模式为NEGATIVE;否则,该数据页的扫描模式为ROUGH;
逻辑运算标记模块,用于当所述过滤条件表达式为逻辑运算时,首先计算其子表达式的扫描模式;接着,判断逻辑运算符:如果为AND或者OR操作,则将其子表达式运算得来的扫描模式进行逻辑运算得到最终数据页的扫描模式;如果为NOT操作,则对其子表达式运算得来的扫描模式进行取反操作:POSITIVE变为NEGATIVE,NEGATIVE变为POSITIVE,ROUGH则保持不变;
其他类型标记模块,用于当所述过滤条件表达式为其他类型,则该数据页的扫描模式为ROUGH;
所述并行扫描模块,包括:
数据页遍历模块,用于从不同列簇数据的第一个数据页开始遍历;
关系判断模块,用于分别取得该数据页对应的页面概要信息和该数据页当前的扫描模式;通过比较两个数据页的起始记录号和结束记录号,判断这两个数据页面的相互关系,若是包含关系,则触发包含关系更新模块;若是等价关系,则触发等价关系更新模块;若是其他情况,则不做任何操作;
包含关系更新模块,假设第一数据页包含第二数据页,如果两个数据页进行逻辑与操作并且第一数据页的扫描模式为NEGATIVE,则设置第二数据页的扫描模式为NEGATIVE;如果两个数据页进行逻辑或操作并且第一数据页的扫描模式为POSITIVE,则设置第二数据页的扫描模式为POSITIVE;
等价关系更新模块,如果两个数据页进行逻辑与操作并且任一数据页的扫描模式为NEGATIVE,则设置另一个数据页的扫描模式为NEGATIVE;如果两个数据页进行逻辑或操作并且任一数据页的扫描模式为POSITIVE,则设置另一个数据页的扫描模式为POSITIVE。
4.根据权利要求3所述的基于Hadoop的海量流数据存储和查询系统,其特征在于,所述列簇记录存储模块,根据列簇定义,确定每个字段的类型,并计算出每个字段在记录中的偏移量;对于定长字段,直接通过偏移量可以访问到相应的值;而对于变长字段,则需要从变长字段偏移区中读取该字段的实际偏移,然后根据这个偏移值到变长字段存储区中访问相应的值。
一种基于Hadoop的海量流数据存储和查询方法及系统\n技术领域\n[0001] 本发明涉及海量数据管理领域,特别是涉及一种基于Hadoop的海量流数据存储和查询方法及系统。\n背景技术\n[0002] 随着数据产生的自动化进步,越来越多的应用要求将这些总量持续增长的流数据持久化保存下来,并进行后续的查询分析和数据挖掘,这对海量流数据的管理提出了严峻的挑战。\n[0003] 在存储方面,产生的流数据总量大,而且每天的流量也大。以国内互联网公司为例,每天大约有5TB的网页点击流数据产生,总记录数约为6亿多条。这些点击流数据需要持久化存储在系统中,并用于当天的报表统计分析(比如计算当天的页面点击率(PV)、用户访问量(UV)等),以及后续一定时间内的数据挖掘。除了互联网应用之外,在网络安全领域也存在类似挑战。据中国互联网信息中心发布的调查报告显示,截至2009年底,中国IPv4地址已经达到2.3亿,数量仅次于美国,是全球第二大IPv4地址拥有国,并且每年以\n28.2%的速度持续增长;同时国际出口带宽达到866,367Mbps,年增长率达到35.3%。互联网信息资源的增加,产生了更多的网络流量数据,这些流量数据需要被持久化保存用以快速分析和发现恶意网络攻击行为,保证用户正常使用网络。\n[0004] 源源不断产生的流数据进入系统后,通常需要被持久化保存一段时间,因此对流数据管理系统的数据加载性能和存储容量都提出了严峻的挑战。并且,这些流数据的增长速度也十分迅速,对系统的扩展能力也将是一种考验。\n[0005] 而在查询方面,对流数据的查询主要是统计分析类的查询。这类查询通常访问的数据量大,运行时间较长。以互联网点击流应用为例,典型的查询是对一天中的所有网页点击数据进行页面点击量(PV)、用户访问量(UV)等的统计,产生当日的报表。这类操作通常需要访问整一天的数据,运行的时间在几个小时以上。因此对查询的执行效率和执行过程中的容错能力都提出了挑战。\n[0006] 进行海量流数据存储管理的传统解决方案是关系型数据库。但是关系型数据库并不适合进行流数据管理,原因有三:\n[0007] 其一,关系型数据库制约流数据的加载速度。流数据以追加的方式进入系统中,并且在它们加载到系统中之后不再被修改。因此,海量流数据管理并不需要数据库系统提供的严格一致性保证和事务操作。相反,数据库系统严格的一致性保证和事务操作,带来了额外的开销,限制了流数据加载的性能。\n[0008] 其二,关系型数据库不能利用流数据时间有序的特性来加速查询处理。数据库使用索引技术来提高流数据应用中的时间区间查询分析。但是,时间维度的索引并不能提高流数据查询分析的性能。相反,使用索引不仅在数据加载阶段引入额外的开销,同时在查询执行过程中引入大量的随机磁盘I/O。更不幸的是,随机磁盘I/O将会严重影响查询分析的性能。\n[0009] 其三,关系型数据库的容错机制限制了数据库系统的扩展能力。(并行)数据库基于物理硬件是昂贵的、节点失效并不是经常性事件的假设,采用乐观式的容错机制,在查询执行过程中采用流水线的方式传递中间结果数据,以达到较高的执行性能。但是,一旦节点失效发生,整个查询任务将直接退出。用户必须重新提交查询语句,重做整个任务。这对于运行时间长的统计分析类查询,是不可忍受的。\n[0010] 基于Hadoop进行海量流数据的管理,可以充分利用HDFS和MapReduce的扩展性,解决海量数据管理面临的扩展性和规模的问题。同时,MapReduce的悲观式容错机制使得对于海量数据的查询分析在节点失效发生的情况下,也不必重新提交执行,提高了查询的效率。\n[0011] 但是,由于MapReduce并不是针对于结构化数据处理分析而设计的。因此MapReduce由于缺乏传统数据库技术在结构化数据处理的优化技术,导致其在分析查询结构化数据时,采用全表扫描的方式访问数据,性能不如并行数据库。因此,直接将Hadoop用于海量流数据管理将会面临查询性能低的问题。\n发明内容\n[0012] 本发明的目的在于提供一种基于Hadoop的海量流数据存储和查询方法及系统。\n其能够解决海量流数据应用面临的高效率统计分析问题。\n[0013] 为实现本发明的目的而提供的一种基于Hadoop的海量流数据存储和查询方法,包括下列步骤:\n[0014] 步骤100.构建段级列簇式存储结构:将流数据依次存储为列簇记录,并对列簇记录从前往后进行压缩得到压缩数据页,将该压缩数据页写到一个列簇数据,同时将该压缩数据页的页面概要信息追加写入到列簇数据的尾端,得到完整的数据段;\n[0015] 步骤200.在查询语句执行的过程中,根据过滤条件,利用存储在数据段尾端的所述页面概要信息构建出一张扫描表对数据进行快速过滤。\n[0016] 所述步骤100,包括下列步骤:\n[0017] 步骤110.将缓存中的流数据根据表的列簇定义依序存储为列簇记录,写入到内存中;\n[0018] 步骤120.对内存中该列簇的列簇记录从前往后进行压缩,直到得到近似一个指定数据页大小的压缩数据页,将该数据页写到一个列簇数据中,如此反复写完整个列簇数据,存为一个数据段;\n[0019] 步骤130.在写数据页的同时,将该数据页的页面概要信息记录在内存中,并把该数据段的元数据信息追加写入到列簇数据的尾端,形成一个完整的数据段加入存储文件中;\n[0020] 步骤140.判断所述数据段的大小是否近似等于分布式文件系统中一个数据块的大小,若是,则执行步骤150;否则,返回步骤110;\n[0021] 步骤150;将新的数据段追加在上一数据段的尾端,并重复步骤110-130生成新的数据段;\n[0022] 步骤160.判断所述存储文件长度是否达到设定长度阈值,若是,则加载服务器将内存中描述该存储文件内所有数据段的索引信息写到存储文件的尾端,关闭该存储文件,并重新建立新的存储文件;否则返回步骤150。\n[0023] 步骤110中,根据列簇定义,确定每个字段的类型,并计算出每个字段在记录中的偏移量;对于定长字段,直接通过偏移量可以访问到相应的值;而对于变长字段,则需要从变长字段偏移区中读取该字段的实际偏移,然后根据这个偏移值到变长字段存储区中访问相应的值。\n[0024] 所述步骤200,包括下列步骤:\n[0025] 步骤210.判断过滤条件涉及的字段是否集中在一个列簇数据中,若是,则执行步骤220;否则,执行步骤230;\n[0026] 步骤220.遍历所述列簇数据的所有数据页的页面概要信息,并根据过滤条件表达式的操作类型及其所有子表达式,计算每个数据页在该过滤条件表达式下的扫描模式,以建立扫描表;\n[0027] 步骤230.将过滤条件表达式按照列簇数据归类拆分成多个子表达式,使得每个子表达式只包含该列簇数据中的字段,然后,分别对每个子表达式运用步骤220的方法,构建每个列簇的扫描模式列表;最后,将每个子表达式构建的扫描模式列表进行相应的逻辑运算,得到最终的扫描表。\n[0028] 所述步骤220,包括下列步骤:\n[0029] 步骤221.判断所述过滤条件表达式的运算类型,如果是比较运算,则执行步骤\n222;如果是逻辑运算,则执行步骤223;如果是其他类型,则执行步骤224;\n[0030] 步骤222.所述过滤条件表达式为比较运算时,根据该数据页的最大值和最小值判断该数据页中的所有记录是不是都能满足该比较表达式;如果所有记录都满足该比较表达式,则该数据页的扫描模式为POSITIVE;如果所有记录都不能满足该比较表达式,则该数据页的扫描模式为NEGATIVE;否则,该数据页的扫描模式为ROUGH;\n[0031] 步骤223.所述过滤条件表达式为逻辑运算时,首先计算其子表达式的扫描模式;\n接着,判断逻辑运算符:如果为AND或者OR操作,则将其子表达式运算得来的扫描模式进行逻辑运算得到最终数据页的扫描模式;如果为NOT操作,则对其子表达式运算得来的扫描模式进行取反操作:POSITIVE变为NEGATIVE,NEGATIVE变为POSITIVE,ROUGH则保持不变;\n[0032] 步骤224.所述过滤条件表达式为其他类型,则该数据页的扫描模式为ROUGH。\n[0033] 所述步骤230,包括下列步骤:\n[0034] 步骤231.从不同列簇数据的第一个数据页开始遍历;\n[0035] 步骤232.分别取得该数据页对应的页面概要信息和该数据页当前的扫描模式;\n通过比较两个数据页的起始记录号和结束记录号,判断这两个数据页的相互关系,若是包含关系,则执行步骤233;若是等价关系,则执行步骤234;若是其他情况,则执行步骤235;\n[0036] 步骤233.假设第一数据页包含第二数据页,如果两个数据页进行逻辑与操作并且第一数据页的扫描模式为NEGATIVE,则设置第二数据页的扫描模式为NEGATIVE;如果两个数据页进行逻辑或操作并且第一数据页的扫描模式为POSITIVE,则设置第二数据页的扫描模式为POSITIVE;\n[0037] 步骤234.如果两个数据页进行逻辑与操作并且任一数据页的扫描模式为NEGATIVE,则设置另一个数据页的扫描模式为NEGATIVE;如果两个数据页进行逻辑或操作并且任一数据页的扫描模式为POSITIVE,则设置另一个数据页的扫描模式为POSITIVE;\n[0038] 步骤235.其他情况,则不做任何操作;\n[0039] 步骤236.根据计算需求移动相应列簇数据的下一个数据页,返回步骤232,直到遍历完所述不同的列簇数据。\n[0040] 为实现本发明的目的还提供一种基于Hadoop的海量流数据存储和查询系统,所述系统,包括:\n[0041] 段级列簇式存储模块,用于将流数据依次存储为列簇记录,并对列簇记录从前往后进行压缩得到压缩数据页,将该压缩数据页写到一个列簇数据,同时将该压缩数据页的页面概要信息追加写入到列簇数据的尾端,得到完整的数据段;\n[0042] 过滤模块,在查询语句执行的过程中,根据过滤条件,利用存储在数据段尾端的所述页面概要信息构建出一张扫描表对数据进行快速过滤。\n[0043] 所述段级列簇式存储模块,包括:\n[0044] 列簇记录存储模块,用于将缓存中的流数据根据表的列簇定义依序存储为列簇记录,写入到内存中;\n[0045] 压缩模块,用于对内存中该列簇的列簇记录从前往后进行压缩,直到得到近似一个指定数据页大小的压缩数据页,将该数据页写到一个列簇数据中,如此反复写完整个列簇数据,存为一个数据段;\n[0046] 页面概要信息记录模块,用于在写数据页的同时,将该数据页的页面概要信息记录在内存中,并把该数据段的元数据信息追加写入到列簇数据的尾端,形成一个完整的数据段加入存储文件中;\n[0047] 数据段尺寸判断模块,用于判断所述数据段的大小是否近似等于分布式文件系统中一个数据块的大小,若是,则触发数据段生成模块;否则,触发列簇记录存储模块;\n[0048] 数据段生成模块,用于生成新的数据段,并将新的数据段追加在上一数据段的尾端;\n[0049] 文件长度判断模块,用于判断所述存储文件长度是否达到设定长度阈值,若是,则加载服务器将内存中描述该存储文件内所有数据段的索引信息写到存储文件的尾端,关闭该存储文件,并重新建立新的存储文件;否则触发数据段生成模块。\n[0050] 所述列簇记录存储模块,根据列簇定义,确定每个字段的类型,并计算出每个字段在记录中的偏移量;对于定长字段,直接通过偏移量可以访问到相应的值;而对于变长字段,则需要从变长字段偏移区中读取该字段的实际偏移,然后根据这个偏移值到变长字段存储区中访问相应的值。\n[0051] 所述过滤模块,包括:\n[0052] 判断模块,用于判断过滤条件涉及的字段是否集中在一个列簇数据中,若是,则触发独立扫描模块;否则,触发并行扫描模块;\n[0053] 独立扫描模块,用于遍历所述列簇数据的所有数据页的页面概要信息,并根据过滤条件表达式的操作类型及其所有子表达式,计算每个数据页在该过滤条件表达式下的扫描模式,以建立扫描表;\n[0054] 并行扫描模块,用于将过滤条件表达式按照列簇数据归类拆分成多个子表达式,使得每个子表达式只包含该列簇数据中的字段,然后,分别对每个子表达式运用独立扫描模块的方法,构建每个列簇的扫描模式列表;最后,将每个子表达式构建的扫描模式列表进行相应的逻辑运算,得到最终的扫描表。\n[0055] 所述独立扫描模块,包括:\n[0056] 运算类型判断模块,用于判断所述过滤条件表达式的运算类型,如果是比较运算,则触发比较运算标记模块;如果是逻辑运算,则触发逻辑运算标记模块;如果是其他类型,则触发其他类型标记模块;\n[0057] 比较运算标记模块,用于当所述过滤条件表达式为比较运算时,根据该数据页的最大值和最小值判断该数据页中的所有记录是不是都能满足该比较表达式;如果所有记录都满足该比较表达式,则该数据页的扫描模式为POSITIVE;如果所有记录都不能满足该比较表达式,则该数据页的扫描模式为NEGATIVE;否则,该数据页的扫描模式为ROUGH;\n[0058] 逻辑运算标记模块,用于当所述过滤条件表达式为逻辑运算时,首先计算其子表达式的扫描模式;接着,判断逻辑运算符:如果为AND或者OR操作,则将其子表达式运算得来的扫描模式进行逻辑运算得到最终数据页的扫描模式;如果为NOT操作,则对其子表达式运算得来的扫描模式进行取反操作:POSITIVE变为NEGATIVE,NEGATIVE变为POSITIVE,ROUGH则保持不变;\n[0059] 其他类型标记模块,用于当所述过滤条件表达式为其他类型,则该数据页的扫描模式为ROUGH。\n[0060] 所述并行扫描模块,包括:\n[0061] 数据页遍历模块,用于从不同列簇数据的第一个数据页开始遍历;\n[0062] 关系判断模块,用于分别取得该数据页对应的页面概要信息和该数据页当前的扫描模式;通过比较两个数据页的起始记录号和结束记录号,判断这两个数据页面的相互关系,若是包含关系,则触发包含关系更新模块;若是等价关系,则触发等价关系更新模块;\n若是其他情况,则不做任何操作;\n[0063] 包含关系更新模块,假设第一数据页包含第二数据页,如果两个数据页进行逻辑与操作并且第一数据页的扫描模式为NEGATIVE,则设置第二数据页的扫描模式为NEGATIVE;如果两个数据页进行逻辑或操作并且第一数据页的扫描模式为POSITIVE,则设置第二数据页的扫描模式为POSITIVE;\n[0064] 等价关系更新模块,如果两个数据页进行逻辑与操作并且任一数据页的扫描模式为NEGATIVE,则设置另一个数据页的扫描模式为NEGATIVE;如果两个数据页进行逻辑或操作并且任一数据页的扫描模式为POSITIVE,则设置另一个数据页的扫描模式为POSITIVE。\n[0065] 本发明的有益效果是:\n[0066] 1.本发明的基于Hadoop的海量流数据存储和查询方法和系统,针对于结构化的流数据,提出了一种基于HDFS的段级列簇式存储组织,利用列存储和压缩技术,可以减少磁盘I/O的数据量,提高数据加载和查询分析的性能;\n[0067] 2.本发明的基于Hadoop的海量流数据存储和查询方法和系统,针对流数据时间近似有序的特性,提出了SCANMAP优化机制,利用段级列簇式存储结构中记录的概要信息,对数据进行快速过滤以提高查询处理效率。\n附图说明\n[0068] 图1是本申请的基于Hadoop的海量流数据存储和查询方法的步骤流程图;\n[0069] 图2是本发明提出的段级列簇式存储结构示意图;\n[0070] 图3是本发明中基于段级列簇式存储结构存储流数据的步骤流程图;\n[0071] 图4是本发明中列簇中一条记录的存储结构示意图;\n[0072] 图5是本发明中数据段尾端的页面概要信息存储示意图;\n[0073] 图6是本发明中利用页面概要信息构建扫描表,对数据进行快速过滤的步骤流程图;\n[0074] 图7是本发明中根据单列簇过滤条件构建SCANMAP的步骤流程图;\n[0075] 图8是本发明中根据多列簇过滤条件构建SCANMAP的步骤流程图;\n[0076] 图9是本发明中两个数据页之间的相互关系示意图;\n[0077] 图10是本发明的一种基于Hadoop的海量流数据存储和查询系统的结构示意图。\n具体实施方式\n[0078] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明的基于Hadoop的海量流数据存储和查询方法和系统进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。\n[0079] 本发明的基于Hadoop的海量流数据存储和查询方法和系统,针对结构化的流数据时间近似有序的特性,提出了一种基于分布式文件系统(Hadoop Distributed File System,HDFS)的段级列簇式存储结构和SCANMAP优化机制,利用段级列簇式存储结构中记录的概要信息,对数据进行快速过滤以提高查询处理效率。同时,利用列存储和压缩技术,可以减少磁盘I/O的数据量,提高数据加载和统计分析的性能。\n[0080] 下面结合上述目标详细介绍本发明的基于Hadoop的海量流数据存储和查询方法,图1是本申请的基于Hadoop的海量流数据存储和查询方法的步骤流程图,如图1所示,所述方法,包括下列步骤:\n[0081] 步骤100.将流数据依次存储为列簇记录,并对列簇记录从前往后进行压缩得到压缩数据页,将该数据页写到一个列簇数据,同时将该数据页的页面概要信息追加写入到列簇数据的尾端,得到完整的数据段;\n[0082] 根据结构化流数据存储底层HDFS的存储特性:即1)写一次,读多次的文件访问语义;2)随机均匀分布的定长块放置策略;3)针对顺序访问进行优化,并且跨数据块的随机读性能远差于数据块内的随机读性能。本发明提出了针对HDFS特性设计的段级列簇式存储(Segment Level Cluster Store,SLCStore)结构。\n[0083] 图2是本发明提出的段级列簇式存储结构示意图,如图2所示,在本发明的段级列簇式存储中,数据以数据段(Segment)为粒度进行组织。一个数据段通常代表着一段时间间隔内的流数据。与文件级列存储不同的是,不同的列簇数据按照列簇一、列簇二依次类推的顺序压缩存储到一个数据段中,而非写到不同文件中。这样,通过在数据加载时控制数据段的大小,使得一个数据段的大小近似等于HDFS一个数据块的大小,从而使得一个数据段的各个列簇存储在同一个数据块中。这些列簇最终存储在相同的物理机器上,从而避免了在列数据拼接时引入网络I/O。\n[0084] 所述基于HDFS的段级列簇式存储结构与索引机制不同,1)写入简单,不对数据加载产生额外的开销影响;2)在查询分析过程中,不会引入大量的磁盘I/O,达到加速带有时间区间的流数据分析性能的效果。\n[0085] 图3是本发明中基于段级列簇式存储结构存储流数据的步骤流程图,如图3所示,所述步骤100,包括下列步骤:\n[0086] 步骤110.将缓存中的流数据按照顺序存储为一条列簇记录写入到内存;\n[0087] 图4是本发明中列簇中一条记录的存储结构示意图,如图4所示,对于列簇中的每一条记录,SLCStore按照图4所示进行组织:SLCStore根据表的列簇定义,确定每个字段的类型,并计算出每个字段在记录中的偏移量。对于定长字段,直接通过偏移量可以访问到相应的值;而对于变长字段,则需要到图4所示的变长字段偏移区中,读取该字段的实际偏移,然后根据这个偏移值到变长字段存储区中访问相应的值。\n[0088] 结合流数据加载流程,加载服务器在数据流入系统之后,将流数据缓存在加载服务器的内存中,并在流数据缓存达到阈值(通常与HDFS数据块的大小一致,在进行数据压缩时需根据压缩比进行估算)时,将缓存中的数据按照列簇的顺序依次写回到HDFS文件中进行持久化存储。\n[0089] 步骤120.当一条列簇记录按照图4所示写入到内存后,SLCStore对内存中该列簇的数据从前往后进行压缩,直到得到近似一个指定数据页大小(如1MB)的压缩数据页,就将该数据页写到一个列簇数据中,如此反复写完整个列簇数据,存为一个数据段;\n[0090] 步骤130.SLCStore在写数据页的同时,将该数据页的页面概要信息(PageMeta,记录该数据页的最大值、最小值、数据页的文件偏移量以及包含的记录数)记录在内存中,SLCStore把该数据段的元数据信息(包括每个列簇在文件中的偏移量、每个数据页的概要信息等)追加写入到列簇数据的尾端,形成一个完整的数据段加入存储文件中;\n[0091] 步骤140.判断所述数据段的大小是否近似等于分布式文件系统中一个数据块的大小,若是,则执行步骤150;否则,返回步骤110;\n[0092] 步骤150;重复步骤110-130生成新的数据段,并将新的数据段追加在上一数据段的尾端;\n[0093] 步骤160.判断所述存储文件长度是否达到设定长度阈值,若是,则加载服务器将内存中描述该存储文件内所有数据段的索引信息写到存储文件的尾端,关闭该存储文件,并重新建立新的存储文件;否则返回步骤150。\n[0094] 随着流数据不断加载进入系统中,新的数据段也在不断产生,并以追加的方式写回到文件的尾端。在文件长度增加到指定长度阈值后,加载服务器将内存中描述该文件内所有数据段的索引信息写回文件尾端,关闭该文件,并重新打开新的文件继续后续的数据加载。\n[0095] 与已有的工作Pig Zebra不同的是,SLCStore采用段级列存储的组织方式,而非文件级列存储的组织方式进行数据的组织:SLCStore在数据加载阶段通过控制缓存的大小,使得数据段内的各个列簇尽可能地落在同一个HDFS文件块中,从而同一行的不同列簇数据存储在相同的物理节点上,避免了网络数据I/O。同时,在一个数据段内部,数据的组织方式按照纯粹的列式存储进行组织,并非PAX方式,与已有工作RCFile相比:一方面,避免了PAX方式下引入的大量无用磁盘I/O;另一方面,将一个数据段的各个列簇存储于同一个数据块中,避免了跨数据块随机读的额外代价。\n[0096] 步骤200.在查询语句执行的过程中,根据过滤条件,利用存储在数据段尾端的所述页面概要信息(图5是本发明中数据段尾端的页面概要信息存储示意图,如图5所示)构建出一张扫描表(SCANMAP)对数据进行快速过滤。\n[0097] 由于流数据的产生和流入具有近似时间有序性,因此本发明提出了SCANMAP优化机制。在查询语句执行的过程中,利用存储在数据段尾端的页面概要信息构建出一张扫描表(SCANMAP)。这张扫描表标识着在这条查询语句执行过程中,哪些数据页需要被扫描,哪些数据页则不需要被扫描,根据SCANMAP中描述的数据页扫描属性,可以过滤掉无关数据、减少大量数据扫描,快速地定位到查询语句所需要的数据页,加速统计分析的过程。。在SCANMAP中每个数据页具有相应的扫描属性(SCANMODE),包括:\n[0098] I.POSITIVE:该数据页中的所有记录均满足该查询条件。\n[0099] II.ROUGH:不确定该数据页中哪些记录满足该查询条件,需要读取并进行条件过滤。\n[0100] II I.NEGATIVE:该数据页中的所有记录均不满足该查询条件。\n[0101] 图6是本发明中利用页面概要信息构建扫描表,对数据进行快速过滤的步骤流程图,如图6所示,所述步骤200,包括下列步骤:\n[0102] 步骤210.判断过滤条件涉及的字段是否集中在一个列簇数据中,若是,则执行步骤220;否则,执行步骤230;\n[0103] SCANMAP的构建,主要包括两种情况:其一,过滤条件涉及的字段集中在一个列簇中;其二,过滤条件涉及的字段分散在多个列簇中。\n[0104] 步骤220.单列簇过滤条件,SCANMAP的构建:遍历所述列簇数据的所有数据页的页面概要信息,并计算每个数据页在该过滤条件表达式下的扫描模式;\n[0105] 图7是本发明中根据单列簇过滤条件构建SCANMAP的步骤流程图,如图7所示,所述步骤220,包括下列步骤:\n[0106] 步骤221.对每个数据页扫描模式的计算,首先判断该过滤条件表达式的操作类型,以及获得其所有子表达式:\n[0107] 步骤222.表达式为比较运算(如”<”,”>”等)时,根据该数据页的最大值和最小值判断该数据页中的所有记录是不是都能满足该比较表达式。如果所有记录都满足该比较表达式,则该数据页的扫描模式为POSITIVE;如果所有记录都不能满足该比较表达式,则该数据页的扫描模式为NEGATIVE;否则,该数据页的扫描模式为ROUGH。\n[0108] 步骤223.表达式为逻辑运算(如AND,OR,NOT等)时,首先计算其子表达式的扫描模式;接着,判断逻辑运算符:如果为AND或者OR操作,则将其子表达式运算得来的扫描模式进行逻辑运算得到最终数据页的扫描模式;如果为NOT操作,则对其子表达式运算得来的扫描模式进行取反操作:POSITIVE变为NEGATIVE,NEGATIVE变为POSITIVE,ROUGH则保持不变。\n[0109] 步骤224.表达式为其他类型,比如用户自定义的函数(UDF,User Define Function),由于不知道用户自定义函数的语义,那么该数据页的扫描模式为ROUGH。\n[0110] 步骤230.多列簇过滤条件,SCANMAP的构建:\n[0111] 图8是本发明中根据多列簇过滤条件构建SCANMAP的步骤流程图,如图8所示,所述步骤230,包括下列步骤:\n[0112] 步骤231.从不同列簇数据的第一个数据页开始遍历;\n[0113] 步骤232.分别取得该数据页对应的页面概要信息和该数据页当前的扫描模式;\n通过比较两个数据页的起始记录号和结束记录号,判断这两个数据页的相互关系,若是包含关系,则执行步骤233;若是等价关系,则执行步骤234;若是其他情况,则执行步骤235;\n[0114] 步骤233.如果两个数据页进行逻辑与操作并且其中一个数据页的扫描模式为NEGATIVE,则设置另一数据页的扫描模式为NEGATIVE;如果两个数据页进行逻辑或操作并且其中一个数据页的扫描模式为POSITIVE,则设置另一数据页的扫描模式为POSITIVE;\n[0115] 步骤234.如果两个数据页进行逻辑与操作并且任一数据页的扫描模式为NEGATIVE,则设置另一个数据页的扫描模式为NEGATIVE;如果两个数据页进行逻辑或操作并且任一数据页的扫描模式为POSITIVE,则设置另一个数据页的扫描模式为POSITIVE;\n[0116] 步骤235.其他情况,则不做任何操作;\n[0117] 步骤236.根据计算需求移动相应列簇数据的下一个数据页,返回步骤232,直到遍历完所述不同的列簇数据。\n[0118] 对于过滤条件表达式涉及多个列簇字段的情况,其SCANMAP的构建则相对比较复杂:我们首先将表达式按照列簇数据归类拆分成多个子表达式,使得每个子表达式只包含该列簇数据中的字段。然后,分别对每个子表达式运用单列簇SCANMAP构建算法,构建每个列簇的扫描模式列表(ScanModeList)。最后,将每个子表达式构建的扫描模式列表进行相应的逻辑运算,得到最终的SCANMAP。\n[0119] 以条件表达式″A>a1 and B<b1 and C>c1″为例,其SCANMAP构建流程。\n(假设,A、B字段在列簇1中,C字段在列簇2中)。\n[0120] 该表达式所对应的SCANMAP构建流程如下所述:\n[0121] (1)将表示式按照列簇关系划分成子表达式1(Child Expr 1)和子表达式\n2(Child Expr 2),子表达式1和子表达式2之间仍保留着逻辑与运算(AND)关系。\n[0122] (2)分别对子表达式1和子表达式2计算出列簇1和列簇2的扫描模式列表。\n[0123] (3)将(2)中计算得来的扫描模式列表进行逻辑与操作,得到最终的SCANMAP。\n[0124] 图9是本发明中两个数据页之间的相互关系示意图,如图9所示,由于两个不同的列簇数据所包含的字段数目和字段类型可能各不一样,采用的压缩方法也不尽相同,那么相同大小的数据页中所包含的列簇记录数也各不相同。因此,对两个不同列簇数据的扫描模式列表进行逻辑运算,并不能简单地进行一对一的逻辑运算:首先需要判断这两个列簇数据的数据页之间的相互关系,然后再根据数据页之间的相互关系进行相应的逻辑运算。\n两个数据页之间的相互关系,如图9所示。了解了数据页之间的相互关系之后,对两个不同列簇数据的扫描模式列表进行逻辑运算。\n[0125] 首先从左右两个列簇数据的第一个数据页开始遍历,分别取得该数据页对应的页面概要信息(PageMeta)和该数据页当前的扫描模式(ScanMode)。通过比较左右两个数据页的起始记录号和结束记录号,判断这两个页面的相互关系,并进行相应的逻辑运算:\n[0126] i.两个页面存在包含关系,如图9(a)所示。如果列簇A和列簇B进行逻辑与(AND)操作并且列簇A当前数据页的扫描模式为NEGATIVE,则设置列簇B当前数据页的扫描模式为NEGATIVE,并且移动列簇A、列簇B到下一个数据页;如果列簇A和列簇B进行逻辑或(OR)操作并且列簇A当前数据页的扫描模式为POSITIVE,则设置列簇B当前数据页的扫描模式为POSITIVE,并且移动列簇A、B到下一个数据页。\n[0127] ii.两个页面处于等价关系,如图9(b)所示。如果列簇A和列簇B进行逻辑与(AND)操作并且A、B任一列簇的当前数据页的扫描模式为NEGATIVE,则设置另一个列簇的当前数据页的扫描模式为NEGATIVE,并且移动列簇A、B到下一个数据页;如果列簇A和B进行逻辑或(OR)操作并且A、B任一列簇的当前数据页的扫描模式为POSITIVE,则设置另一个列簇的当前数据页的扫描模式为POSITIVE,并且移动列簇A、B到下一个数据页。\n[0128] iii.其他情况,则不做任何操作。\n[0129] 在完成对这两个页面的扫描模式的逻辑运算之后,根据计算需求移动相应列簇到下一个数据页,比如图9(a)中,我们只需移动列簇B到下一个数据页;而在图9(b)中,我们同时移动列簇A、B到下一个数据页。然后重复上述计算流程。如此反复,直到遍历完这两个列簇数据。\n[0130] 通过步骤i-iii,可以确定查询过程中所需要读取的数据页,从而减少最终查询分析需要扫描的数据量。\n[0131] 相应于本发明的基于Hadoop的海量流数据存储和查询方法,还提供一种基于Hadoop的海量流数据存储和查询系统,图10是本发明的一种基于Hadoop的海量流数据存储和查询系统的结构示意图,如图10所示,所述系统,包括:\n[0132] 段级列簇式存储模块1,用于将流数据依次存储为列簇记录,并对列簇记录从前往后进行压缩得到压缩数据页,将该压缩数据页写到一个列簇数据,同时将该压缩数据页的页面概要信息追加写入到列簇数据的尾端,得到完整的数据段;\n[0133] 过滤模块2,在查询语句执行的过程中,根据过滤条件,利用存储在数据段尾端的所述页面概要信息构建出一张扫描表对数据进行快速过滤。\n[0134] 其中,所述段级列簇式存储模块1,包括:\n[0135] 列簇记录存储模块11,用于将缓存中的流数据根据表的列簇定义依序存储为列簇记录,写入到内存中;\n[0136] 其中,根据列簇定义,确定每个字段的类型,并计算出每个字段在记录中的偏移量;对于定长字段,直接通过偏移量可以访问到相应的值;而对于变长字段,则需要从变长字段偏移区中读取该字段的实际偏移,然后根据这个偏移值到变长字段存储区中访问相应的值。\n[0137] 压缩模块12,对内存中该列簇的列簇记录从前往后进行压缩,直到得到近似一个指定数据页大小的压缩数据页,将该数据页写到一个列簇数据中,如此反复写完整个列簇数据,存入为一个数据段;\n[0138] 页面概要信息记录模块13,用于在写数据页的同时,将该数据页的页面概要信息记录在内存中,并把该数据段的元数据信息追加写入到列簇数据的尾端,形成一个完整的数据段加入存储文件中;\n[0139] 数据段尺寸判断模块14,用于判断所述数据段的大小是否近似等于分布式文件系统中一个数据块的大小,若是,则触发数据段生成模块15;否则,触发列簇记录存储模块\n11;\n[0140] 数据段生成模块15,用于生成新的数据段,并将新的数据段追加在上一数据段的尾端;\n[0141] 文件长度判断模块16,用于判断所述存储文件长度是否达到设定长度阈值,若是,则加载服务器将内存中描述该存储文件内所有数据段的索引信息写到存储文件的尾端,关闭该存储文件,并重新建立新的存储文件;否则触发数据段生成模块15。\n[0142] 所述过滤模块2,包括:\n[0143] 判断模块21,用于判断过滤条件涉及的字段是否集中在一个列簇数据中,若是,则触发独立扫描模块22;否则,触发并行扫描模块23;\n[0144] 独立扫描模块22,用于遍历所述列簇数据的所有数据页的页面概要信息,并根据过滤条件表达式的操作类型及其所有子表达式,计算每个数据页在该过滤条件表达式下的扫描模式,以建立扫描表;\n[0145] 所述独立扫描模块22,包括:\n[0146] 运算类型判断模块221,用于判断所述过滤条件表达式的运算类型,如果是比较运算,则触发比较运算标记模块222;如果是逻辑运算,则触发逻辑运算标记模块223;如果是其他类型,则触发其他类型标记模块224;\n[0147] 比较运算标记模块222,用于当所述过滤条件表达式为比较运算时,根据该数据页的最大值和最小值判断该数据页中的所有记录是不是都能满足该比较表达式;如果所有记录都满足该比较表达式,则该数据页的扫描模式为POSITIVE;如果所有记录都不能满足该比较表达式,则该数据页的扫描模式为NEGATIVE;否则,该数据页的扫描模式为ROUGH;\n[0148] 逻辑运算标记模块223,用于当所述过滤条件表达式为逻辑运算时,首先计算其子表达式的扫描模式;接着,判断逻辑运算符:如果为AND或者OR操作,则将其子表达式运算得来的扫描模式进行逻辑运算得到最终数据页的扫描模式;如果为NOT操作,则对其子表达式运算得来的扫描模式进行取反操作:POSITIVE变为NEGATIVE,NEGATIVE变为POSITIVE,ROUGH则保持不变;\n[0149] 其他类型标记模块224,用于当所述过滤条件表达式为其他类型,则该数据页的扫描模式为ROUGH。\n[0150] 并行扫描模块23,用于将过滤条件表达式按照列簇数据归类拆分成多个子表达式,使得每个子表达式只包含该列簇数据中的字段,然后,分别对每个子表达式运用独立扫描模块22的方法,构建每个列簇的扫描模式列表;最后,将每个子表达式构建的扫描模式列表进行相应的逻辑运算,得到最终的扫描表。\n[0151] 所述并行扫描模块23,包括:\n[0152] 数据页遍历模块231.用于从不同列簇数据的第一个数据页开始遍历;\n[0153] 关系判断模块232.用于分别取得该数据页对应的页面概要信息和该数据页当前的扫描模式;通过比较两个数据页的起始记录号和结束记录号,判断这两个数据页面的相互关系,若是包含关系,则触发包含关系更新模块233;若是等价关系,则触发等价关系更新模块234;若是其他情况,则不做任何操作;\n[0154] 包含关系更新模块233,如果两个数据页进行逻辑与操作并且其中一个数据页的扫描模式为NEGATIVE,则设置另一数据页的扫描模式为NEGATIVE;如果两个数据页进行逻辑或操作并且其中一个数据页的扫描模式为POSITIVE,则设置另一数据页的扫描模式为POSITIVE;\n[0155] 等价关系更新模块234,如果两个数据页进行逻辑与操作并且任一数据页的扫描模式为NEGATIVE,则设置另一个数据页的扫描模式为NEGATIVE;如果两个数据页进行逻辑或操作并且任一数据页的扫描模式为POSITIVE,则设置另一个数据页的扫描模式为POSITIVE。\n[0156] 通过测试结果表明,使用段级列簇式存储和SCANMAP机制后,聚集类查询5~10倍优于Hive系统;在选择率低时3~5倍优于HadoopDB以及并行数据库系统GridSQL,在选择率高时50%~2倍优于HadoopDB以及GridSQL。关联类查询50%~2倍优于Hive系统。\n[0157] 本发明的有益效果在于:\n[0158] 1.本发明的基于Hadoop的海量流数据存储和查询方法和系统,针对于结构化的流数据,提出了一种基于HDFS的段级列簇式存储组织,利用列存储和压缩技术,可以减少磁盘I/O的数据量,提高数据加载和查询分析的性能;\n[0159] 2.本发明的基于Hadoop的海量流数据存储和查询方法和系统,针对流数据时间近似有序的特性,提出了SCANMAP优化机制,利用段级列簇式存储结构中记录的概要信息,对数据进行快速过滤以提高查询处理效率。\n[0160] 通过结合附图对本发明具体实施例的描述,本发明的其它方面及特征对本领域的技术人员而言是显而易见的。\n[0161] 以上对本发明的具体实施例进行了描述和说明,这些实施例应被认为其只是示例性的,并不用于对本发明进行限制,本发明应根据所附的权利要求进行解释。
法律信息
- 2022-10-28
未缴年费专利权终止
IPC(主分类): G06F 17/30
专利号: ZL 201010546473.3
申请日: 2010.11.15
授权公告日: 2012.07.25
- 2012-07-25
- 2011-05-18
实质审查的生效
IPC(主分类): G06F 17/30
专利申请号: 201010546473.3
申请日: 2010.11.15
- 2011-03-30
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2006-03-08
|
2005-09-13
| | |
2
| |
2007-01-31
|
2006-07-25
| | |
3
| |
2008-02-20
|
2007-08-16
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |