全文摘要
本发明公开了一种分布式数据库的数据处理方法、装置和存储介质,其中方法包括:基于与业务字段相对应的业务字段值生成业务特征比特序列,根据当前时间生成与待处理数据相对应的标识特征比特序列,将业务特征比特序列与标识特征比特序列进行拼接,生成待处理数据的行键Rowkey。本发明的方法、装置和存储介质,融合业务与兼顾查询性能为一体,可以实现Rowkey的快速生成,可以使用Rowkey进行查询,避免全表扫描,加快查询速度;使用自定义64进制掩码生成的Rowkey,可以保证Rowkey的生成的二进制顺序是由小到大的,符合HBase插入顺序的排序规则,可以快速的确定Rowkey的生成范围。
主设计要求
1.一种分布式数据库的数据处理方法,其特征在于,包括:获得待处理数据的至少一个业务字段;基于与所述业务字段相对应的业务字段值生成业务特征比特序列;根据当前时间生成与所述待处理数据相对应的标识特征比特序列;其中,所述标识特征比特序列在数据库中具有唯一性;将所述业务特征比特序列与所述标识特征比特序列进行拼接,生成所述待处理数据的行键Rowkey,用以基于所述Rowkey对所述待处理数据进行相应地处理。
设计方案
1.一种分布式数据库的数据处理方法,其特征在于,包括:
获得待处理数据的至少一个业务字段;
基于与所述业务字段相对应的业务字段值生成业务特征比特序列;
根据当前时间生成与所述待处理数据相对应的标识特征比特序列;其中,所述标识特征比特序列在数据库中具有唯一性;
将所述业务特征比特序列与所述标识特征比特序列进行拼接,生成所述待处理数据的行键Rowkey,用以基于所述Rowkey对所述待处理数据进行相应地处理。
2.如权利要求1所述的方法,其特征在于,所述基于与所述业务字段相对应的业务字段值生成业务特征比特序列包括:
使用预设的哈希函数对所述业务字段值进行哈希处理,通过所述哈希函数将所述业务字段值映射成一个整数;
基于预设的掩码表对所述整数进行转换,获得所述业务特征比特序列。
3.如权利要求2所述的方法,其特征在于,还包括:
设置64进制掩码表;其中,所述掩码表中的数字和字符为ACSII码对照表中的数字和字符,所述掩码表中的数字和字符与ACSII码对照表中的排序保持一致:
通过所述哈希函数将所述业务字段值映射成一个32位的int型整数,作为业务哈希值;其中,如果此业务哈希值为负数,则对所述业务哈希值加上一个int型整数的最大正值,进行转换;所述业务哈希值为Long类型的整数型值;
获得所述业务哈希值在所述掩码表中对应的数字或字符,基于此数字或字符生成一个64进制数值;
对所述64进制数值进行反转处理,获得反转处理后的所述64进制数值的六个字节比特,作为所述业务特征比特序列;其中,如果所述64进制数值的长度小于六个字节,则在高位补0,达到六个字节。
4.如权利要求1所述的方法,其特征在于,所述根据当前时间生成与所述待处理数据相对应的标识特征比特序列包括:
使用int型的最大整数值减去系统当前时间戳对应的int整数值,获得32位的第一特征值;
获得序列器当前的序列值,根据所述序列值生成四个字节的第二特征值;其中,所述序列器采用单调递增序列;
获得机器码,基于机器码生成一个字节的第三特征值;
将所述第一特征值、所述第二特征值和所述第三特征值进行合并,生成八个字节的所述标识特征比特序列。
5.如权利要求4所述的方法,其特征在于,还包括:
将所述第二特征值向左移动八位后与所述第三特征值进行或运算,生成四个字节的合并整数;
将所述第一特征值与所述合并整数进行合并,获得所述标识特征比特序列。
6.如权利要求5所述的方法,其特征在于,还包括:
获得待处理数据的两个业务字段;
基于与所述两个业务字段相对应的业务字段值生成两个六字节的业务特征比特序列,并生成与所述待处理数据相对应的一个八字节的标识特征比特序列;
将两个业务特征比特序列和所述标识特征比特序列进行拼接,生成所述待处理数据的行键Rowkey。
7.如权利要求6所述的方法,其特征在于,还包括:
获得所述Rowkey的前六个字节所对应的最大值,将所述Rowkey的取值范围设置为0与所述最大值之间的取值区间;
设置多个分区,将所述取值范围均分为与所述多个分区相对应的多个子取值范围;
确定每个分区对应的子取值范围,基于子取值范围设置与此子取值范围对应的分区的StartKey与EndKey;
其中,所述分布式数据库包括:HBase;对所述待处理数据进行的处理包括:插入、查询。
8.一种分布式数据库的数据处理装置,其特征在于,包括:
业务特征生成模块,用于获得待处理数据的至少一个业务字段;基于与所述业务字段相对应的业务字段值生成业务特征比特序列;
标识特征生成模块,用于根据当前时间生成与所述待处理数据相对应的标识特征比特序列;其中,所述标识特征比特序列在数据库中具有唯一性;
主键生成模块,用于将所述业务特征比特序列与所述标识特征比特序列进行拼接,生成所述待处理数据的行键Rowkey,用以基于所述Rowkey对所述待处理数据进行相应地处理。
9.一种分布式数据库的数据处理装置,其特征在于,包括:
存储器;以及耦接至所述存储器的处理器,所述处理器被配置为基于存储在所述存储器中的指令,执行如权利要求1至7中任一项所述的方法。
10.一种计算机可读存储介质,其上存储有计算机程序指令,该指令被一个或多个处理器执行时实现权利要求1至7任意一项所述的方法的步骤。
设计说明书
技术领域
本发明涉及数据库技术领域,尤其涉及一种分布式数据库的数据处理方法、装置和存储介质。
背景技术
分布式数据库在逻辑上是一个统一的整体,在物理上则是分别存储在不同的物理节点上。分布式数据库可以有多种,例如为HBase等。HBase是建立在Hadoop文件系统之上的分布式面向列的数据库,HBase是为了企业中的大表,上百亿条记录而设计的数据库,具有容错能力强、数据高可靠、高性能的特点。对于列式数据库,存储数据是按照列进行数据存储,一般都有行主健Rowkey的概念,行主健可以在列式数据库中唯一标识一条数据,通过搜索行健可以快速的定位到一条数据。由于HBase写数据是按照Rowkey升序进行数据写入,因此如果不对HBase的Rowkey进行设计,在写入数据时,会发生写热点的问题,同理读取数据时,也会出现读热点问题。查询一般都是带有条件的检索,而通过HBase自身提供的API进行检索时,如果不能设置Rowkey的相关范围或者直接指定Rowkey,那么HBase就会进行全表扫描,而HBase是为了大数据量而生,一张表中的数据总量能达到几十亿甚至上百亿条数据,全表扫描的性能很低下。
发明内容
有鉴于此,本发明要解决的一个技术问题是提供一种分布式数据库的数据处理方法、装置和存储介质。
根据本发明的一个方面,提供一种分布式数据库的数据处理方法,包括:获得待处理数据的至少一个业务字段;基于与所述业务字段相对应的业务字段值生成业务特征比特序列;根据当前时间生成与所述待处理数据相对应的标识特征比特序列;其中,所述标识特征比特序列在数据库中具有唯一性;将所述业务特征比特序列与所述标识特征比特序列进行拼接,生成所述待处理数据的行键Rowkey,用以基于所述Rowkey对所述待处理数据进行相应地处理。
可选地,所述基于与所述业务字段相对应的业务字段值生成业务特征比特序列包括:使用预设的哈希函数对所述业务字段值进行哈希处理,通过所述哈希函数将所述业务字段值映射成一个整数;基于预设的掩码表对所述整数进行转换,获得所述业务特征比特序列。
可选地,设置64进制掩码表;其中,所述掩码表中的数字和字符为ACSII码对照表中的数字和字符,所述掩码表中的数字和字符与ACSII码对照表中的排序保持一致:通过所述哈希函数将所述业务字段值映射成一个32位的int型整数,作为业务哈希值;其中,如果此业务哈希值为负数,则对所述业务哈希值加上一个int型整数的最大正值,进行转换;所述业务哈希值为Long类型的整数型值;获得所述业务哈希值在所述掩码表中对应的数字或字符,基于此数字或字符生成一个64进制数值;对所述64进制数值进行反转处理,获得反转处理后的所述64进制数值的六个字节比特,作为所述业务特征比特序列;其中,如果所述64进制数值的长度小于六个字节,则在高位补0,达到六个字节。
可选地,所述根据当前时间生成与所述待处理数据相对应的标识特征比特序列包括:使用int型的最大整数值减去系统当前时间戳对应的int整数值,获得32位的第一特征值;获得序列器当前的序列值,根据所述序列值生成四个字节的第二特征值;其中,所述序列器采用单调递增序列;获得机器码,基于机器码生成一个字节的第三特征值;将所述第一特征值、所述第二特征值和所述第三特征值进行合并,生成八个字节的所述标识特征比特序列。
可选地,将所述第二特征值向左移动八位后与所述第三特征值进行或运算,生成四个字节的合并整数;将所述第一特征值与所述合并整数进行合并,获得所述标识特征比特序列。
可选地,获得待处理数据的两个业务字段;基于与所述两个业务字段相对应的业务字段值生成两个六字节的业务特征比特序列,并生成与所述待处理数据相对应的一个八字节的标识特征比特序列;将两个业务特征比特序列和所述标识特征比特序列进行拼接,生成所述待处理数据的行键Rowkey。
可选地,获得所述Rowkey的前六个字节所对应的最大值,将所述Rowkey的取值范围设置为0与所述最大值之间的取值区间;设置多个分区,将所述取值范围均分为与所述多个分区相对应的多个子取值范围;确定每个分区对应的子取值范围,基于子取值范围设置与此子取值范围对应的分区的StartKey与EndKey;其中,所述分布式数据库包括:HBase;对所述待处理数据进行的处理包括:插入、查询。
根据本发明的另一个方面,提供一种分布式数据库的数据处理装置,包括:业务特征生成模块,用于获得待处理数据的至少一个业务字段;基于与所述业务字段相对应的业务字段值生成业务特征比特序列;标识特征生成模块,用于根据当前时间生成与所述待处理数据相对应的标识特征比特序列;其中,所述标识特征比特序列在数据库中具有唯一性;主键生成模块,用于将所述业务特征比特序列与所述标识特征比特序列进行拼接,生成所述待处理数据的行键Rowkey,用以基于所述Rowkey对所述待处理数据进行相应地处理。
可选地,所述业务特征生成模块,用于使用预设的哈希函数对所述业务字段值进行哈希处理,通过所述哈希函数将所述业务字段值映射成一个整数;基于预设的掩码表对所述整数进行转换,获得所述业务特征比特序列。
可选地,所述业务特征生成模块,用于设置64进制掩码表;其中,所述掩码表中的数字和字符为ACSII码对照表中的数字和字符,所述掩码表中的数字和字符与ACSII码对照表中的排序保持一致:通过所述哈希函数将所述业务字段值映射成一个32位的int型整数,作为业务哈希值;其中,如果此业务哈希值为负数,则对所述业务哈希值加上一个int型整数的最大正值,进行转换;所述业务哈希值为Long类型的整数型值;获得所述业务哈希值在所述掩码表中对应的数字或字符,基于此数字或字符生成一个64进制数值;对所述64进制数值进行反转处理,获得反转处理后的所述64进制数值的六个字节比特,作为所述业务特征比特序列;其中,如果所述64进制数值的长度小于六个字节,则在高位补0,达到六个字节。
可选地,所述标识特征生成模块,用于使用int型的最大整数值减去系统当前时间戳对应的int整数值,获得32位的第一特征值;获得序列器当前的序列值,根据所述序列值生成四个字节的第二特征值;其中,所述序列器采用单调递增序列;获得机器码,基于机器码生成一个字节的第三特征值;将所述第一特征值、所述第二特征值和所述第三特征值进行合并,生成八个字节的所述标识特征比特序列。
可选地,所述标识特征生成模块,用于将所述第二特征值向左移动八位后与所述第三特征值进行或运算,生成四个字节的合并整数;将所述第一特征值与所述合并整数进行合并,获得所述标识特征比特序列。
可选地,业务特征生成模块,用于获得待处理数据的两个业务字段;基于与所述两个业务字段相对应的业务字段值生成两个六字节的业务特征比特序列;所述标识特征生成模块,用于生成与所述待处理数据相对应的一个八字节的标识特征比特序列;主键生成模块,用于将两个业务特征比特序列和所述标识特征比特序列进行拼接,生成所述待处理数据的行键Rowkey。
可选地,分区设置模块,用于获得所述Rowkey的前六个字节所对应的最大值,将所述Rowkey的取值范围设置为0与所述最大值之间的取值区间;设置多个分区,将所述取值范围均分为与所述多个分区相对应的多个子取值范围;确定每个分区对应的子取值范围,基于子取值范围设置与此子取值范围对应的分区的StartKey与EndKey;其中,所述分布式数据库包括:HBase;对所述待处理数据进行的处理包括:插入、查询。
根据本发明的又一方面,提供一种分布式数据库的数据处理装置,包括:存储器;以及耦接至所述存储器的处理器,所述处理器被配置为基于存储在所述存储器中的指令,执行如上所述的方法。
根据本发明的再一方面,提供一种计算机可读存储介质,其上存储有计算机程序指令,该指令被一个或多个处理器执行时实现如上所述的方法的步骤。
本发明的分布式数据库的数据处理方法、装置和存储介质,基于与业务字段相对应的业务字段值生成业务特征比特序列,根据当前时间生成与待处理数据相对应的标识特征比特序列,将业务特征比特序列与标识特征比特序列进行拼接,生成待处理数据的行键Rowkey;通过Rowkey的生成规则与业务字段相结合,融合业务与兼顾查询性能为一体,可以实现Rowkey的快速生成,可以使用Rowkey进行查询,避免全表扫描,加快查询速度;使用自定义64进制掩码生成的Rowkey,可以保证Rowkey的生成的二进制顺序是由小到大的,符合HBase插入顺序的排序规则,进一步减少HBase服务端在对数据进行排序时的操作时间;可以快速的确定Rowkey的生成范围,通过计算可以快速的获取预分区所需的Rowkey。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明的分布式数据库的数据处理方法的一个实施例的流程示意图;
图2为本发明的分布式数据库的数据处理方法的一个实施例的生成业务特征比特序列的示意图;
图3为本发明的分布式数据库的数据处理方法的一个实施例的生成标识特征比特序列的流程示意图;
图4为本发明的分布式数据库的数据处理装置的一个实施例的组成示意图;
图5为本发明的分布式数据库的数据处理装置的另一个实施例的组成示意图。
具体实施方式
现在将参照附图来详细描述本发明的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。
同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。
以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。
对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,技术、方法和设备应当被视为说明书的一部分。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
下文中的“第一”、“第二”等仅用于描述上相区别,并没有其他特殊的含义。
HBase采用Key-Value的列模式存储数据,Rowkey是列式数据库中行健(或称为行主键)。在HBase中,Rowkey是一段可以有用户自定义的二进制码流,最大长度为64KB。HBase在写入数据时,是按照Rowkey的升序方式排序的,在HBase写数据时,总是向没有上界的region中写入数据,会出现写热点的问题。
如果向HBase中写入大量的数据,那么HBase表中的数据量会越来越大,当数据量达到阈值时,HBase就会找到一个MidKey把这个表的Region一分为二,此过程称为分裂。此时MidKey就成为了这两个Region的临界,左为N无下界,右为M无上界,Rowkey大于MidKey的数据会被塞到M区,Rowkey小于Midkey的数据会被塞到N区。
数据库存储数据的性能很重要,但是读取数据库中的数据的性能更重要。HBase是根据Rowkey来进行检索,通过Rowkey的检索效率最高,但是非Rowkey的查询速度很慢(如:全表扫描),因此不同的Rowkey的设计对从HBase中获取数据的影响是非常大的。由于HBase写数据是按照Rowkey升序进行数据写入,在写入数据时,会发生写热点的问题,同理读取数据时,也会出现读热点问题。
查询一般都是带有条件的检索,而通过HBase自身提供的API进行检索时,进行全表扫描,性能低下。HBase为了防止表数据量过大,当表中的数据量达到一定的阈值时,会进行Region拆分操作,而由于写热点问题,HBase频繁的向M区写入数据,这样就导致M区的数据量很容易达到阈值,然后拆分,而拆分是比较耗费资源的,因此会引起一系列的程序问题,而对于N区来说,HBase是不会写数据的,因此又浪费了N区的资源。
图1为本发明的分布式数据库的数据处理方法的一个实施例的流程示意图,如图1所示:
步骤101,获得待处理数据的至少一个业务字段。
分布式数据库可以为HBase等。待处理数据的业务字段可以有多个,例如,待处理数据为商品订单数据,业务字段可以包括:商品名称、生产商、商品种类、价格等。
步骤102,基于与业务字段相对应的业务字段值生成业务特征比特序列。
例如,选取的业务字段为商品名称、生产商、商品种类,根据商品名称、生产商、商品种类的值“钢材”、“某钢铁公司”、“建材”生成业务特征比特序列,业务特征比特序列可以为六字节、八字节等长度的比特序列。
步骤103,根据当前时间生成与待处理数据相对应的标识特征比特序列,标识特征比特序列在数据库中具有唯一性。生成的标识特征比特序列可以为八字节、十一字节等长度的比特序列。
步骤104,将业务特征比特序列与标识特征比特序列进行拼接,生成待处理数据的行键Rowkey,用以基于Rowkey对待处理数据进行相应地处理,进行的处理包括插入数据、查询数据等。
上述实施例中的分布式数据库的数据处理方法,提供Rowkey的分布式算法,融合业务与兼顾查询性能为一体,可以实现Rowkey的快速生成,通过相关的业务字段快速的检索出Rowkey的所在范围,进而可以通过Rowkey去查询数据,而不需要进行全表扫描,加快了数据的获取速度。
在一个实施例中,基于与业务字段相对应的业务字段值生成业务特征比特序列可以有多种方法。例如,使用预设的哈希函数对业务字段值进行哈希处理,通过哈希函数将业务字段值映射成一个整数,基于预设的掩码表对整数进行转换,获得业务特征比特序列。
图2为本发明的分布式数据库的数据处理方法的一个实施例的生成业务特征比特序列的示意图,如图2所示:
步骤201,设置64进制掩码表,掩码表中的数字和字符为ACSII码对照表中的数字和字符,掩码表中的数字和字符与ACSII码对照表中的排序保持一致。
例如,自定义的64进制掩码表如下所示:
64进制掩码表符合ACSII码的顺序。
步骤202,通过哈希函数将业务字段值映射成一个32位的int型整数,作为业务哈希值。如果此业务哈希值为负数,则对业务哈希值加上一个int型整数的最大正值,进行转换,业务哈希值为Long类型的整数型值。
步骤203,获得业务哈希值在掩码表中对应的数字或字符,基于此数字或字符生成一个64进制数值。
步骤204,对64进制数值进行反转处理,获得反转处理后的64进制数值的六个字节比特,作为业务特征比特序列。如果64进制数值的长度小于六个字节,则在高位补0,达到六个字节。
图3为本发明的分布式数据库的数据处理方法的一个实施例的生成标识特征比特序列的流程示意图,如图3所示:
步骤301,使用int型的最大整数值减去系统当前时间戳对应的int整数值,获得32位的第一特征值。
步骤302,获得序列器当前的序列值,根据序列值生成四个字节的第二特征值;其中,序列器采用单调递增序列。
步骤303,获得机器码,基于机器码生成一个字节的第三特征值。
步骤304,将第一特征值、第二特征值和第三特征值进行合并,生成八个字节的标识特征比特序列。
可以将第二特征值向左移动八位后与第三特征值进行或运算,生成四个字节的合并整数,将第一特征值与合并整数进行合并,获得标识特征比特序列。
在一个实施例中,获得待处理数据的两个业务字段,基于与两个业务字段相对应的业务字段值生成两个六字节的业务特征比特序列,并生成与待处理数据相对应的一个八字节的标识特征比特序列。将两个业务特征比特序列和标识特征比特序列进行拼接,生成待处理数据的行键Rowkey。
通过两个业务字段即可过滤大部分数据,再利用时间字段,几乎可以定位到数据,因此本发明中使用两个业务字段来生成到Rowkey中,业务字段也可以选三、四个等。获得行键Rowkey的格式和生成的具体方式如下表所示:。
表1-行键Rowkey的格式和生成的具体方式表
对业务字段1做哈希,可以获得一个32位的int整数型值,其范围在-2147483648与2147483647之间。如果哈希值为负,则负数取绝对值然后加上int的最大值2147483647,处理成正值,处理后的哈希值的范围是0到233<\/sup>之间的一个数。需要把得到的哈希值转为64进制,而一个字节(Byte)在64进制中只能标识64(26<\/sup>)个数,因此大致需要6个字节才能表示完处理过后的哈希值,所以取6个字节。
对业务字段1哈希处理并把负的哈希值转成0至233<\/sup>之间的一个数,此数是一个Long类型的整数型值,对这个数使用自定义的64进制的掩码进行转换,为了确保生成的Rowkey散列随机性,需要对生成后的64进制数值反转,这样低位变换比较快的转移到高位,更能保证散列。转换后会有部分数可能不到6个字节,但是为了保证Rowkey长度的一致性,对其进行补0操作,让其达到6个字节。
ASCII码使用指定的7位或8位二进制数组合来表示128种或256种可能的字符。当用64进制编码时,将二进制字符串以6位划分,例如,对于字符串“111111\/111111”,“111111”表示数字64,从64进制掩码表中选择代表数字64的字符’}’作为转换后的字符,则字符串“111111\/111111”转换后为’}}’,以64进制数据存储只需要两个字节,从而能够缩短字符串的长度,节约字符型数字的存储空间。
例如,通过哈希函数将业务字段“商品名称”的值“汽车”映射成一个32位的int型整数,作为业务哈希值。如果此业务哈希值为负数,则对业务哈希值加上一个int型整数的最大正值,进行转换,业务哈希值为Long类型的整数型值。获得业务哈希值在掩码表中对应的数字或字符,基于此数字或字符生成一个64进制数值135glh。对64进制数值进行反转处理,获得hlg531,获得hlg531的六个字节比特,作为业务特征比特序列。如果64进制数值的长度小于六个字节,则在高位补0,达到六个字节。对于业务字段2通过相同的方法获得业务特征比特序列。
后8字节是时间加上自增数(序列值)加上机器码拼接出来的一个64位的Long的整数型值。时间数(后8字节的前4个字节):用int的最大值减去当前时间(精确到秒)所得到的值,其值是一个32位的int整数型值,含有4个字节;记录当前时间点的秒级时间戳,生成Rowkey时,比较当前的时间是否在记录的时间点内,如果在,则自增数进行自增并返回自增数,如果不在记录时间点的秒级时间戳内,则更新记录的秒级时间戳为当前时间戳,并设置自增数为自增的开始值,并返回自增数。这个自增数是一个32位的int整数型值,含有4个字节。
为了防止在不同机器上同一时间点生成的Rowkey相同,使用机器码来标识不同的机器,使用一个字节来标识机器码,因此需要对机器码的取值范围做下限定,取值范围-128至127,能保证拼接上的机器码有意义,否则可能会出现在不同的机器上会有相同Rowkey的生成。
合并后4字节的操作,自增数(序列值)含有4个字节,机器码是一个字节,为了合并成4个字节,需要进行位运算。机器码因取值范围限定,因此其只有最后一个字节(低8位)是系统需要的。自增数可以向左移动8位,然后与机器码进行或运算,这样就可以得到一个新的含有4个字节的整数,1秒内大致可以生成224<\/sup>个不会重复自增数,对于系统来说,这个数量级已经够使用了。得到时间数的4个字节和合并自增数与机器码的4个字节,进行合并,共有8个字节。
使查询出的数据倒序排列,这样可以快速获取最新的数据。然后再在时间的基础上做每秒的一个自增数变化,可以使在同一台服务器上同一秒内生成的数据是不一样的,不同秒则重新开始自增。然后再取一个字节的值当成机器码,这样就保证了在不同机器上、同一个时间点自增数(序列值)开始自增能保证最后生成的Rowkey的不一致。
在一个实施例中,获得标识特征比特序列在64机制掩码表中对应的数字或字符,基于此数字或字符生成一个64进制数值。例如,可以合并(通过位运算)这8个字节为一个Long类型的整数型值,然后再通过自定义的64进制加掩转换。因为后八字节是通过位运算获得,因此这八个字节64位,每一位都有可能是1或者0,因此64位大致能表示265<\/sup>个数。如果要用64进制的数据表示265<\/sup>个数,因为每6位对应一个64进制的数字或字符,则需要11个64进制的字节,即需要11个字节,转换过程中也可能有不够11个字节长度的值,因此也需要对其进行补0操作,以保证生成的长度一致,则得出Rowkey的长度大致是6+6+11=23字节。由于自定义64进制掩码符合ASCII码的顺序,因此生成的HBase的二进制码流也会是从小到大生成,符合HBase的Rowkey的插入数据规则。
在一个实施例中,获得Rowkey的前六个字节所对应的最大值,将Rowkey的取值范围设置为0与最大值之间的取值区间。设置多个分区,将取值范围均分为与多个分区相对应的多个子取值范围;确定每个分区对应的子取值范围,基于子取值范围设置与此子取值范围对应的分区的StartKey与EndKey。
在HBase中,表会被划分为1...n个Region,托管于RegionServer中,Region中有两个重要的属性:StartKey与EndKey,这两属性表示这个Region维护的Rowkey的范围,读\/写数据时,如果Rowkey落在某个start-end key范围内,那么就会定位到Region并且读\/写相关的数据。
如果不指定预分区,默认一个表只有一个分区,那么当数据量达到一定的阈值时,HBase就会Split操作,而Split操作又是比较耗费系统资源的,可能会导致一系列的问题发生,因此为了防止问题发生,一般在使用HBase时都会进行预分区。而预分区需要设置start-end key,为了确定start-end key一般都会通过大量数据的取样操作进行预分区。
获取到Rowkey的前6个字节的64进制的最大值,然后转换成10进制值数x,然后按用分区数平分x,获取到每一个边界值的10进制数,然后转换成64进制数即可。通过Rowkey的生成规则,可以确定前6个字节最大值,其值就是6个自定义64进制值的最后一位的值,最大值是:}}}}}},然后通过转换成10进制数,可以得到一个值,Rowkey的生成是从0(哈希值处理成正数了)开始的,因此可以获取到生成的Rowkey的前6个字节的范围应该是0至}}}}}}转10进制后的值范围,然后通过设置生成m个分区,这样就可以把0至}}}}}}转10进制后的值分为m份,然后找到这m份值所对应的10进制的值,之后在转换成64进制数,即为HBase的分区的边界值,然后在创建表时就可以使用预分区。
上述实施例中的分布式数据库的数据处理方法,使用自定义的64进制掩码表,在既不打破原有数据大小顺序的情况下,又可以把业务字段和Rowkey的生成规则结合起来,因此在使用此业务字段进行查询时,可以调用Rowkey以加快查询。由于是64进制,可以用更少的字节表示更多的数,因此使用相同的字节数可以生成更多的Rowkey,也可以存储更多的数据;能够解决热点问题,散列业务字段,以解决热点问题,以此做查询使用,通过Rowkey过滤很多数据,减少查询时全表扫描发生的概率,加快查询速度;基于64进制掩码生成的Rowkey,可以准确的获取生成Rowkey的范围,从而通过计算可以获取预分区所需的Rowkey;可以增加Rowkey的可阅读性与可维护性,通过使用自定义的64进制掩码,可以人为决定其生成Rowkey是二进制码的大小,因此在进行HBase数据插入时,可以更快的找到数据所在的位置。
在一个实施例中,如图4所示,本发明提供一种分布式数据库的数据处理装置40,包括:业务特征生成模块41、标识特征生成模块42、主键生成模块43和分区设置模块44。业务特征生成模块41获得待处理数据的至少一个业务字段,基于与业务字段相对应的业务字段值生成业务特征比特序列。标识特征生成模块42根据当前时间生成与待处理数据相对应的标识特征比特序列;其中,标识特征比特序列在数据库中具有唯一性。主键生成模块43将业务特征比特序列与标识特征比特序列进行拼接,生成待处理数据的行键Rowkey,用以基于Rowkey对待处理数据进行相应地处理。
在一个实施例中,业务特征生成模块41使用预设的哈希函数对业务字段值进行哈希处理,通过哈希函数将业务字段值映射成一个整数,基于预设的掩码表对整数进行转换,获得业务特征比特序列。业务特征生成模块41设置64进制掩码表,掩码表中的数字和字符为ACSII码对照表中的数字和字符,掩码表中的数字和字符与ACSII码对照表中的排序保持一致。
业务特征生成模块41通过哈希函数将业务字段值映射成一个32位的int型整数,作为业务哈希值;其中,如果此业务哈希值为负数,则对业务哈希值加上一个int型整数的最大正值,进行转换,业务哈希值为Long类型的整数型值。业务特征生成模块41获得业务哈希值在掩码表中对应的数字或字符,基于此数字或字符生成一个64进制数值。业务特征生成模块41对64进制数值进行反转处理,获得反转处理后的64进制数值的六个字节比特,作为业务特征比特序列;其中,如果64进制数值的长度小于六个字节,则在高位补0,达到六个字节。
标识特征生成模块42使用int型的最大整数值减去系统当前时间戳对应的int整数值,获得32位的第一特征值。标识特征生成模块42获得序列器当前的序列值,根据序列值生成四个字节的第二特征值;其中,序列器采用单调递增序列。标识特征生成模块42获得机器码,基于机器码生成一个字节的第三特征值。标识特征生成模块42将第一特征值、第二特征值和第三特征值进行合并,生成八个字节的标识特征比特序列。标识特征生成模块42将第二特征值向左移动八位后与第三特征值进行或运算,生成四个字节的合并整数。标识特征生成模块42将第一特征值与合并整数进行合并,获得标识特征比特序列。
业务特征生成模块44获得待处理数据的两个业务字段,业务特征生成模块41基于与两个业务字段相对应的业务字段值生成两个六字节的业务特征比特序列。标识特征生成模块42生成与待处理数据相对应的一个八字节的标识特征比特序列。主键生成模块43将两个业务特征比特序列和标识特征比特序列进行拼接,生成待处理数据的行键Rowkey。
分区设置模块44获得Rowkey的前六个字节所对应的最大值,将Rowkey的取值范围设置为0与最大值之间的取值区间。分区设置模块44设置多个分区,将取值范围均分为与多个分区相对应的多个子取值范围,确定每个分区对应的子取值范围,基于子取值范围设置与此子取值范围对应的分区的StartKey与EndKey;其中,分布式数据库包括:HBase等;对待处理数据进行的处理包括:插入、查询等。
图5为根据本发明公开的分布式数据库的数据处理装置的另一个实施例的模块示意图。如图5所示,该装置可包括存储器51、处理器52、通信接口53以及总线54。存储器51用于存储指令,处理器52耦合到存储器51,处理器52被配置为基于存储器51存储的指令执行实现上述的分布式数据库的数据处理方法。
存储器51可以为高速RAM存储器、非易失性存储器(NoN-volatile memory)等,存储器51也可以是存储器阵列。存储器51还可能被分块,并且块可按一定的规则组合成虚拟卷。处理器52可以为中央处理器CPU,或专用集成电路ASIC(Application SpecificIntegrated Circuit),或者是被配置成实施本发明公开的分布式数据库的数据处理方法的一个或多个集成电路。
在一个实施例中,本发明提供一种计算机可读存储介质,计算机可读存储介质存储有计算机指令,指令被处理器执行时实现如上任一个实施例中的分布式数据库的数据处理方法。
上述实施例提供的分布式数据库的数据处理方法、装置和存储介质,基于与业务字段相对应的业务字段值生成业务特征比特序列,根据当前时间生成与待处理数据相对应的标识特征比特序列,将业务特征比特序列与标识特征比特序列进行拼接,生成待处理数据的行键Rowkey;通过Rowkey的生成规则与业务字段相结合,可以使用Rowkey进行查询,避免全表扫描,加快查询速度;使用自定义64进制掩码生成的Rowkey,可以保证Rowkey的生成的二进制顺序是由小到大的,符合HBase插入顺序的排序规则,进一步减少HBase服务端在对数据进行排序时的操作时间;可以快速的确定Rowkey的生成范围,通过计算可以快速的获取预分区所需的Rowkey,减少数据取样,而且通过转成64进制掩码,可以获取全部的Rowkey的范围,取样具有一定的概率性。
可能以许多方式来实现本发明的方法和系统。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本发明的方法和系统。用于方法的步骤的上述顺序仅是为了进行说明,本发明的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本发明实施为记录在记录介质中的程序,这些程序包括用于实现根据本发明的方法的机器可读指令。因而,本发明还覆盖存储用于执行根据本发明的方法的程序的记录介质。
本发明的描述是为了示例和描述起见而给出的,而并不是无遗漏的或者将本发明限于所公开的形式。很多修改和变化对于本领域的普通技术人员而言是显然的。选择和描述实施例是为了更好说明本发明的原理和实际应用,并且使本领域的普通技术人员能够理解本发明从而设计适于特定用途的带有各种修改的各种实施例。
设计图
相关信息详情
申请码:申请号:CN201910532700.8
申请日:2019-06-19
公开号:CN110442642A
公开日:2019-11-12
国家:CN
国家/省市:11(北京)
授权编号:授权时间:主分类号:G06F 16/27
专利分类号:G06F16/27;G06F16/22;G06F16/2453
范畴分类:40B;
申请人:北京航天智造科技发展有限公司
第一申请人:北京航天智造科技发展有限公司
申请人地址:100036北京市海淀区西四环中路16号院7号楼12层1201
发明人:邵永安;刘亚军;贾庚泉;翟双庆;关鸿立
第一发明人:邵永安
当前权利人:北京航天智造科技发展有限公司
代理人:郝志亮
代理机构:11429
代理机构编号:北京中济纬天专利代理有限公司
优先权:关键词:当前状态:审核中
类型名称:外观设计