一种更新索引数据的方法和装置制造方法及图纸

技术编号:28419768 阅读:23 留言:0更新日期:2021-05-11 18:26
本发明专利技术公开了一种更新索引数据的方法和装置,涉及计算机技术领域。该方法的一具体实施方式包括:生成待存储数据,将所述待存储数据存储到数据库的一级索引表中;从本地缓存或者所述一级索引表中提取所述待存储数据的主键和索引值,计算所述索引值的哈希值;基于所述索引值的哈希值将所述待存储数据的主键和索引值分发到线程中;将所述待存储数据的主键和索引值存储到所述数据库的二级索引表中。该实施方式能够解决重构索引数据较为耗时,不能实时地构建索引数据,还会加重服务端的负担或者导致索引数据丢失的技术问题。

【技术实现步骤摘要】
一种更新索引数据的方法和装置
本专利技术涉及计算机
,尤其涉及一种更新索引数据的方法和装置。
技术介绍
在大数据流式计算应用场景中,如果需要对持久化数据进行读写,往往会将持久化数据写入数据库,比如HBase(一个分布式的、面向列的开源数据库),HBase的特点是容量巨大,对基于rowkey的查询也非常快。然而单纯的基于rowkey的查询,有时并不能满足业务的需要,如果需要根据某一列的值进行查询,HBase的查询效率就会很低。这种情况下HBase原生提供的方案是创建一个Scan,并通过设置SingleColumnValueFilter(条件查询语句)进行查询,只是这种方法需要对指定rowkey范围内的数据进行遍历,对于那些无法指定rowkey范围的查询,Scan则会进行全表扫描,因此其效率也非常低。为了解决这一问题,特引入HBase二级索引的概念,将一级索引表中某一列的值与其对应的rowkey保存到二级索引表中,二级索引表的rowkey即为该列的值,该二级索引表中保存的索引值为一级索引表中的rowkey。当需要根据列值进行查询时,先在二级索引表中进行get查询,得到对应的索引值(即第一索引表中的rowkey),再根据rowkey在一级索引表中进行get查询,得到真正想要的业务数据。虽然将一步操作变成了两步,但是由于避免了大量无用的数据遍历扫描,其效率要比一般的Scan效率高得多。但是,HBase本身并未直接支持这种“二级索引”,因此需要自行构建这些索引数据。在实现本专利技术过程中,专利技术人发现现有技术中至少存在如下问题:重构索引数据较为耗时,不能实时地构建索引数据,还会加重服务端的负担或者导致索引数据丢失。
技术实现思路
有鉴于此,本专利技术实施例提供一种更新索引数据的方法和装置,以解决现有技术中存在的技术问题。为实现上述目的,根据本专利技术实施例的一个方面,提供了一种更新索引数据的方法,包括:生成待存储数据,将所述待存储数据存储到数据库的一级索引表中;从本地缓存或者所述一级索引表中提取所述待存储数据的主键和索引值,计算所述索引值的哈希值;基于所述索引值的哈希值将所述待存储数据的主键和索引值分发到线程中;将所述待存储数据的主键和索引值存储到所述数据库的二级索引表中。可选地,基于所述索引值的哈希值将所述待存储数据的主键和索引值分发到线程中,包括:将所述索引值的哈希值相同的所述待存储数据的主键和索引值分发到同一个线程。可选地,将所述待存储数据的主键和索引值存储到所述数据库的二级索引表中,包括:按照分发时间戳由小到大的顺序,依次将所述待存储数据的主键和索引值存储到所述数据库的二级索引表中。可选地,在将所述待存储数据的主键和索引值存储到所述数据库的二级索引表中之后,还包括:将所述待存储数据的主键和索引值存储到本地缓存中。可选地,在所述二级索引表中,主键为所述待存储数据的索引值,索引值为所述待存储数据的主键。可选地,将所述待存储数据的主键和索引值存储到所述数据库的二级索引表中,包括:根据所述待存储数据的索引值在所述数据库的二级索引表中查找对应的索引值;将所述待存储数据的主键存储到所述索引值中,更新所述二级索引表。可选地,将所述待存储数据的主键和索引值存储到所述数据库的二级索引表中,包括:根据所述待存储数据的索引值在本地缓存中查找对应的索引值;将所述待存储数据的主键添加到所述索引值中;将添加了主键后的所述索引值更新到所述数据库的二级索引表中;将添加了主键后的所述索引值更新到本地缓存中。另外,根据本专利技术实施例的另一个方面,提供了一种更新索引数据的装置,包括:第一存储模块,用于生成待存储数据,将所述待存储数据存储到数据库的一级索引表中;计算模块,用于从本地缓存或者所述一级索引表中提取所述待存储数据的主键和索引值,计算所述索引值的哈希值;分发模块,用于基于所述索引值的哈希值将所述待存储数据的主键和索引值分发到线程中;第二存储模块,用于将所述待存储数据的主键和索引值存储到所述数据库的二级索引表中。可选地,所述分发模块还用于:将所述索引值的哈希值相同的所述待存储数据的主键和索引值分发到同一个线程。可选地,所述第二存储模块还用于:按照分发时间戳由小到大的顺序,依次将所述待存储数据的主键和索引值存储到所述数据库的二级索引表中。可选地,所述第二存储模块还用于:在将所述待存储数据的主键和索引值存储到所述数据库的二级索引表中之后,将所述待存储数据的主键和索引值存储到本地缓存中。可选地,在所述二级索引表中,主键为所述待存储数据的索引值,索引值为所述待存储数据的主键。可选地,所述第二存储模块还用于:根据所述待存储数据的索引值在所述数据库的二级索引表中查找对应的索引值;将所述待存储数据的主键存储到所述索引值中,更新所述二级索引表。可选地,所述第二存储模块还用于:根据所述待存储数据的索引值在本地缓存中查找对应的索引值;将所述待存储数据的主键添加到所述索引值中;将添加了主键后的所述索引值更新到所述数据库的二级索引表中;将添加了主键后的所述索引值更新到本地缓存中。根据本专利技术实施例的另一个方面,还提供了一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述任一实施例所述的方法。根据本专利技术实施例的另一个方面,还提供了一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现上述任一实施例所述的方法。上述专利技术中的一个实施例具有如下优点或有益效果:因为采用基于索引值的哈希值将待存储数据的主键和索引值分发到线程中,将待存储数据的主键和索引值存储到数据库的二级索引表中的技术手段,所以克服了现有技术中重构索引数据较为耗时,不能实时地构建索引数据,还会加重服务端的负担或者导致索引数据丢失的技术问题。本专利技术实施例基于索引值的哈希值将待存储数据的主键和索引值分发到线程中,使得这些索引数据在同一个线程中串行执行,这样既可以保证顺序地对相同索引值的索引数据进行更新,从而防止索引数据丢失,又能让索引数据尽可能地平均分散到不同的线程里进行处理,避免数据倾斜,因此在确保数据准确的基础上,最大化地提高了数据处理效率。上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。附图说明附图用于更好地理解本专利技术,不构成对本专利技术的不当限定。其中:图1为现有技术中保存数据和索引的主要流程示意图;图2为现有技术中同时保存两条数据的主要流程示意图;图3是根据本专利技术实施例的更新索引数据的方法的主要流程的示意图;图4是根据本专利技术一个可参考实施例的更新索引数据的方法本文档来自技高网
...

