在线创建索引的实现方法技术

技术编号:30025607 阅读:24 留言:0更新日期:2021-09-11 06:55
本发明专利技术公开了一种在线创建索引的实现方法,属一种数据库索引表创建方法,该方法首先根据数据库中原表索引的定义,创建与索引相对应的实体索引表;然后生成索引表的元数据信息,将索引表的状态设为“维护”,并同步索引表的状态信息到各个服务进程中,且当前状态的索引表只接受插入、删除和更新的SQL感知等;本发明专利技术以索引原表为一张单独表为前提,通过增加索引原表的“维护”状态,以分阶段维护索引的方式来实现索引表在线创建而不影响交易,且通过历史数据同步再删除无效数据的方式,确保索引表与原表的数据一致,使得SQL On HBase数据库在线创建索引的过程中无需锁表,且不依赖于临时表或日志,亦不影响数据库交易正常进行。亦不影响数据库交易正常进行。亦不影响数据库交易正常进行。

【技术实现步骤摘要】
在线创建索引的实现方法


[0001]本专利技术涉及一种数据库索引表创建方法,更具体的说,本专利技术主要涉及一种在线创建索引的实现方法。

技术介绍

[0002]在SQL On HBase数据库上创建索引,为了保证索引和原表的数据一致性,通常是通过锁表的方式来实现,但是这样会影响实时交易。传统的关系型数据库为了做到不锁表,降低对实时交易的影响,通常会通过创建临时表、日志回放或者两次读原表的方式来创建索引。但是SQL On HBase数据库上的索引和传统数据库不同,是以表的形式存在的,所以传统数据库上的在线创建索引的方法在SQL On HBase数据库上可以参考,但不一定是最好的方式。传统数据库的创建在线索引的三种方式都能不同程度的降低对实时交易的影响,但是也存在一些缺陷。其中一种是基于临时表的在线创建索引的方案需要将原表的数据导出到临时表中,如果表比较大,对空间的要求比较高。另一种是基于日志回放的在线创建索引的方案在将表里的记录插入到索引的过程中,需要将更新的记录记入日志当中,在表里的记录扫描完毕,会重放日志当中的记录修改,并记入索引。在重放日志的最后阶段还是需要锁表,虽然减少了锁表的时间,但是还是会对交易有一定影响。还有一种是基于两次读原表的方式在线创建索引的方案,第一次扫描表前先开启事务1,拿到当前shanpshot1,扫描前还需要等待所有修改过该表的事务结束,扫描该表,创建索引,不阻塞读写,结束事务1。第二次扫描该表前需要开启事务2,拿到当前的snapshot2,再次扫描该表前还需要等待所有修改过该表的事务结束。最后更新索引结束后,还需要等待事务2之前开启的持有snapshot的事务结束。创建索引的过程需要两次扫描,三次等待。每一次扫描的过程中出现问题都会对DML有影响。因此有必要针对SQL On HBase数据库的表创建索引会影响实时交易的问题进行研究和改进。

技术实现思路

