Python的uuid1是按时间顺序排列的吗?
Python的文档提到,uuid1是通过当前时间来生成uuid值的。不过,我找不到任何说明,确保UUID1是按顺序生成的。
>>> import uuid
>>> u1 = uuid.uuid1()
>>> u2 = uuid.uuid1()
>>> u1 < u2
True
>>>
5 个回答
5
根据主机ID、序列号和当前时间生成一个UUID。如果没有提供节点信息,就会使用getnode()来获取硬件地址。如果提供了时钟序列号,它将作为序列号使用;否则会随机选择一个14位的序列号。
从这段话中,我理解到,生成UUID时,首先会用到MAC地址,然后是一个(可能是随机的)序列号,最后是当前时间。所以我不认为这些生成的UUID会保证是单调递增的,即使是同一台机器或进程生成的UUID也不一定会这样。
13
UUID 不是顺序的
不,标准的 UUID 并不是设计成顺序的。
显然,有人尝试过让 GUID(微软对 UUID 的改进版)变得顺序,以便在某些数据库场景中提高性能。但UUID 的初衷并不是要顺序。http://en.wikipedia.org/wiki/Globally_unique_identifier
MAC 地址在最后,不在最前
不,在标准的 UUID 中,MAC 地址 不是第一个部分。MAC 地址是版本 1 UUID 中的 最后一个部分。http://en.wikipedia.org/wiki/Universally_unique_identifier
不要假设 UUID 的类型
不同版本的 UUID 之间是可以兼容的。所以,期待你总是使用版本 1 的 UUID 可能不太合理。其他程序员可能会使用其他版本。
规范
15
但并不是总是这样:
>>> def test(n):
... old = uuid.uuid1()
... print old
... for x in range(n):
... new = uuid.uuid1()
... if old >= new:
... print "OOops"
... break
... old = new
... print new
>>> test(1000000)
fd4ae687-3619-11e1-8801-c82a1450e52f
OOops
00000035-361a-11e1-bc9f-c82a1450e52f