一种基于HBase的数据查询方法与流程

文档序号:13427031阅读:173来源:国知局
本发明涉及数据处理领域,尤指一种基于hbase的数据查询方法。
背景技术
:hbase是一个分布式的、面向列的开源数据库,一个结构化数据的分布式存储系统”。hbase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是hbase基于列的而不是基于行的模式。hbase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用hbase技术可在廉价pcserver上搭建起大规模结构化存储集群。目前hbase主要应用在结构化和半结构化的大数据存储上,其在插入和读取上都具有极高的性能表现,这与它的数据组织方式有着密切的关系,在逻辑上,hbase的表数据按rowkey进行字典排序,rowkey实际上是数据表的一级索引(primaryindex),由于hbase本身没有二级索引(secondaryindex)机制,基于索引检索数据只能单纯地依靠rowkey的一级索引方式进行数据检索,而rowkey具有长度限制,并且rowkey确定后,不能再改动。因此如何能够在不更改rowkey的字段的情况下,快速查询出目标文件是本发明将要解决的问题。技术实现要素:本发明的目的是提供一种基于hbase的数据查询方法,实现增加数据查询效率,提升用户查询检索的体验。本发明提供的技术方案如下:本发明提供一种基于hbase的数据查询方法,包括步骤:s100获取查询条件,判断所述查询条件的查询字段是否属于rowkey;若是,执行步骤s200;否则,执行步骤s300;s200根据所述查询字段在一级索引表中进行数据查询得到目标文件;s300根据所述查询字段在二级索引表中,获得对应于所述查询字段的对应rowkey;s400根据所述对应rowkey在所述一级索引表中进行数据查询得到目标文件。进一步的,所述步骤s100包括步骤:s110获取所述查询条件,解析所述查询条件得到所述查询字段;s120判断所述查询字段是否属于所述rowkey;若是,执行步骤s200;否则,执行步骤s300。进一步的,所述步骤s120之后还包括步骤:s130判断所述查询字段是否是所述rowkey中的预设位置范围内的字段;若是,执行步骤s200;否则,执行步骤300。进一步的,所述步骤s100之前包括步骤:s010将所有数据写入网盘中;s020根据每条数据自身的元数据信息生成所述rowkey;s030将每条数据根据所述rowkey,分类生成所述一级索引表;s040在生成所述一级索引表的同时,根据预设字段和对应于所述预设字段的rowkey生成初始二级索引表;s050保存所述一级索引表和所述初始二级索引表至所述网盘的hbase库中。进一步的,所述步骤s300包括步骤:s310判断所述查询字段是否是所述预设字段;若是,执行步骤s320;否则,执行步骤s340;s320对所述一级索引表进行处理,得到新的二级索引表;s330根据所述查询字段在所述新的二级索引表中,获得对应于所述查询字段的对应rowkey;s340根据所述查询字段在所述初始二级索引表中,获得对应于所述查询字段的对应rowkey。进一步的,所述步骤s300还包括步骤:s350获取管理命令;s360当所述管理命令为删除类型时,根据所述管理命令进行相应的操作;s370当所述管理命令为添加类型时,根据所述管理命令进行相应的操作;s380当所述管理命令为修改类型时,根据所述管理命令进行相应的操作。进一步的,所述步骤s360包括步骤:s361根据所述管理命令中的rowkey,在所述一级索引表中查找出对应于所述rowkey的待删除数据;s362根据所述管理命令删除所述一级索引表中的所述待删除数据;s363根据所述待删除数据和所述管理命令中的rowkey生成第一索引记录;s364在所述二级索引表中删除所述第一索引记录对应的数据。进一步的,所述步骤s370包括步骤:s371将新添加数据根据元数据信息生成所述新添加数据对应的rowkey;s372根据所述新添加数据对应的rowkey,将所述新添加数据分类保存至所述一级索引表;s373根据所述新添加数据对应的rowkey和所述新添加数据生成第二索引记录;s374将所述第二索引记录按照预设顺序插入到所述二级索引表。进一步的,所述步骤s380包括步骤:s381根据所述管理命令中的rowkey,在所述一级索引表中查找出对应于所述rowkey的待修改数据;s382根据所述管理命令在所述一级索引表修改所述待修改数据,得到修改后数据;s383根据所述待修改数据和所述管理命令中的rowkey生成第三索引记录;s384在所述二级索引表中删除所述第三索引记录对应的数据;s385根据所述修改后数据和所述管理命令中的rowkey生成第四索引记录;s386将所述第四索引记录按照预设顺序插入到所述二级索引表。进一步的,所述步骤s200和所述步骤s400的查询方式为通过hbase的get方法进行查询。通过本发明提供的一种基于hbase的数据查询方法,能够带来以下至少一种有益效果:1)本发明能够根据查询字段的类型进行判断,从而针对性地选择合适的查询方式查找目标文件,提升查找检索的效率。2)本发明具备多条件查询优化方法,并具备快速获取rowkey的能力,完善查询,实现系统的新功能。3)本发明可实时更新网盘hbase数据库中的数据,提升检索查询准确率。附图说明下面将以明确易懂的方式,结合附图说明优选实施方式,对一种基于hbase的数据查询方法的上述特性、技术特征、优点及其实现方式予以进一步说明。图1是本发明一种基于hbase的数据查询方法的一个实施例的流程图;图2是本发明一种基于hbase的数据查询方法的另一个实施例的流程图;图3是本发明一种基于hbase的数据查询方法的另一个实施例的流程图;图4是本发明一种基于hbase的数据查询方法的另一个实施例的流程图;图5是本发明一种基于hbase的数据查询方法的另一个实施例的流程图;图6是本发明一种基于hbase的数据查询方法的另一个实施例的流程图;图7是本发明一种基于hbase的数据查询方法的另一个实施例的流程图。具体实施方式为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对照附图说明本发明的具体实施方式。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图,并获得其他的实施方式。为使图面简洁,各图中只示意性地表示出了与本发明相关的部分,它们并不代表其作为产品的实际结构。另外,以使图面简洁便于理解,在有些图中具有相同结构或功能的部件,仅示意性地绘示了其中的一个,或仅标出了其中的一个。在本文中,“一个”不仅表示“仅此一个”,也可以表示“多于一个”的情形。图1是本发明一种基于hbase的数据查询方法的一个实施例,包括:s100获取查询条件,判断所述查询条件的查询字段是否属于rowkey;若是,执行步骤s200;否则,执行步骤s300;s200根据所述查询字段在一级索引表中进行数据查询得到目标文件;s300根据所述查询字段在二级索引表中,获得对应于所述查询字段的对应rowkey;s400根据所述对应rowkey在所述一级索引表中进行数据查询得到目标文件。具体的,本实施例中,这里一级索引表是用户将数据导入网盘中时,就已经在hbase数据库中分类储存好,而二级索引表可能是生成以及索引表的时候就已经生成,也可能是在获取查询条件后才生成。因此在获取查询条件后,需要对查询字段进行判断,判断是否是属于rowkey的字段范围内,如果查询字段在rowkey的字段范围内,那么说明该查询字段在就之间在rowkey的查询有效范围内,因此可以直接根据该有效字段在一级索引表中进行数据查询,找到目标文件。如果查询字段在rowkey的字段范围外,那么说明该查询字段在就之间在rowkey的查询有效范围外,因此需要根据所述查询字段在二级索引表中,获得对应于所述查询字段的对应rowkey,然后根据对应rowkey在一级索引表中进行数据查询得到目标文件。图2是本发明一种基于hbase的数据查询方法的另一个实施例,包括:s110获取所述查询条件,解析所述查询条件得到所述查询字段;s120判断所述查询字段是否属于所述rowkey;若是,执行步骤s200;否则,执行步骤s310;s130判断所述查询字段是否是所述rowkey中的预设位置范围内的字段;若是,执行步骤s200;否则,执行步骤310;s200根据所述查询字段在一级索引表中进行数据查询得到目标文件;s310判断所述查询字段是否是预设字段;若是,执行步骤s320;否则,执行步骤s340;s320对所述一级索引表进行处理,得到新的二级索引表;s330根据所述查询字段在所述新的二级索引表中,获得对应于所述查询字段的对应rowkey;s340根据所述查询字段在初始二级索引表中,获得对应于所述查询字段的对应rowkey;s400根据所述对应rowkey在所述一级索引表中进行数据查询得到目标文件。具体的,本实施例中,本发明涉及在网盘上,提供了一种分类查询方法,在hbase数据库中,能根据自定义的分类标签,查询出相关的文件或数据。hbase是一个分布式的、面向列的开源数据库,一个结构化数据的分布式存储系统”。hbase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是hbase基于列的而不是基于行的模式。是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用hbase技术可在廉价pcserver上搭建起大规模结构化存储集群。hbase是一种非结构化的数据库,存储网盘元数据有很大优势,hbase对查询字段在rowkey中的查询速度快,效率高。对查询字段不在rowkey中的字段查询,需要使用过滤器,查询效率很低。因此,合理构造rowkey,如把经常查询的字段组合在一起,放在rowkey中,会提高系统效率。然而,由于rowkey的长度限制:rowkey超长后查询效率下降,不能把所有要查询的字段放在rowkey中。rowkey的变更限制:系统开发完毕,rowkey确定后,不能再改动,因此后续表增加字段,无法加到rowkey中,不能快速查询。本发明,将获取的查询条件进行解析得到查询字段,这样可以只对查询字段进行查询,无效部分不需要查询,由于只检索查询字段,这样能够节省查询时间,提升cpu处理效率,节约系统资源。本发明,查询字段在rowkey的字段范围内,才能进行相关的查询,然而,如果查询字段在rowkey的字段的预设位置范围外,例如末端时,由于rowkey的特性,导致查询时会查询到很多不需要的目标文件(包括数据或文件),这样查询会出现冗余,因此如果查询字段是在rowkey内,但是不在rowkey的预设位置范围内时,那么就需要通过在二级索引表查找出对应的rowkey,然后再根据对应的rowkey在一级索引表中进行查找出目标文件。如果查询字段是在rowkey内,且在rowkey的预设位置范围内时,可以直接根据查询字段在一级索引表中进行查询。本发明能够根据查询字段的类型进行判断,从而针对性地选择合适的查询方式查找目标文件,提升查找检索的效率。另外,判断查询字段是否是预设字段,能够便于系统选择在哪种类型的二级索引表中进行查找对应rowkey,从而在对应的二级索引表中进行查找对应的rowkey,提升查找检索的效率。图3是本发明一种基于hbase的数据查询方法的另一个实施例,包括:s010将所有数据写入网盘中;s020根据每条数据自身的元数据信息生成所述rowkey;s030将每条数据根据所述rowkey,分类生成所述一级索引表;s040在生成所述一级索引表的同时,根据预设字段和对应于所述预设字段的rowkey生成初始二级索引表;s050保存所述一级索引表和所述初始二级索引表至所述网盘的hbase库中;具体的,本实施例中,本实施例至基于上述实施例基础上的实施例。网盘是一种互联网存储系统,在云端采用扁平化的方式保存文件。用户在网盘创建的目录结构、文件路径等,在数据库做记录。网盘采用hbase数据库记录用户的元数据(metadate)。元数据可以为数据说明其元素或属性(名称、大小、数据类型等),或其结构(长度、字段、数据列),或其相关数据(位于何处、如何联系、拥有者)。rowkey是行的主键,而且hbase只能用个rowkey,或者一个rowkey范围即scan来查找数据。所以rowkey的设计是至关重要的,关系到应用层的查询效率,rowkey是以字典顺序排序的,如果是字母,那就是字母的顺序,如果是数字,那就是数字的顺序。比如,有两个rowkey,rowkey1:aaa222,rowkey2:bbb111,那么rowkey1是排在rowkey2前面的,因为按字典,a排在b前面,如果rowkey2的第一位也是a,那么就根据第二位来比较,如果还相同,则比较第三位,后面同样。这个理解了,我们在根据rowkey范围查询的时候,我们一般是知道startrowkey,如果我们通过scan只传startrowkey:d开头的,那么查询的是所有比d大的都查了,而我们只需要d开头的数据,那就要通过endrowkey来限制。我们可以通过设定endrowkey为:d开头,后面的根据你的rowkey组合来设定,一般是比startkey大一位。比如说rowkey设计为:用户id-日期,那么查某个用户某天的数据,startkey为3231-20121212,endkey为:3231+20121213,那么你查到的就是用户为3231在20121212这一天的数据。下面举个例子,如表1所示是hbase网盘文件基本数据表:表1.hbase网盘文件基本数据表表1是数据导入hbase数据库后,系统根据元数据分类储存得到的hbase网盘文件基本数据表,即一级索引表,记录有每个文件或目录的基本信息,包括名称,路径,时间,大小,缩略图,类型等。假设rowkey由uid+name+path+time(编号+名称+路径+时间)按照顺序组成。按照名称查询、按路径查询、按照时间查询,是经常用到的查询方式,因此这几个字段统一长度后放到rowkey中,查询效率高。对type字段,查询频率稍微低一些,建立专用的文件分类索引表,用于查询。如表2所示,index(rowkey)fctype1+rk1......type2+rk2......type3+rk3......type4+rk4..................表2.是文件类型索引表该二级索引表只有rowkey一个字段,该二级索引表的rowkey由type+基本数据表的rowkey组成。列族中没有任何字段,如果用户需要查询的其他信息,先根据用户的条件字段进行匹配看是哪种类型,然后得到相应类型的对应rowkey,再根据该对应rowkey在表1中根据对应rowkey进行查找搜索。二级索引表不添加任何基本信息,只有基本的type+基本数据表的rowkey,这样可以减少二级索引表的大小,从而减小数据库的占用内存,进一步提升搜素查询的效率。另外,二级索引表的建立,有两种方式:1)在系统建立时创建该索引表。之后基本数据表每插入一条数据,对应的文件分类索引表也同步插入记录。这种方式是在一级索引表生成的同时,会生成初始二级索引表,如根据size,thumb,type等等在一级索引表内的预设字段,但是由于其不在rowkey内,或者,time虽然在rowkey内,但是其不在预设位置范围内,如不在首字段,因此,虽然能够之间根据查询字段在一级索引表中进行搜索查询,但是,因为查询频率较低或者位置靠后,根据rowkey的特性,导致查询时会查出大量的位置靠前的查询字段的文件,如想要查询type1的目标文件,直接在一级索引表中进行搜索查询,可能会先查出name1中的大量文件,而这些文件可能包括除了type1的目标文件,还可能包括type2的文件,type3的文件,然后为了准确地找到type1的目标文件,会从找出的所有文件中剔除type2的文件,type3的文件,这样会导致查找的效率大大降低,影响用户的查询体验。系统建立时对size,thumb,type等等预设字段,或者在rowkey中但是在预设位置范围外的字段,根据这些字段和相对应rowkey生成初始二级索引表,能够减少rowkey的长度而生成二级索引表,不仅仅能够由于rowkey的较小,使得在一级索引表中查询效率增大,而且还能够提升非rowkey的字段的查询效率。2)系统运行一段时间后,需要增加对文件分类字段的查询。此时可以先基于基本数据表的已有数据,一次性生成对应的文件分类索引表,之后再按照1)描述的方法向两个表同步插入数据。如hash,share等等不属于rowkey的范围内的字段,会根据需要分别建立的hash值二级索引表和用户分享二级索引表。如表3和表4所示:index(rowkey)fchash1+rk1hash2+rk2hash3+rk3hash4+rk4......表3.文件hash值索引表index(rowkey)fcshare1+rk1share2+rk2share3+rk3share4+rk4......表4.文件分享索引表本发明提出了一种网盘中基于hbase数据库的二级索引方法,在rowkey不增加字段情况下,快速查询出所需信息。该方法也适用于后续增加查询字段的需求。利用二级索引实现网盘系统hbase数据库中非rowkey字段的快速查询,还能通过增加分类索引表的方式,完善查询,实现系统的新功能。下面举个查询的例子,包括步骤:s11:根据输入的文件类型,在文件类型索引表查询index包含该类型的记录;s12:查询到一条或多条记录,从中解析出对应的基本数据表中的rowkey;s13:在基本信息表根据rowkey找到相关记录;s14:文件在客户端根据分类展示;s15:流程结束。本发明能够利用二级索引实现云盘系统hbase数据库中非rowkey字段的快速查询。图4是本发明一种基于hbase的数据查询方法的另一个实施例,包括:s350获取管理命令;s360当所述管理命令为删除类型时,根据所述管理命令进行相应的操作;s370当所述管理命令为添加类型时,根据所述管理命令进行相应的操作;s380当所述管理命令为修改类型时,根据所述管理命令进行相应的操作。具体的,本实施例中s360-s380之间的顺序并不是唯一顺序,可以是任意组合排列顺序。本发明能够实时地对hbase的一级索引表和二级索引表进行更新,能够更加需求或者喜好增减或者修改相应的数据或文件,从而能够更合理的更新无用的或者错误的表单项,避免维护的盲目性,提高系统的查询效率。图5是本发明一种基于hbase的数据查询方法的另一个实施例,包括:s361根据所述管理命令中的rowkey,在所述一级索引表中查找出对应于所述rowkey的待删除数据;s362根据所述管理命令删除所述一级索引表中的所述待删除数据;s363根据所述待删除数据和所述管理命令中的rowkey生成第一索引记录;s364在所述二级索引表中删除所述第一索引记录对应的数据。具体的,本实施例中,可实时删除网盘hbase数据库中的重复数据或者错误的数据或者无效的数据,节省网盘存储空间,提高利用效率。图6是本发明一种基于hbase的数据查询方法的另一个实施例,包括:s371将新添加数据根据元数据信息生成所述新添加数据对应的rowkey;s372根据所述新添加数据对应的rowkey,将所述新添加数据分类保存至所述一级索引表;s373根据所述新添加数据对应的rowkey和所述新添加数据生成第二索引记录;s374将所述第二索引记录按照预设顺序插入到所述二级索引表。具体的,本实施例中,当需要新增数据时,可以根据用户需要将数据记录添加至一级索引表中,这里假设将要新增的数据分析得到的元数据信息为rk1+name1+path1+time1+size+thumb1+type1,那么就之间归类该数据至该rk1对应的储存区域内,如果是上述rk1,rk2,rk3,rk4外的数据,则新增rk5,本发明能够实时根据用户需求进行更新hbase的数据,并实时更新一级索引表和二级索引表。图7是本发明一种基于hbase的数据查询方法的另一个实施例,包括:s381根据所述管理命令中的rowkey,在所述一级索引表中查找出对应于所述rowkey的待修改数据;s382根据所述管理命令在所述一级索引表修改所述待修改数据,得到修改后数据;s383根据所述待修改数据和所述管理命令中的rowkey生成第三索引记录;s384在所述二级索引表中删除所述第三索引记录对应的数据;s385根据所述修改后数据和所述管理命令中的rowkey生成第四索引记录;s386将所述第四索引记录按照预设顺序插入到所述二级索引表。具体的,本实施例中,举个例子,s21:在基本数据表中找到要修改文件类型的文件记录,并进行修改;s22:根据原文件类型,和rowkey,生成文件分类索引表的index;s23:在文件分类索引表删除index对应的记录;s24:根据新文件类型和rowkey,生成文件分类索引表的新index;s25:在文件分类索引表插入新记录,index字段是步骤四生成的index;s26:流程结束。将错误的数据删除,修改替换新的数据,如将表1中的rk1中对应的type1修改为type2,只需要修改type2后,对表2的rk1对应的type1修改为type2即可,减少了存储空间的占用,并无需对存储空间进行扩容,进而节省了成本。上述所有实施例中,查询方式为通过hbase的get方法进行查询。通过表名及字段名获取存储对应的二级索引表,再从二级索引表中根据进行获取rowkey,根据rowkey进行get操作,从hbase数据库中一级索引表获取的目标文件,以此到达最快的查询性能。由于在hbase数据库查询中,get查询速度是最快的,因为get查询是直接通过rowkey到对应的目标文件。本发明具备多条件查询优化方法,并具备快速获取rowkey的能力,完善查询,实现系统的新功能。应当说明的是,上述实施例均可根据需要自由组合。以上所述仅是本发明的优选实施方式,应当指出,对于本
技术领域
的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1