[0003]本专利技术的目的之一在于解决上述不足,提供一种在线创建索引的实现方法,以期望解决现有技术中同类数据库在线索引创建方法中的锁表,或者不锁表采用临时表、日志回放、两次读取原表等方式仍然对实时交易产生影响,不利于SQL On HBase数据库在电子商务平台中的使用等技术问题。
[0004]为解决上述的技术问题,本专利技术采用以下技术方案。
[0005]本专利技术所提供的一种在线创建索引的实现方法,方法包括如下步骤。
[0006]步骤A、根据数据库中原表索引的定义,创建与索引相对应的实体索引表。
[0007]步骤B、生成索引表的元数据信息,将索引表的状态设为“维护”,并同步索引表的状态信息到各个服务进程中,且当前状态的索引表只接受插入、删除和更新的SQL感知。
[0008]步骤C、读取扫描原表中的记录数据并同步至索引表中,且在同步过程中,如索引表中没有此前插入原表的数据,则将数据插入索引表中,反之则不做进一步处理;继续读取
扫描原表,直至同步完成。
[0009]步骤D、读取扫描同步后的索引表中的数据,如索引表存在原表中不存在的数据,则作为无效数据删除,反之则继续读取扫描同步后的索引表中的数据,直至无效数据删除完成,索引表创建完成。
[0010]作为优选,进一步的技术方案是:所述步骤E、将索引表的状态更新为“有效”,并同步当前索引表的状态信息到各个服务进程中,此时查询的SQL可使用该索引。
[0011]更进一步的技术方案是:所述B中插入的SQL感知为在原表上插入数据时,同时向索引表中插入同样的数据;删除的SQL感知为在原表上删除数据时,同时删除索引表中的相同数据;如索引表中无对应的数据,则不作处理;更新的SQL感知为在原表上更新数据时,如索引表中具有对应的数据需要同时更新,则先删除索引表中的原数据,然后再插入新的数据;如删除时索引表中无对应的数据,则直接向索引表中插入新的数据。
[0012]更进一步的技术方案是:所述步骤B中插入、删除与更新的数据为实时交易记录数据。
[0013]更进一步的技术方案是:所述步骤B将索引表的状态设为“维护”后,如有正在处理的关联SQL,进行重新编译,重新执行并插入或更新至索引表中;如同步之前已经处理的SQL,则不再插入或更新至索引表中。
[0014]更进一步的技术方案是:所述步骤C中为将原表在一个时刻的历史记录同步至索引表中,且如索引表中没有此前插入原表的数据,则将数据插入索引表中,在插入成功后,继续扫描原表中的记录数据,反之则回滚事务继续判断索引表中是否有此前插入原表的数据。
[0015]更进一步的技术方案是:所述步骤D中如索引表存在原表中不存在的数据,则作为无效数据删除,在删除成功后则继续同步后的索引表中的数据,反之则回滚事务继续判断索引表中是否存在原表中不存在的数据。
[0016]更进一步的技术方案是:所述步骤A中如创建索引表失败,则删除当前索引表,重复步骤A重新创建新索引表。
[0017]更进一步的技术方案是:所述步骤B中如索引表的状态设为“维护”后,同步当前索引表的状态信息到各个服务进程时失败时,或者步骤C中如读取扫描原表中的记录数据并同步至索引表中时失败时,则均首先等待所有SQL事务终止,然后将索引表的状态设为“失效”,最后删除当前索引表,重复步骤A重新创建新索引表。
[0018]与现有技术相比,本专利技术的有益效果之一是:以索引原表为一张单独表为前提,通过增加索引原表的“维护”状态,以分阶段维护索引的方式来实现索引表在线创建而不影响交易,且通过历史数据同步再删除无效数据的方式,确保索引表与原表的数据一致,使得SQL On HBase数据库在线创建索引的过程中无需锁表,且不依赖于临时表或日志,亦不影响数据库交易正常进行,同时本专利技术所提供的一种在线创建索引表的实现方法易于实施,可在各类电商SQL On HBase数据库中进行索引在线创建,应用范围广阔。
附图说明
[0019]图1为用于说明本专利技术一个实施例的方法流程图。
[0020]图2为用于说明本专利技术一个实施例中读取历史数据的逻辑流程图。
[0021]图3为用于说明本专利技术一个实施例中删除无效数据的逻辑流程图。
具体实施方式
[0022]本专利技术所提供的是一种在线创建索引的实现方法,属于SQL On HBase数据库的
SQL On HBase数据库是上层提供传统的关系型数据库SQL引擎,而存储引擎是架构在HBase之上,它可以很好的对ANSI

SQL标准以及事务进行支持,同时又可以很好的利用HBase的分布式架构来提供很方便的扩展性。在SQL On HBase数据库上,索引是作为一张单独的表存在的,通过主键和原表关联。在线创建索引是指在生产环境中,不停服务,创建索引的过程中不会影响交易的进行,即并不影响DML操作。本专利技术的方法基于索引是以一张单独的表的存在方式,通过增加索引的一种“仅可维护”状态,在索引的创建过程中,索引处于“仅可维护”状态的索引只出现在增加、删除和更新的SQL的执行计划中,本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种在线创建索引的实现方法,其特征在于所述的方法包括如下步骤:步骤A、根据数据库中原表索引的定义,创建与索引相对应的实体索引表;步骤B、生成索引表的元数据信息,将索引表的状态设为“维护”,并同步当前索引表的状态信息到各个服务进程中,且当前状态的索引表只接受插入、删除和更新的SQL感知;步骤C、读取扫描原表中的记录数据并同步至索引表中,且在同步过程中,如索引表中没有此前插入原表的数据,则将数据插入索引表中,反之则不做进一步处理;继续读取扫描原表,直至同步完成;步骤D、读取扫描同步后的索引表中的数据,如索引表存在原表中不存在的数据,则作为无效数据删除,反之则继续读取扫描同步后的索引表中的数据,直至无效数据删除完成,索引表创建完成。2.根据权利要求1所述的在线创建索引的实现方法,其特征在于:所述的方法还包括步骤E、将索引表的状态更新为“有效”,并同步当前索引表的状态信息到各个服务进程中,此时查询的SQL可使用该索引。3.根据权利要求1所述的在线创建索引的实现方法,其特征在于:所述步骤B中插入的SQL感知为在原表上插入数据时,同时向索引表中插入同样的数据;删除的SQL感知为在原表上删除数据时,同时删除索引表中的相同数据;如索引表中无对应的数据,则不作处理;更新的SQL感知为在原表上更新数据时,如索引表中具有对应的数据需要同时更新,则先删除索引表中的原数据,然后再插入新的数据;如删除时索引表中无对应的数据,则直接向索引表中插入新的数据。4.根据权利要求1或3所述的在线...

【专利技术属性】
技术研发人员:杨永锋
申请(专利权)人:北京易鲸捷信息技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1