大家看看这种主键生成方式好不好,谢绝灌水
大家好,我的主键生成方式如下:
年月日时分秒毫秒再加上四位随机数,共20位。我觉得应该能够保证绝对唯一了,当然,这个主键是由程序生成的不是由数据库生成。
大家觉得这种主键生成方式好吗?
非常欢迎批评意见,我刚刚开始学习数据库。
[b]问题补充:[/b]
呵呵,谢谢大家解答,我还是有疑问,说出来大家看看对不对哈,就是因为我是精确到毫秒,我觉得并发间隔再少,也不至于一个毫秒不差吧,另外我毫秒数后面还跟了4位的随机数,应该能保证唯一性了吧。
另外想问一下,主键的长度对性能有影响吗?我觉得应该有,呵呵,还是请熟悉的人指点一下谢谢大家哈
[size=large][color=red]小概率事件不等于说不可能发生.[/color][/size]
在多个服务器一起运行的时候你要考虑一下,同一个时间内生成同样的4位随机数,是有可能的.
uuid的策略就是类似时间+mac地址,这样才保证不会重复,因为mac地址是不相同的.
理论上这是没办法保证唯一的.
比如说你有2台服务器,同时运行的时候就有可能出现主键重复.
所以要真正的解决唯一id的问题,就是用uuid,uuid是一个已经成熟的解决方案.如果你需要一个这样唯一的id的话.
不过一般的应用,只要用自动增长主键就足够了.像uuid这类主键方式,很多框架也都解决了,例如hibernate就有很完整的生成主键的方式.
初学数据库的话,不需要管这类技术问题,因为这些问题都有解决方案.更应该关注一下范式,数据完整性,以及数据库设计.其中数据库设计的水最深,如何设计出最佳可用性最佳性能的数据库,是一个一直都在不断探讨的问题
UUID UUIDHexGenerator.class Hibernate 自带。
不过一般不是非常大的系统不推荐使用,太影响性能。(数据索引什么的)
推荐使用 @TableGenerator 策略,你可以Google一下这个。
我不想多说,详细就是用一张表来维护,表字段为:
table_name(entity_name), id .
不能在服务器集群的时候使用,通常还需绑上服务器的MAC地址
取决于你的用户数量,和你的并发情况,如果你以毫秒有1W个用户,恭喜你,你写的程序就完蛋了,这个最好是用数据库生成的,数据库在处理的时候,排队和锁的机制,一般很少出现那种情况
额,我觉得我的回答很明确了。
UUID自然是影响性能的。
所以不是分布式系统,不是很大的系统的话最好不用。