【技术保护点】
1.一种更新索引数据的方法,其特征在于,包括:/n生成待存储数据,将所述待存储数据存储到数据库的一级索引表中;/n从本地缓存或者所述一级索引表中提取所述待存储数据的主键和索引值,计算所述索引值的哈希值;/n基于所述索引值的哈希值将所述待存储数据的主键和索引值分发到线程中;/n将所述待存储数据的主键和索引值存储到所述数据库的二级索引表中。/n

【技术特征摘要】
1.一种更新索引数据的方法,其特征在于,包括:
生成待存储数据,将所述待存储数据存储到数据库的一级索引表中;
从本地缓存或者所述一级索引表中提取所述待存储数据的主键和索引值,计算所述索引值的哈希值;
基于所述索引值的哈希值将所述待存储数据的主键和索引值分发到线程中;
将所述待存储数据的主键和索引值存储到所述数据库的二级索引表中。


2.根据权利要求1所述的方法,其特征在于,基于所述索引值的哈希值将所述待存储数据的主键和索引值分发到线程中,包括:
将所述索引值的哈希值相同的所述待存储数据的主键和索引值分发到同一个线程。


3.根据权利要求1所述的方法,其特征在于,将所述待存储数据的主键和索引值存储到所述数据库的二级索引表中,包括:
按照分发时间戳由小到大的顺序,依次将所述待存储数据的主键和索引值存储到所述数据库的二级索引表中。


4.根据权利要求1所述的方法,其特征在于,在将所述待存储数据的主键和索引值存储到所述数据库的二级索引表中之后,还包括:
将所述待存储数据的主键和索引值存储到本地缓存中。


5.根据权利要求1所述的方法,其特征在于,在所述二级索引表中,主键为所述待存储数据的索引值,索引值为所述待存储数据的主键。


6.根据权利要求5所述的方法,其特征在于,将所述待存储数据的主键和索引值存储到所述数据库的二级索引表中,包括:
根据所述待存储数据的...

【专利技术属性】
技术研发人员:张志刚
申请(专利权)人:北京沃东天骏信息技术有限公司
类型:发明
国别省市:北京;11

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

1