自动生成ID遇到的一些问题
关于自动生成ID报告
当前采用策略
使用UUID.randomUUID()生成一个32位的ID
存在问题:32位太长,
目标:尽量简化到20位,或者10
初步解决方案有(根据自己的理解,按照优先级进行排列)
1:根据UUID生成的32位中,截取10位,最简单的方式是取得UUID生成的前10位。可行性:UUID生成的32位,是根据一定信息生成的一个不重复的随机ID(不重复是因为重复的概率极小).每位由数字字母组成,所有枚举出来是36的10次方,在万亿以上,如果我们的app个数在万左右,那么重复的概率应该在亿分之1左右。
2:根据数据量,先预估肯定在1千万(这个可以变,根据实际情况预估). 系统提前生成1千万个不同的ID,每次新建时,取出一个生成好的(是之前没取过的,可以顺序取)。可行性:绝对不会重复,缺点:每次新建时需要从数据库中取。
3:根据位数,如10位,自己编写函数,生成一个随即的数,最简单的是生成一个10的随机数字(当然可以加入时间以及别的信息)。可行性:如果由数字字母(区分大小写)枚举出来在百万亿以上。如果app在万级,重复率也是百亿分之一。缺点:需要自己写算法,以及耗时。
4:MySQL数据库自曾方式;优点:不重复,数据库排序快,缺点,太规律,容易暴露自己的信息(比如用户注册一个,就可以知道我们系统里的注册量了)。
改进方案
自动生成6位id
采用算法"短链接"
说明:
短链接算法是先将url进行MD5加密后生成的32位字符串,然后在对这32位处理,得出4个6位的字符串(这4个中每个都可最为短链接)。
程序中采用了uuid自动生成32位唯一字符串。然后对这32为进行处理,在得出的4个短链接字符串中,选取第一个,作为id
微博短链接的生成算法(Java 版本):http://blog.csdn.net/wgw335363240/article/details/6568794