1
a591826944 2014-05-20 13:24:23 +08:00
保证不发生碰撞?。。。怎么可能
|
2
tabris17 OP @a591826944 我从小空间映射到大空间,不发生碰撞是可以的吧
|
3
loading 2014-05-20 13:28:10 +08:00 via Android
uuid
|
4
tabris17 OP uuid如果用数字表示实在是太长了
|
5
loading 2014-05-20 13:33:27 +08:00 via Android
你这个id会有几个程序生成?如果是可控的,前面加个前缀不就好了?
|
9
tabris17 OP 这么说吧,就是为了防止别人从ID来判断当前的最大记录,或者通过ID来枚举所有信息
|
10
xhacker 2014-05-20 13:42:04 +08:00 1
|
12
wdd2007 2014-05-20 13:49:33 +08:00
md5
|
13
kamal 2014-05-20 13:50:12 +08:00
关注一下,同样有这个需求
|
15
akira 2014-05-20 13:55:25 +08:00
自增id后面加个随机数
|
18
tabris17 OP 或者把自增ID的每位数字打散后插入随机数字符串里?
|
20
crab 2014-05-20 13:58:45 +08:00
当ID超过5位数呢?
|
21
loading 2014-05-20 13:59:14 +08:00 via Android
#矫情
|
22
tabris17 OP @crab 超过5位数,可以映射到10位数的空间里,投射到的空间大小没限制,但是也别太大了,MD5摘要128位,用数字表示要几十位了
|
23
jakwings 2014-05-20 14:03:17 +08:00
@tabris17 那就尽量找 ACID 支持比较完美的数据库软件,同时适量地进行人工分散。完美主义害人不浅,现在客服都没用了么……
|
24
tabris17 OP 最后决定随机数+碰撞处理,就这样吧
|
25
feikeq 2014-05-20 14:08:45 +08:00
你可以试试用时间戳....
|
28
guoruei 2014-05-20 14:14:50 +08:00
时间戳+自定义ID,再来个按队列处理,妥妥的。
|
29
ganxiyun 2014-05-20 14:16:10 +08:00
RC2 64bits输出
|
31
ritksm 2014-05-20 14:16:52 +08:00 1
|
34
aisk 2014-05-20 15:43:27 +08:00 1
skip32
|
35
lu18887 2014-05-20 16:02:51 +08:00
只有时间是唯一的!过了这一刻就不会再来了!所以,好好利用时间来避开碰撞。另外,随机的度不控制好就容易出现碰撞!每一个时间都是平行时空!
|
36
lu18887 2014-05-20 16:06:13 +08:00
时间+自增ID+不可逆算法
|
38
clippit 2014-05-20 17:27:51 +08:00
数字长一点没关系,加到 URL 里可以把它转换成36进制(a-z0-9)甚至62进制(A-Za-z0-9),这样就短了
|
39
aisk 2014-05-20 17:49:56 +08:00
@tabris17 http://meizhi.im/ 现在数据库还是存的自增,显示出来的是skip32+base36,应该和你的需求一致
|
40
banxi1988 2014-05-21 09:34:46 +08:00
找一个在第一象限单调递增的函数。把现在人id看成X
Y=func(x),这样的Y就是你要的新的id. |
43
hedaode 2014-05-21 17:50:48 +08:00
可以把id简单加密(对称)下,这样既能保证id无明显规律,又能保持唯一性。例如:
id=htonl(id);//颠倒字节顺序 id=id^0x3f91b217;//异或加密,密码自定义 |