我正在使用Python的UUID函数为要存储在数据库中的对象创建唯一的ID:
>>> import uuid
>>> print uuid.uuid4()
2eec67d5-450a-48d4-a92f-e387530b1b8b
我可以假设这是一个唯一的ID吗?
还是说在接受它作为有效之前,应该再次检查是否已经有相同的唯一ID在我的数据库中生成了呢?
我正在使用Python的UUID函数为要存储在数据库中的对象创建唯一的ID:
>>> import uuid
>>> print uuid.uuid4()
2eec67d5-450a-48d4-a92f-e387530b1b8b
我可以假设这是一个唯一的ID吗?
还是说在接受它作为有效之前,应该再次检查是否已经有相同的唯一ID在我的数据库中生成了呢?
uuid1
,它在生成UUID时考虑了日期/时间,因此几乎不可能发生冲突(除非同时生成很多个UUID)。uuid4
生成随机ID,与先前生成的值发生冲突的可能性非常小,但由于它不使用单调递增的时期时间作为输入(或将其包含在输出UUID中),因此先前生成的值有(非常)小的可能性将来再次生成。即使概率很小,您也应该始终进行重复检查,因为可能存在重复。
我建议在数据库中添加一个重复键约束,以防出现错误时重试。
uuid4
碰撞的概率是16**32
中的1。 - roippios.urandom
,并回退到random
模块。因此,总的来说,你应该是安全的。(抱歉过于详细,但我认为这可能对你、对原帖作者或其他人有趣。) - Carsten