数据存储查询方法及系统的制作方法

文档序号:6507445阅读:156来源:国知局
数据存储查询方法及系统的制作方法【专利摘要】本发明提供了一种数据存储查询方法及系统,该数据存储查询方法包括如下步骤:存储步骤:将数据保存到hbase上,将数据的主键作为hbase的key来保存,同时把查询字段放入到redis中,将查询字段作为key,hbase的key作为value来保存在redis的set结构中;查询步骤:先将查询条件在redis中查询,得到hbase上的key后,用此key在hbase查询提取数据。本发明的有益效果是本发明结合Hbase的海量查询和Redis分布式缓存的快速查询,同时对信息结构进行有效的组织存放,在拥有海量存储的同时保证了实时查询的性能。【专利说明】数据存储查询方法及系统【
技术领域
】[0001]本发明涉及数据处理,尤其涉及数据存储查询方法及系统。【
背景技术
】[0002]目前的海量数据的实时查询中,传统解决方法一般用关系型数据保存经常查询的部分,海量数据放在分布式数据库中,保证了提供大部分的实时查询应用。[0003]单独用Hbase对海量数据的过滤是很耗费时间的,性能低下,同时对联表交叉查询是不支持的。[0004]单独用Redis对海量数据的支持不是很好。同时不能方便快捷的进行扩展。对数据的可靠性也得不到充分的保障。【
发明内容】[0005]为了解决现有技术中的问题,本发明提供了一种数据存储查询方法及系统。[0006]本发明提供了一种数据存储查询方法,包括如下步骤:存储步骤:将数据保存到hbase上,将数据的主键作为hbase的key来保存,同时把查询字段放入到redis中,将查询字段作为key,hbase的key作为value来保存在redis的set结构中;查询步骤:先将查询条件在redis中查询,得到hbase上的key后,用此key在hbase查询提取数据。[0007]作为本发明的进一步改进,在所述存储步骤中包括如下步骤:Al.从原始数据顺序取出每条记录,判断是否还有记录没有取出,若还有记录没有取出,那么执行步骤A2,否则结束;A2.取出一条记录;A3.判断原始记录是否有主键,若是,那么执行步骤A4,否则,确定key后执行步骤A4;A4.将查询条件字典作为key,主键作为value存储到redis中;A5.主键作为key,记录作为一个列簇存储到hbase中,然后执行步骤Al。[0008]作为本发明的进一步改进,在所述步骤A3中,判断原始记录是否有主键,若是,那么执行步骤A4,否则,通过hash函数确定每行唯一的key或者通过唯一ID作为key后执行步骤A4。[0009]作为本发明的进一步改进,在所述查询步骤中包括如下步骤:B1.根据查询条件,查询redis,判断是否有对应key值,若是,那么执行步骤B2,否则结束;B2.取出redis中key对应的value;B3.value作为主键,在hbase中查询对应列簇的值;B4.判断是否为联表查询,若是,那行执行子条件查询步骤,否则执行步骤B5;B5.返回列簇的值,然后结束。[0010]作为本发明的进一步改进,在所述条件查询步骤中包括如下步骤:(1).依次取出每个子条件,查询;(2).判断是否还有子条件,若是,那么执行步骤(3),否则通过条件的“与或”关系,循环遍历各个子条件查询的结果集,取出“交集”或“并集”然后结束;(3).取出一个子条件,然后执行步骤BI。[0011]本发明还提供了一种数据存储查询系统,包括:存储单元,用于将数据保存到hbase上,将数据的主键作为hbase的key来保存,同时把查询字段放入到redis中,将查询字段作为key,hbase的key作为value来保存在redis的set结构中;查询单元,用于先将查询条件在redis中查询,得到hbase上的key后,用此key在hbase查询提取数据。[0012]作为本发明的进一步改进,在所述存储单元中还包括:记录取出判断模块,用于从原始数据顺序取出每条记录,判断是否还有记录没有取出,若还有记录没有取出,那么执行获取模块,否则结束;获取模块,用于取出一条记录;原始记录的主键判断模块,用于判断原始记录是否有主键,若是,那么执行第一存储模块,否则,确定key后执行第一存储模块;第一存储模块,用于将查询条件字典作为key,主键作为value存储到redis中;第二存储模块,用于主键作为key,记录作为一个列簇存储到hbase中,然后执行记录取出判断模块。[0013]作为本发明的进一步改进,在所述原始记录的主键判断模块中,判断原始记录是否有主键,若是,那么执行第一存储模块,否则,通过hash函数确定每行唯一的key或者通过唯一ID作为key后执行第一存储模块。[0014]作为本发明的进一步改进,在所述查询单元中还包括:查询条件判断模块,用于根据查询条件,查询redis,判断是否有对应key值,若是,那么执行提取模块,否则结束;提取模块,用于取出redis中key对应的value;查询模块,用于value作为主键,在hbase中查询对应列簇的值;联表查询判断模块,用于判断是否为联表查询,若是,那行执行子条件查询单元,否则执行列簇值返回模块;列簇值返回模块,用于返回列簇的值,然后结束。[0015]作为本发明的进一步改进,在所述子条件查询单元中包括:子条件提取模块,用于依次取出每个子条件,查询;子条件判断模块,用于判断是否还有子条件,若是,那么执行获取一个子条件模块,否则通过条件的“与或”关系,循环遍历各个子条件查询的结果集,取出“交集”或“并集”然后结束;获取一个子条件模块,用于取出一个子条件,然后执行查询条件判断模块。[0016]本发明的有益效果是:本发明结合Hbase的海量查询和Redis分布式缓存的快速查询,同时对信息结构进行有效的组织存放,在拥有海量存储的同时保证了实时查询的性能。【专利附图】【附图说明】[0017]图1是本发明的存储步骤方法流程图。[0018]图2是本发明的查询步骤方法流程图。【具体实施方式】[0019]本发明公开了一种数据存储查询方法,包括如下步骤:存储步骤:将数据保存到hbase上,将数据的主键作为hbase的key来保存,同时把查询字段放入到redis中,将查询字段作为key,hbase的key作为value来保存在redis的set结构中;查询步骤:先将查询条件在redis中查询,得到hbase上的key后,用此key在hbase查询提取数据。[0020]如图1所示,在所述存储步骤中包括如下步骤:51.从原始数据顺序取出每条记录,判断是否还有记录没有取出,若还有记录没有取出,那么执行步骤S2,否则结束;52.取出一条记录;53.判断原始记录是否有主键,若是,那么执行步骤S4,否则,确定key后执行步骤S4;54.将查询条件字典作为key,主键作为value存储到redis中;55.主键作为key,记录作为一个列簇存储到hbase中,然后执行步骤SI。[0021]在所述步骤S3中,判断原始记录是否有主键,若是,那么执行步骤S4,否则,通过hash函数确定每行唯一的key或者通过唯一ID作为key后执行步骤S4。[0022]如图2所示,在所述查询步骤中包括如下步骤:Ql.根据查询条件,查询redis,判断是否有对应key值,若是,那么执行步骤Q2,否则结束;Q2.取出redis中key对应的value;Q3.value作为主键,在hbase中查询对应列簇的值;Q4.判断是否为联表查询,若是,那行执行子条件查询步骤,否则执行步骤Q5;B5.返回列簇的值,然后结束。[0023]在所述条件查询步骤中包括如下步骤:Zl.依次取出每个子条件,查询;Z2.判断是否还有子条件,若是,那么执行步骤Z3,否则通过条件的“与或”关系,循环遍历各个子条件查询的结果集,取出“交集”或“并集”然后结束;Z3.取出一个子条件,然后执行步骤Ql。[0024]本发明还公开了一种数据存储查询系统,包括:存储单元,用于将数据保存到hbase上,将数据的主键作为hbase的key来保存,同时把查询字段放入到redis中,将查询字段作为key,hbase的key作为value来保存在redis的set结构中;查询单元,用于先将查询条件在redis中查询,得到hbase上的key后,用此key在hbase查询提取数据。[0025]在所述存储单元中还包括:记录取出判断模块,用于从原始数据顺序取出每条记录,判断是否还有记录没有取出,若还有记录没有取出,那么执行获取模块,否则结束;获取模块,用于取出一条记录;原始记录的主键判断模块,用于判断原始记录是否有主键,若是,那么执行第一存储模块,否则,确定key后执行第一存储模块;第一存储模块,用于将查询条件字典作为key,主键作为value存储到redis中;第二存储模块,用于主键作为key,记录作为一个列簇存储到hbase中,然后执行记录取出判断模块。[0026]在所述原始记录的主键判断模块中,判断原始记录是否有主键,若是,那么执行第一存储模块,否则,通过hash函数确定每行唯一的key或者通过唯一ID作为key后执行第一存储模块。[0027]在所述查询单元中还包括:查询条件判断模块,用于根据查询条件,查询redis,判断是否有对应key值,若是,那么执行提取模块,否则结束;提取模块,用于取出redis中key对应的value;查询模块,用于value作为主键,在hbase中查询对应列簇的值;联表查询判断模块,用于判断是否为联表查询,若是,那行执行子条件查询单元,否则执行列簇值返回模块;列簇值返回模块,用于返回列簇的值,然后结束。[0028]在所述子条件查询单元中包括:子条件提取模块,用于依次取出每个子条件,查询;子条件判断模块,用于判断是否还有子条件,若是,那么执行获取一个子条件模块,否则通过条件的“与或”关系,循环遍历各个子条件查询的结果集,取出“交集”或“并集”然后结束;获取一个子条件模块,用于取出一个子条件,然后执行查询条件判断模块。[0029]HBase是一个分布式的、面向列的开源数据库,该技术来源于Changetal所撰写的Google论文“Bigtable:—个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(FileSystem)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。HBase-HadoopDatabase,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PCServer上搭建起大规模结构化存储集群。[0030]redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sortedset—有序集合)和hashs(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached—样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。Redis是一个高性能的key-value数据库。redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。[0031]本发明结合Hbase的海量查询和Redis分布式缓存的快速查询,同时对信息结构进行有效的组织存放,在拥有海量存储的同时保证了实时查询的性能。[0032]优点有:1.提供海量存储,拥有良好的扩展性,可以随着业务的增长动态扩展。[0033]2.提供良好的可靠性,利用hdfs的备份策略和安全机制,满足存储的可靠性需求3.提供良好的读写分离,利用hbase的读写分离,和架构特点,不存在锁表问题。[0034]4.提供实时查询性能,利用redis的内存存储快速检索数据,提供实时响应的反应能力5.架构简洁有效。避免了不必要的通信和中间状态的存储。保证架构的可靠性。[0035]以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属【
技术领域
】的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。【权利要求】1.一种数据存储查询方法,其特征在于,包括如下步骤:存储步骤:将数据保存到hbase上,将数据的主键作为hbase的key来保存,同时把查询字段放入到redis中,将查询字段作为key,hbase的key作为value来保存在redis的set结构中;查询步骤:先将查询条件在redis中查询,得到hbase上的key后,用此key在hbase查询提取数据。2.根据权利要求1所述的数据存储查询方法,其特征在于,在所述存储步骤中包括如下步骤:A1.从原始数据顺序取出每条记录,判断是否还有记录没有取出,若还有记录没有取出,那么执行步骤A2,否则结束;A2.取出一条记录;A3.判断原始记录是否有主键,若是,那么执行步骤A4,否则,确定key后执行步骤A4;A4.将查询条件字典作为key,主键作为value存储到redis中;A5.主键作为key,记录作为一个列簇存储到hbase中,然后执行步骤Al。3.根据权利要求2所述的数据存储查询方法,其特征在于,在所述步骤A3中,判断原始记录是否有主键,若是,那么执行步骤A4,否则,通过hash函数确定每行唯一的key或者通过唯一ID作为key后执行步骤A4。4.根据权利要求1所述的数据存储查询方法,其特征在于,在所述查询步骤中包括如下步骤:B1.根据查询条件,查询redis,判断是否有对应key值,若是,那么执行步骤B2,否则结束;B2.取出redis中key对应的value;B3.value作为主键,在hbase中查询对应列簇的值;B4.判断是否为联表查询,若是,那行执行子条件查询步骤,否则执行步骤B5;B5.返回列簇的值,然后结束。5.根据权利要求4所述的数据存储查询方法,其特征在于,在所述条件查询步骤中包括如下步骤:(1).依次取出每个子条件,查询;(2).判断是否还有子条件,若是,那么执行步骤(3),否则通过条件的“与或”关系,循环遍历各个子条件查询的结果集,取出“交集”或“并集”然后结束;(3).取出一个子条件,然后执行步骤BI。6.一种数据存储查询系统,其特征在于,包括:存储单元,用于将数据保存到hbase上,将数据的主键作为hbase的key来保存,同时把查询字段放入到redis中,将查询字段作为key,hbase的key作为value来保存在redis的set结构中;查询单元,用于先将查询条件在redis中查询,得到hbase上的key后,用此key在hbase查询提取数据。7.根据权利要求6所述的数据存储查询系统,其特征在于,在所述存储单元中还包括:记录取出判断模块,用于从原始数据顺序取出每条记录,判断是否还有记录没有取出,若还有记录没有取出,那么执行获取模块,否则结束;获取模块,用于取出一条记录;原始记录的主键判断模块,用于判断原始记录是否有主键,若是,那么执行第一存储模块,否则,确定key后执行第一存储模块;第一存储模块,用于将查询条件字典作为key,主键作为value存储到redis中;第二存储模块,用于主键作为key,记录作为一个列簇存储到hbase中,然后执行记录取出判断模块。8.根据权利要求7所述的数据存储查询系统,其特征在于,在所述原始记录的主键判断模块中,判断原始记录是否有主键,若是,那么执行第一存储模块,否则,通过hash函数确定每行唯一的key或者通过唯一ID作为key后执行第一存储模块。9.根据权利要求6所述的数据存储查询系统,其特征在于,在所述查询单元中还包括:查询条件判断模块,用于根据查询条件,查询redis,判断是否有对应key值,若是,那么执行提取模块,否则结束;提取模块,用于取出redis中key对应的value;查询模块,用于value作为主键,在hbase中查询对应列簇的值;联表查询判断模块,用于判断是否为联表查询,若是,那行执行子条件查询单元,否则执行列簇值返回模块;列簇值返回模块,用于返回列簇的值,然后结束。10.根据权利要求9所述的数据存储查询系统,其特征在于,在所述子条件查询单元中包括:子条件提取模块,用于依次取出每个子条件,查询;子条件判断模块,用于判断是否还有子条件,若是,那么执行获取一个子条件模块,否则通过条件的“与或”关系,循环遍历各个子条件查询的结果集,取出“交集”或“并集”然后结束;获取一个子条件模块,用于取出一个子条件,然后执行查询条件判断模块。【文档编号】G06F17/30GK103473267SQ201310346905【公开日】2013年12月25日申请日期:2013年8月9日优先权日:2013年8月9日【发明者】冯新,王健,陈炼茂,肖铁军申请人:深圳市中科新业信息科技发展有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1