一种数据库主键生成方法、分表定位方法和装置制造方法及图纸

技术编号:31010527 阅读:9 留言:0更新日期:2021-11-30 00:08
本发明专利技术公开了一种数据库主键生成方法、分表定位方法和装置,涉及数据库技术领域。该方法的一具体实施方式包括:获取原数据表中目标业务字段的业务字段值,使用设定的哈希函数对所述业务字段值进行哈希处理,得到哈希值;使用所述哈希值对设定的分表标识长度对应的最大值进行取模运算,得到分表标识;获取当前时间和实例标识,根据所述当前时间、所述分表标识和所述实例标识,拼接生成分表主键。该数据库主键生成方法通过在主键生成过程中,增加分表标识字段,使得分表标识独立于分表实现,保证在扩容、缩容时,主键稳定不变,且全局唯一。且全局唯一。且全局唯一。

【技术实现步骤摘要】
一种数据库主键生成方法、分表定位方法和装置


[0001]本专利技术涉及数据库
,尤其涉及一种数据库主键生成方法、分表定位方法和装置。

技术介绍

[0002]当一个数据库被创建之后,随着时间的推移和业务量的增加,数据库中的数据表以及数据表的数据量都会越来越多。由于数据库的存储资源有限,数据大量积累会导致其处理能力下降,处理开销增大。为了提升存储量和查询效率,通常会将存放于一个数据库的数据分散到多个数据库,将存放于一张数据表的数据按照某种规则分散到多张结构相同的数据表中,这种方式称为分库分表(如图1)。
[0003]分表的规则有多种,比如按照数据业务时间维度进行分表,按照单表数据量进行分表,按照一个或者多个业务字段进行哈希(hash)分表等。为了唯一地标识分表的每行记录,需要为分表设置主键,现有技术中该主键可以是自增标识(Id),也可以使用类雪花算法来生成。
[0004]在实现本专利技术过程中,专利技术人发现现有技术中至少存在如下问题:
[0005]如果主键为自增Id,会导致不同表之间的自增Id存在重复,无法反向定位到记录所属分表;如果主键由类雪花算法生成,生成效率低,并且在计算分库分表标识时,需要预先确定需要分库分表的数量,分库分表标识一旦确定,库和表的数量将无法更改,无法灵活地扩容缩容。

技术实现思路

