Python 有没有短一点的 UUID?

2014-12-23 20:20:36 +08:00
 invite
现在的UUID太长了,能不能生成短一点的?
20899 次点击
所在节点    Python
22 条回复
wy315700
2014-12-23 20:37:13 +08:00
取前几位不就行了
9hills
2014-12-23 20:49:23 +08:00
@wy315700 前几位就丧失了UUID的意义

UUID的意义就是绝不会重复
GeekGao
2014-12-23 20:53:49 +08:00
@9hills 前几位+当前时间戳
ooh
2014-12-23 21:05:53 +08:00
如果象上面那样你自己用时间戳写一个函数更方便
cbsw
2014-12-23 21:06:38 +08:00
UUID 定义就是这么长的,是根据时间和空间唯一确定的一个标识符。LZ 想要的是一定范围内的唯一标识符,这个可以自己用随机数生成,然后通过记录保证唯一性(重复的丢掉)
wy315700
2014-12-23 21:14:27 +08:00
@9hills 计算一下概率 其实本质是一样的 重复的概率和你的长度有关
mathgl
2014-12-23 21:23:30 +08:00
我现在用 bson 的那个 objectid.

24位,也几乎是一致性。
9hills
2014-12-23 22:26:23 +08:00
@wy315700 python默认的uuid也叫guid
http://www.ietf.org/rfc/rfc4122.txt

如果简单认为长度和概率相关就太……
wy315700
2014-12-23 23:10:16 +08:00
@9hills 给UUID做一个hash 然后取前多少位 基本上就没问题了
14
2014-12-23 23:34:40 +08:00
import shortuuid
14
2014-12-23 23:37:07 +08:00
搭车问,现在项目里面有这样一个需求,遇到重复的用户名自动重命名,现在我是直接在后面加四位随机数,貌似到现在没有看到过报错
kavinyao
2014-12-23 23:56:14 +08:00
得看应用场景。

如果不是分布式系统,维护一个自增序列即可。

如果是在分布式环境,对一致性要求高的话,UUID几乎是唯一选择;反之,如果可以容忍一定程度的重复,一些简单的方案也是可行的。
geeklian
2014-12-24 00:11:23 +08:00
首先把uuid转换成10进制,然后再转换成某个大于16进制的字符串,这样长度缩短,随机性什么都不变。

转换成10进制使用:
int(uuid.uuid1().hex,16)
incompatible
2014-12-24 00:42:11 +08:00
uuid的32个字符保证的是universal unique
实际上你只需要application scope的unique,所以用uuid真的很浪费、不如自己写一个

用数据库实现一个sequence很简单的
如果是高并发系统,可以参考淘宝的订单号生成机制。预先分配一批随取随用,快用完时再分配一批。也不难实现的。
geew
2014-12-24 10:14:42 +08:00
@14 那是你人品好 之前看到的一个做法是建一张表来记录重命名的用户名信息 类似这样
name seq seq记录这个名字的使用次数 反正新的名字的时候取seq+1就行
9hills
2014-12-24 10:23:32 +08:00
@wy315700 有算法依据么。。你这个还不如

@invite https://github.com/stochastic-technologies/shortuuid
invite
2014-12-24 10:25:57 +08:00
@14 @9hills 看了下,好像不错。不过看代码似乎是从uuid压缩转换了一下。是不是可以理解为uuid的压缩版?
wy315700
2014-12-24 10:35:15 +08:00
@9hills

http://pastie.org/pastes/8619409#

看这么多不如写个程序跑跑看重复性。


然后是否随机可以用rngtest
参考树莓派的测试方法

http://www.oschina.net/translate/well-that-was-unexpected-the-raspberry-pis-hardware-random-number-generator
9hills
2014-12-24 11:08:36 +08:00
@invite 嗯,压缩保证不损失信息,从而不影响唯一性。


@wy315700 这是个数学问题,而不是测试问题。。
invite
2014-12-24 11:49:19 +08:00
@9hills 不错不错,不过要是官方提供一个UUID压缩接口就更好了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/156107

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX