[发明专利]数据库主键生成装置和数据库主键生成方法有效
申请号: | 201210367964.0 | 申请日: | 2012-09-28 |
公开(公告)号: | CN102880705A | 公开(公告)日: | 2013-01-16 |
发明(设计)人: | 张红斌;黄卫 | 申请(专利权)人: | 用友软件股份有限公司 |
主分类号: | G06F17/30 | 分类号: | G06F17/30 |
代理公司: | 北京友联知识产权代理事务所(普通合伙) 11343 | 代理人: | 尚志峰;汪海屏 |
地址: | 100094 北京*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 数据库 主键 生成 装置 方法 | ||
技术领域
本发明涉及计算机技术领域,具体而言,涉及一种数据库主键生成装置和一种数据库主键生成方法。
背景技术
在软件系统开发中,如果需要利用数据库系统来存储和管理数据,就无法回避数据库主键的设计问题。好的数据库主键设计,具有高效、易用和可靠的特点。目前,数据库主键的主流生成方法包括数据库自增字段方法和GUID(全局统一标识符)方法。自增字段方法由数据库自增类型字段来实现,由数据库自动生成和维护,并确保唯一性。GUID方法是利用机器硬件的唯一性特征(例如网卡MAC地址的唯一性)并结合生成时间,来确保在全球范围内不会出现重复的数值。
自增字段通常数据类型为Int或BigInt,存储空间小且索引效率高。但使用时必须先插入数据库,才能确定ID值,这会造成编程时的很多不便。另外,自增字段的形式就是一个1、2、3、4这样的序列,没有任何实际意义,很不直观易用。而GUID方式生成的ID,如果按字符串方式存储,需要占用36个字节。如果按数据库特定类型存储,例如SqlServer的uniqueidentifier类型,需要占用16个字节,不仅占用空间大,而且索引的效率远较Int类型差。索引效率差一方面是因为索引键较长,另一方面是因为GUID本身是无序的,无法保证顺序生成的记录自然排序。COMB主键设计方案是对GUID无序问题的改进,方法是保留GUID的前10个字节,而用后6个字节表示GUID生成的时间,尽管做了这样的改进,COMB主键方案的性能仍然远较Int类型低。
另一方面,一些传统的应用往往选择业务含义唯一的字段作为主键,例如账单编号Bill200808080001(编号方式为前缀+YYYYMMDD+流水号)。这种形式的ID,远比毫无业务含义的自增整数和随机的GUID更为直观易用。ID如果做不到直观易用,会增大使用难度及维护成本。不过在今天,用业务字段做主键的方案已不被推荐,因为业务字段可能发生修改,而一旦修改主键将会带来一系列麻烦的问题。
最后,随着云计算环境的普及,即便在企业的私有云环境中也需要考虑多数据中心分布的问题。主键设计是否支持分布式部署?是否支持数据迁移?也是需要解决的问题。显然,GUID方案可以保证分布式环境下主键依然唯一,但自增字段方案就无法满足要求。
因此,需要一种数据库主键生成技术,使得数据库主键具有像业务编号那样直观易用的特点,并可支持分布式数据部署环境。
发明内容
本发明正是基于上述问题,提出了一种数据库主键生成技术,可生成高性能数据库主键,使得数据库主键具有像业务编号那样直观易用的特点,并可支持分布式数据部署环境。
有鉴于此,根据本发明的一个方面,提供了一种数据库主键生成装置,包括:读取单元,读取预设的主键配置表,从所述主键配置表中获取数据中心的站点编号;主键生成单元,根据获取的站点编号读取主键分配表,获取所述主键分配表中记录的主键的最大值,根据所述主键的最大值得到当前可分配的主键的值,其中,所述主键包括数据中心的站点编号、生成主键的日期和流水号。
由于主键包含数据中心的站点编号信息,因此,该数据库主键可支持分布式数据部署环境,另外该主键包括站点编号、生成日期和流水号,且流水号按顺序分配,因此,主键具有直观易用的特点。
在上述技术方案中,优选的,所述读取单元还用于从所述主键配置表中读取默认分配数量;所述数据库主键生成装置还包括:预分配单元,从数据库中预先获取所述默认分配数量的主键,并将所述默认分配数量的主键放入内存中;所述主键生成单元还用于将所述主键分配表中所述主键的最大值与所述内存中的主键的最小值同步,在分配所述主键时,调用存储过程,将所述内存中的主键的最小值递增,以得到所述当前可分配的主键的值。
为了避免每次分配主键时都需要与数据库的网络交互,在该技术方案中,预先从数据库中申请一定数量的主键值并缓存在内存中,只有当内存中的主键值完全被分配时,才与数据库进行下一次的交互。这样,如果内存中有可用主键值,则分配一个主键值的过程可瞬时完成,这极大地减少了网络及数据库的开销。
在上述技术方案中,优选的,所述主键生成单元包括分解子单元,从所述主键的最大值中分解出日期信息;分配子单元,在判断出所述日期信息为当前日期及当前日期以前的日期时,将包含当前日期信息(今天)的主键的值作为所述当前可分配的主键的值。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于用友软件股份有限公司,未经用友软件股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210367964.0/2.html,转载请声明来源钻瓜专利网。
- 上一篇:弹性复合地板基材的制造方法
- 下一篇:用于合成生长抑素的主要肽片段