[0006]有鉴于此,本专利技术实施例提供一种数据库主键生成方法、分表定位方法和装置,该数据库主键生成方法通过在主键生成过程中,增加分表标识字段,使得分表标识独立于分表实现,保证在扩容、缩容时,主键稳定不变,且全局唯一。
[0007]为实现上述目的,根据本专利技术实施例的一个方面,提供了一种数据库主键生成方法。
[0008]本专利技术实施例的一种数据库主键生成方法,包括:获取原数据表中目标业务字段的业务字段值,使用设定的哈希函数对所述业务字段值进行哈希处理,得到哈希值;使用所述哈希值对设定的分表标识长度对应的最大值进行取模运算,得到分表标识;获取当前时间和实例标识,根据所述当前时间、所述分表标识和所述实例标识,拼接生成分表主键。
[0009]可选地,根据所述当前时间、所述分表标识和所述实例标识,拼接生成分表主键,包括:按照设定的主键生成规则,将所述当前时间的时间戳、所述分表标识和所述实例标识进行拼接,生成分表主键;其中,所述主键生成规则中设置有时间序列字段、分表标识字段和实例标识字段在所述分表主键所占的实际位数区间。
[0010]可选地,所述主键生成规则中还设置有序列号字段在所述分表主键所占的实际位数区间;根据所述当前时间、所述分表标识和所述实例标识,拼接生成分表主键,包括:基于
所述当前时间生成序列号;按照所述主键生成规则,将所述当前时间的时间戳、所述分表标识、所述实例标识和所述序列号进行拼接,生成所述分表主键。
[0011]可选地,所述方法还包括:根据设定的主键总位数,在所述主键生成规则中配置每个字段所占的基准位数区间;根据业务需求,调整所述主键生成规则中每个字段所占的基准位数区间,得到每个字段所占的实际位数区间。
[0012]可选地,按照所述主键生成规则,将所述当前时间的时间戳、所述分表标识、所述实例标识和所述序列号进行拼接,生成所述分表主键,包括:根据所述当前时间的时间戳和所述时间序列字段所占的第一实际位数区间,生成具有相应比特长度的第一比特序列;根据所述分表标识和所述分表标识字段所占的第二实际位数区间,生成具有相应比特长度的第二比特序列;根据所述实例标识和所述实例标识字段所占的第三实际位数区间,生成具有相应比特长度的第三比特序列;根据所述序列号和所述序列号字段所占的第四实际位数区间,生成具有对应比特长度的第四比特序列;拼接第一至第四比特序列,在拼接结果的最高位前增加符号位,得到所述分表主键。
[0013]为实现上述目的,根据本专利技术实施例的另一方面,提供了一种数据库主键生成装置。
[0014]本专利技术实施例的一种数据库主键生成装置,包括:第一处理模块,用于获取原数据表中目标业务字段的业务字段值,使用设定的哈希函数对所述业务字段值进行哈希处理,得到哈希值;第二处理模块,用于使用所述哈希值对设定的分表标识长度对应的最大值进行取模运算,得到分表标识;主键拼接模块,用于获取当前时间和实例标识,根据所述当前时间、所述分表标识和所述实例标识,拼接生成分表主键。
[0015]可选地,所述主键拼接模块,还用于:按照设定的主键生成规则,将所述当前时间的时间戳、所述分表标识和所述实例标识进行拼接,生成分表主键;其中,所述主键生成规则中设置有时间序列字段、分表标识字段和实例标识字段在所述分表主键所占的实际位数区间。
[0016]可选地,所述主键生成规则中还设置有序列号字段在所述分表主键所占的实际位数区间;所述主键拼接模块,还用于:基于所述当前时间生成序列号;按照所述主键生成规则,将所述当前时间的时间戳、所述分表标识、所述实例标识和所述序列号进行拼接,生成所述分表主键。
[0017]可选地,所述装置还包括:配置调整模块,用于根据设定的主键总位数,在所述主键生成规则中配置每个字段所占的基准位数区间;根据业务需求,调整所述主键生成规则中每个字段所占的基准位数区间,得到每个字段所占的实际位数区间。
[0018]可选地,所述主键拼接模块,还用于:根据所述当前时间的时间戳和所述时间序列字段所占的第一实际位数区间,生成具有相应比特长度的第一比特序列;根据所述分表标识和所述分表标识字段所占的第二实际位数区间,生成具有相应比特长度的第二比特序列;根据所述实例标识和所述实例标识字段所占的第三实际位数区间,生成具有相应比特长度的第三比特序列;根据所述序列号和所述序列号字段所占的第四实际位数区间,生成具有对应比特长度的第四比特序列;拼接第一至第四比特序列,在拼接结果的最高位前增加符号位,得到所述分表主键。
[0019]为实现上述目的,根据本专利技术实施例的又一个方面,提供了一种分表定位方法。
[0020]本专利技术实施例的一种分表定位方法,包括:根据设定的主键生成规则,从分表主键中获取分表标识;其中,所述分表主键按照数据库主键生成方法生成;获取分表数量,使用所述分表标识对所述分表数量进行取模运算,得到目标分表。
[0021]可选地,所述主键生成规则中设置有分表标识字段在所述分表主键所占的实际位数区间;根据设定的主键生成规则,从分表主键中获取分表标识,包括:根据设定的主键生成规则,确定所述分表标识字段在所述分表主键所占的实际位数区间;从所述分表主键中获取所述实际位数区间对应的比特序列,所述比特序列即为分表标识。
[0022]为实现上述目的,根据本专利技术实施例的另一个方面,提供了一种分表定位装置。
[0023]本专利技术实施例的一种分表定位装置,包括:获取模块,用于根据设定的主键生成规则,从分表主键中获取分表标识;其中,所述分表主键按照数据库主键生成方法生成;计算模块,用于获取分表数量,使用所述分表标识对所述分表数量进行取模运算,得到目标分表。本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种数据库主键生成方法,其特征在于,包括:获取原数据表中目标业务字段的业务字段值,使用设定的哈希函数对所述业务字段值进行哈希处理,得到哈希值;使用所述哈希值对设定的分表标识长度对应的最大值进行取模运算,得到分表标识;获取当前时间和实例标识,根据所述当前时间、所述分表标识和所述实例标识,拼接生成分表主键。2.根据权利要求1所述的方法,其特征在于,根据所述当前时间、所述分表标识和所述实例标识,拼接生成分表主键,包括:按照设定的主键生成规则,将所述当前时间的时间戳、所述分表标识和所述实例标识进行拼接,生成分表主键;其中,所述主键生成规则中设置有时间序列字段、分表标识字段和实例标识字段在所述分表主键所占的实际位数区间。3.根据权利要求2所述的方法,其特征在于,所述主键生成规则中还设置有序列号字段在所述分表主键所占的实际位数区间;根据所述当前时间、所述分表标识和所述实例标识,拼接生成分表主键,包括:基于所述当前时间生成序列号;按照所述主键生成规则,将所述当前时间的时间戳、所述分表标识、所述实例标识和所述序列号进行拼接,生成所述分表主键。4.根据权利要求2或3所述的方法,其特征在于,所述方法还包括:根据设定的主键总位数,在所述主键生成规则中配置每个字段所占的基准位数区间;根据业务需求,调整所述主键生成规则中每个字段所占的基准位数区间,得到每个字段所占的实际位数区间。5.根据权利要求3所述的方法,其特征在于,按照所述主键生成规则,将所述当前时间的时间戳、所述分表标识、所述实例标识和所述序列号进行拼接,生成所述分表主键,包括:根据所述当前时间的时间戳和所述时间序列字段所占的第一实际位数区间,生成具有相应比特长度的第一比特序列;根据所述分表标识和所述分表标识字段所占的第二实际位数区间,生成具有相应比特长度的第二比特序列;根据所述实例标识和所述实例标识字段所占的第三实际位数区间,生成具有相应比特长度的第三比特序列;根据所述序列号和所述序列号字段所占的第四实际位数区间,生成具有对应比特长度的第四比特序列;拼接第一至第四比特序列,在拼接结果的最高位前增加符号位,得到所述分...

【专利技术属性】
技术研发人员:董旭
申请(专利权)人:北京京东世纪贸易有限公司
类型:发明
国别省市:

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

1