一种建立海量数据库二级索引的方法和装置的制造方法

文档序号:9839642阅读:380来源:国知局
一种建立海量数据库二级索引的方法和装置的制造方法【
技术领域
】[0001]本发明涉及数据库
技术领域
,特别是涉及一种建立海量数据库二级索引的方法和目.0【
背景技术
】[0002]在HBase中,表格的行键(RowKey)按照字典排序,分区(Reg1n)按照行键设置分裂点(SplitPoint)进行分裂,通过这种方式实现的全局、分布式索引,成为其成功的最大砝码。然而,随着HBase系统上应用的驱动,人们发现全局行键索引(Global-RowKey-1ndexing)不能满足应用的需求,人们希望像SQL—样检索数据,select*fromtablewherecol=val。可是,HBase之前的定位是大表的存储,要进行这样的查询,往往是要通过类似Hive、Pig等系统进行全表的MapReduce计算,这种方式既浪费了机器的计算资源,又因高延迟使得应用黯然失色。于是,在业界和HBase社区,针对HBase二级索引(SecondaryIndexing)的方案呼声很高,也提出了多种解决方案,但是还没有一个完美的方案能让大家接受。[0003]目前,HBase建立二级索引的方法包括单索引建表和多索引混合建表。从建立索引的方式来看,尽管多索引混合建表的建表方式比单索引建表的建表方式复杂一些,但是可以节省大量的存储空间,并且会对保证索引表分区和主表分区的一致性带来好处。从建立索引发起点的维度来看,不管二级索引的结构如何,都是选用一下两种方式之一:一种是使用协处理器Coprocessor由服务器端建立二级索引,另一种是由客户端发起对于主表和二级索引表的Put、Delete操作的双重操作。然而无论采用哪种方式都会大大影响插入、删除操作的性能,特别是需要对一张主表建立多个二级索引的时候,因为为了保持数据的一致性,只有当所有表的相应操作都完成以后才能确保该操作的成功。这将大大影响HBase的可用性。如果主表业务是在线业务,它的性能是需要得到保证的,显然这两种方式都不合适。因此,需要寻找一种的新的为HBase建立二级索引的方式,来解决建立二级索引对主表操作带来的性能问题。【
发明内容】[0004]本发明的目的在于克服现有技术的不足,提供一种建立海量数据库二级索引的方法和装置,在应用对主表进行操作时,并不同时对各二级索引进行相应的操作,解决了建立二级索引导致主表操作性能下降、可用性降低的问题。[0005]本发明的目的是通过以下技术方案来实现的:一种建立海量数据库二级索引的方法,包括以下步骤:51.为每个主表创建一个与之对应的二级索引表,并为每个二级索表引设置一个时间戳;52.扫描分区服务器中的日志文件Hlog,获取应用对主表的操作记录;53.根据应用对主表的操作记录对二级索引表进行操作,并更新二级索引表的时间戳。[0006]所述步骤SI包括以下子步骤:511.设置二级索引表的行键;512.获取主表的所有分区信息,得到所有主表分区的起始键;513.创建二级索引表;514.以相同的起始键作为二级索引表分区和主表分区的关联依据,将二级索引表分区和与其对应的主表分区分配到同一个分区服务器中;515.为二级索引表设置时间戳。[0007]所述二级索引表的行键包括四部分,按顺序依次是主表分区起始键、索引名、索引值和主表行键。[0008]所述步骤S2中每条操作记录的内容包括主表名、操作类型、行地址、列的名字、操作发生时间和值。[0009]所述步骤S3中对二级索引表进行操作的方式为:以列的名字和列的值作为二级索引行键的值,把对主表操作的行键的值作为值。[0010]—种建立海量数据库二级索引的装置,包括:协处理器Coprocessor,用于为主表创建一个与之对应的二级索引表;分区服务器,用于存储日志文件Hlog,存储日志文件Hlog包括应用对主表的操作记录;二级索引更新服务模块,运行在分区服务器上,用于根据应用对主表的操作记录对二级索引表进行操作;时间戳模块,用于设置或更新二级索引表的时间戳。[0011]所述协处理器Coprocessor以相同的起始键作为二级索引表分区和主表分区的关联依据,将二级索引表分区和与其对应的主表分区分配到同一个分区服务器中。[0012]所述应用对主表对主表的操作记录的内容包括主表名、操作类型、行地址、列的名字、操作发生时间和值。[00?3]所述协处理器Coprocessor通过扫描日志文件Hlog时采用MapReduce算法并发处理日志文件Hlog。[0014]本发明的有益效果是:(1)本发明在应用对主表进行操作时,并不同时对各二级索引进行相应的操作,保证对主表的高性能和高可用性,解决了现有方法因建立二级索引导致主表性能下降、可用性降低的问题;(2)给使用二级索引查询的应用提供了明确的数据一致性时间点:本发明通过引入时间戳,可以给出明确的数据强一致性的时间点,利用强一致性时间点,应用可以更合理的使用查询的结果;(3)不会影响系统性能:本发明可以基于现有系统的机制通过使用MapReduce算法得以实现,不需要对现有系统代码进行更改就可以整合,所以不会给系统带来性能和维护上的负担;(4)保证了二级索引的高性能查询:本发明在保证主表操作性能的同时并没有牺牲二级索引的查询效率,只是推迟了建立和更新二级索引的时间,并没有改变二级索引的模式,所以不会给二级索引的性能带来任何影响;(5)容易整合:本发明可以与任何模式的二级索引进行整合,而不需要太大的开发工作,这为本发明与先进的二级索引模式整合提供了基础。【附图说明】[0015]图1为本发明一种建立海量数据库二级索引的方法的流程图;图2为一■级索引表的彳丁键的结构不意图;图3为二级索引表分区的分配控制示意图;图4为日志文件HLog的结构示意图;图5为日志文件HLog中键值的存储结构示意图;图6为二次索引表更新服务模块扫描日志文件HLog的过程的一个实施例。【具体实施方式】[0016]下面结合附图进一步详细描述本发明的技术方案,但本发明的保护范围不局限于以下所述。[0017]如图1所示,一种建立海量数据库二级索引的方法,包括以下步骤:S1.为每个主表创建一个与之对应的二级索引表,并为每个二级索引表设置一个时间戳。[0018]所述步骤SI包括以下子步骤:Sll.设置二级索引表的行键。[0019]所述二级索引表的行键包括四部分,按顺序依次是主表分区起始键、索引名、索引值和主表行键,如图2所示。[0020]主表分区起始键:将主表分区的起始键作为二级索引分区的行键的第一部分;这样设计具有以下两个方面的好处:一是使得二级索引表分区和对应的主表分区拥有相同的起始键,这样可以将该起始键作为二级索引表分区和主表分区的关联依据;二是当主表分区分裂时,可以使用相同的分裂键SplitKey对二级索引表分区进行相应的分裂操作,并将新产生的主表分区和二级索引表分区建立关联关系。[0021]索引名:在一张主表的基础上可以定义多个索引,如果为每个索引创建一个二级索引表,则在实际应用过程中势必会产生大量的二级索引表,当主表分区分裂时,还需要对与之关联的二级索引表分区分别执行分裂操作,这将消耗大量大系统资源,并且不移维护。因此考虑将一张主表的所有索引数据存放到同一张二级索引表中,不同索引的数据以索引名进行区分。[0022]索引值:当索引是单列索引时,索引值为主表行的一个列值,当索引为组合索引时,索引值由主表行的多个列的值组合而成;主表行键,用于定位主表行,以获得最终的数据。[0023]S12.获取主表的所有分区信息,得到所有主表分区的起始键。[0024]S13.创建二级索引表。[0025]现有的创建二级索引表的方法有两种:一是编写协处理器Coprocessor创建二级索引表的代码,这样在创建新的主表时,系统就会调用相应的协处理器Coprocessor自动创建二级索引表;二是用户在创建主表的时候,同时调用接口方法创建二级索引表。[0026]因为创建主表的操作是在主服务器上完成的,该操作不会记录到分区服务器的日志文件Hlog上,所以不能通过扫描日志文件Hlog来完成二级索引表的创建。但是,因为创建主表只会有一次,一般都是在应用初始化阶段进行,所以创建主表的性能不会影响到应用实际运行的性能和可用性。所以,本发明选用了使用协处理器Coprocessor自动创建二级索引表的方法,也就是说,每当用户创建主表的时候,就会通过协处理器Coprocessor为其创建二级索引表。因为要多创建一张二级索引表,整个创建主表的时间会长一些。[0027]创建二级索引表的具体过程如下:获取主表的所有分区信息,得到所有主表分区的起始键;结合索引定义和主表分区的起始键信息,调用HBaseAdmin的createTable(finalHTableDescriptordesc,byte[][]splitKeys)方法创建二级索引表。通过这两部便建立了二级索引表分区和主表分区的以起始键为依据的一一对应关系。[0028]S14.以相同的起始键作为二级索引表分区和主表分区的关联依据,将二级索引表分区和与其对应的主表分区分配到同一个分区服务器中。[0029]二级索引表分区的分配控制过程就是保证二级索引表分区与主表分区的一一对应关系,并且被分配到同一个分区服务器的过程。为了保证这一点,需要自定义系统的负载均衡器LoadBalancer,重写均衡器集群balanceCluster方法,主要增加对二级索引表分区的分配控制。以相同的起始键作为二级索引表分区和主表分区的关联依据,将二级索引表分区和与其对应的主表分区分配到同一个分区服务器。自定义负载均衡器对二级索引表分区的分配控制过程如图3所示。此处只增加对二级索引表分区分配的控制,并不对二级索引表分区的分配进行干预,主表分区由HBase按照指定的均在均衡策略进行分配,使得对现有HBase运行环境的影响降到最小。[0030]S15.为二级索引表设置时间戳,该时间戳用于记录该二级索引表更新到对应主表的最后一个操作的时间。使用该时间戳使用二级索引表的应用可以知道所获得的查询结果的时间段,也就是说,应用可以知道对时间当前第1页1 2 
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1