如何在Python中生成long类型的UUID(由java程序使用)?

时间:2010-08-20 04:05:46

标签: java python guid uuid long-integer

如何使用Python生成long类型的UUID(64位 - 由java程序使用)?

我读到了UUID module。所以我玩了一下:

>>> import uuid
>>> uuid.uuid1().int
315596929882403038588122750660996915734L

为什么在uuid.uuid1()。int生成的整数末尾有一个“ L ”?如果它是一个整数,它不应该由纯数组成吗?

另外根据文档uuid.uuid1()。int将生成一个128位整数。我需要一个long类型的整数(对于java程序),这意味着它需要是64位。是否可以生成64位而不是128位的UUID?

另一个问题是,根据Python doc,Python int是32位,而Python long有“无限精度”。 “无限精度”是什么意思?我需要64位长的int - 那将是什么类型的Python?

修改 感谢大家的回复。看起来UUID的定义是128位。在那种情况下,我可能不应该使用术语UUID。我想要做的是生成一个长(64位)类型的唯一ID。我以为UUID会做这个工作,但看起来不行。

我需要该ID作为Solr搜索引擎的文档ID。我正在使用实时索引Solr插件Zoie。根据文档,“ Zoie假设每个要编入索引的记录必须具有唯一键且类型

所以鉴于这就是我需要的,你知道我能做些什么来生成long类型的唯一ID吗?

谢谢!

4 个答案:

答案 0 :(得分:8)

L表示它是一个长整数值(大于32位)。

标准UUID总是128位;如果你想要只有64位的东西,你需要只使用UUID的子部分,或者使用UUID以外的东西。

答案 1 :(得分:4)

根据您需要的独特程度,您可以生成自己的UUID形式,而不仅仅是机器范围唯一ID,而不是通用唯一 ID(即它可能不是唯一的计算机,但在一台计算机上是可以的)。

如果ID只需要在一个平台上是唯一的,那么你可以在最后删除节点id部分(最后6个字节)。

此外,您可以考虑生成这些数字的频率。它们是每秒最多生成一次还是非常频繁?看看UUID是如何生成的,你会看到我的意思:http://tools.ietf.org/id/draft-leach-uuids-guids-01.txt

您可以根据自己的情况推出自己的版本,但仍然可以满足您的要求,并且可以轻松容纳64位。

顺便说一下,“L”表示一个long int,通常表示64位长度,而不是32位。它只是在您打印出数字时附加。

答案 2 :(得分:1)

UUID的库存定义是128位。

我打赌64位不足以保证非同步的唯一性。

答案 3 :(得分:1)

要补充一点,即使是Java的UUID也是128位长。 如果你打算让它被Java使用,你必须使它长128位而不是64位。 http://download-llnw.oracle.com/javase/1.5.0/docs/api/java/util/UUID.html