数据库主键生成装置和数据库主键生成方法制造方法及图纸

技术编号:8215725 阅读:256 留言:0更新日期:2013-01-17 13:39
本发明专利技术提供了一种数据库主键生成装置,包括:读取单元,读取预设的主键配置表,从主键配置表中获取数据中心的站点编号;主键生成单元,根据获取的站点编号读取主键分配表,获取主键分配表中记录的主键的最大值,根据主键的最大值得到当前可分配的主键的值,其中,主键包括数据中心的站点编号、生成主键的日期和流水号。根据本发明专利技术的技术方案,可获得高性能的数据库主键,使得主键既具有像业务编号一样直观易用的特点,又可支持分布式数据部署环境。本发明专利技术还提供一种数据库主键生成方法。

【技术实现步骤摘要】

本专利技术涉及计算机
,具体而言,涉及一种数据库主键生成装置和一种数据库主键生成方法。
技术介绍
在软件系统开发中,如果需要利用数据库系统来存储和管理数据,就无法回避数据库主键的设计问题。好的数据库主键设计,具有高效、易用和可靠的特点。目前,数据库主键的主流生成方法包括数据库自增字段方法和⑶ID (全局统一标识符)方法。自增字段方法由数据库自增类型字段来实现,由数据库自动生成和维护,并确保唯一性。GUID方法是利用机器硬件的唯一性特征(例如网卡MAC地址的唯一性)并结合生成时间,来确保在全球 范围内不会出现重复的数值。自增字段通常数据类型为Int或Biglnt,存储空间小且索引效率高。但使用时必须先插入数据库,才能确定ID值,这会造成编程时的很多不便。另外,自增字段的形式就是一个1、2、3、4这样的序列,没有任何实际意义,很不直观易用。而⑶ID方式生成的ID,如果按字符串方式存储,需要占用36个字节。如果按数据库特定类型存储,例如SqlServer的uniqueidentifier类型,需要占用16个字节,不仅占用空间大,而且索引的效率远较Int类型差。索引效率差一方面是因为索引键较长,另一方面是因为GUID本身是无序的,无法保证顺序生成的记录自然排序。COMB主键设计方案是对GUID无序问题的改进,方法是保留⑶ID的前10个字节,而用后6个字节表示⑶ID生成的时间,尽管做了这样的改进,COMB主键方案的性能仍然远较Int类型低。另一方面,一些传统的应用往往选择业务含义唯一的字段作为主键,例如账单编号Bill200808080001 (编号方式为前缀+YYYYMMDD+流水号)。这种形式的ID,远比毫无业务含义的自增整数和随机的GUID更为直观易用。ID如果做不到直观易用,会增大使用难度及维护成本。不过在今天,用业务字段做主键的方案已不被推荐,因为业务字段可能发生修改,而一旦修改主键将会带来一系列麻烦的问题。最后,随着云计算环境的普及,即便在企业的私有云环境中也需要考虑多数据中心分布的问题。主键设计是否支持分布式部署?是否支持数据迁移?也是需要解决的问题。显然,GUID方案可以保证分布式环境下主键依然唯一,但自增字段方案就无法满足要求。因此,需要一种数据库主键生成技术,使得数据库主键具有像业务编号那样直观易用的特点,并可支持分布式数据部署环境。
技术实现思路
本专利技术正是基于上述问题,提出了一种数据库主键生成技术,可生成高性能数据库主键,使得数据库主键具有像业务编号那样直观易用的特点,并可支持分布式数据部署环境。有鉴于此,根据本专利技术的一个方面,提供了一种数据库主键生成装置,包括读取单元,读取预设的主键配置表,从所述主键配置表中获取数据中心的站点编号;主键生成单元,根据获取的站点编号读取主键分配表,获取所述主键分配表中记录的主键的最大值,根据所述主键的最大值得到当前可分配的主键的值,其中,所述主键包括数据中心的站点编号、生成主键的日期和流水号。由于主键包含数据中心的站点编号信息,因此,该数据库主键可支持分布式数据部署环境,另外该主键包括站点编号、生成日期和流水号,且流水号按顺序分配,因此,主键具有直观易用的特点。在上述技术方案中,优选的,所述读取单元还用于从所述主键配置表中读取默认分配数量;所述数据库主键生成装置还包括预 分配单元,从数据库中预先获取所述默认分配数量的主键,并将所述默认分配数量的主键放入内存中;所述主键生成单元还用于将所述主键分配表中所述主键的最大值与所述内存中的主键的最小值同步,在分配所述主键时,调用存储过程,将所述内存中的主键的最小值递增,以得到所述当前可分配的主键的值。为了避免每次分配主键时都需要与数据库的网络交互,在该技术方案中,预先从数据库中申请一定数量的主键值并缓存在内存中,只有当内存中的主键值完全被分配时,才与数据库进行下一次的交互。这样,如果内存中有可用主键值,则分配一个主键值的过程可瞬时完成,这极大地减少了网络及数据库的开销。在上述技术方案中,优选的,所述主键生成单元包括分解子单元,从所述主键的最大值中分解出日期信息;分配子单元,在判断出所述日期信息为当前日期及当前日期以前的日期时,将包含当前日期信息(今天)的主键的值作为所述当前可分配的主键的值。主键包含日期信息并且限定了每天可分配的主键值的数量,因此,主键分配表中主键的最大值,是指当前第一个可用的主键值(每次分配时可能是几千个主键值,但第一个可分配的主键值就是该最大值,然后依次分配),如果该最大值的日期是昨天的,说明包含今天日期的主键值还没有开始分配,那么就可将今天日期对应的主键值进行分配,如果今天对应的主键值还不够分配,就分配与明天对应的主键值。在上述技术方案中,优选的,所述分配子单元还用于在判断出所述日期信息等于所述当前日期,且包含所述当前日期的主键的值已全被分配时,将包含当前日期以后的日期信息的主键的值作为所述当前可分配的主键的值。即通过提前透支使用未来可用的主键值,以应对当天分配主键数量巨大的情况。如果该最大值是今天可分配的主键值中的最后一个,但不够分配,那么可分配与明天甚至是后天对应的主键值。在上述任一技术方案中,优选的,所述主键的类型包括整数类型。利用整数型,可以使主键存储空间小且索引效率高,可进一步提高主键的性能。根据本专利技术的另一方面,还提供了一种数据库主键生成方法,包括步骤202,读取预设的主键配置表,从所述主键配置表中获取数据中心的站点编号;步骤204,根据获取的站点编号读取主键分配表,获取所述主键分配表中记录的主键的最大值,根据所述主键的最大值得到当前可分配的主键的值,其中,所述主键包括数据中心的站点编号、生成主键的日期和流水号。由于主键包含数据中心的站点编号信息,因此,该数据库主键可支持分布式数据部署环境,另外该主键包括站点编号、生成日期和流水号,且流水号按顺序分配,因此,主键具有直观易用的特点。在上述技术方案中,优选的,所述步骤202还包括从所述主键配置表中还读取默认分配数量,从数据库中预先获取所述默认分配数量的主键,并将所述默认分配数量的主键放入内存中;所述步骤204还包括将所述主键分配表中所述主键的最大值与所述内存中的主键的最小值同步,在分配所述主键时,调用存储过程,将所述内存中的主键的最小值递增,以得到所述当前可分配的主键的值。为了避免每次分配主键时都需要与数据库的网络交互,在该技术方案中,预先从数据库中申请一定数量的主键值并缓存在内存中,只有当内存中的主键值完全被分配时,才与数据库进行下一次的交互。这样,如果内存中有可用主键值,则分配一个主键值的过程可瞬时完成,这极大地减少了网络及数据库的开销。在上述技术方案中,优选的,所述步骤204还包括从所述主键的最大值中分解出 日期信息;若判断出所述日期信息为当前日期及当前日期以前的日期,则将包含当前日期信息的主键的值作为所述当前可分配的主键的值。主键包含日期信息并且限定了每天可分配的主键值的数量,因此,主键分配表中主键的最大值,是指当前第一个可用的主键值(每次分配时可能是几千个主键值,但第一个可分配的主键值就是该最大值,然后依次分配),如果该最大值的日期是昨天的,说明包含今天日期的主键值还没有开始分配,那么就可将今天日期对应的主键值本文档来自技高网
...

【技术保护点】
一种数据库主键生成装置,其特征在于,包括:读取单元,读取预设的主键配置表,从所述主键配置表中获取数据中心的站点编号;主键生成单元,根据获取的站点编号读取主键分配表,获取所述主键分配表中记录的主键的最大值,根据所述主键的最大值得到当前可分配的主键的值,其中,所述主键包括数据中心的站点编号、生成主键的日期和流水号。

【技术特征摘要】

【专利技术属性】
技术研发人员:张红斌黄卫
申请(专利权)人:用友软件股份有限公司
类型:发明
国别省市:

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

1