UUID如何与PHPCassa合作

时间:2011-08-25 17:55:35

标签: cassandra uuid phpcassa

我正在使用:

CassandraUtil::uuid1();

这就是我得到的:

ämªðÏBà=0£Ï‰

我虽然会输出一个int。

发生了什么事?这是正常的吗?

我也应该使用uuid1或2或3或4或......?

提前致谢!

2 个答案:

答案 0 :(得分:4)

phpcassa中的UUID有几个部分。首先,如何生成一个。以下功能对此非常有用:

$my_uuid_string = phpcassa\UUID::uuid1();
$my_uuid_string = phpcassa\UUID::uuid4();

uuid1()生成一个v1 UUID,它有一个时间戳组件,在Cassandra中称为TimeUUIDType。 uuid4()生成一个完全随机的UUID,在Cassandra中称为LexicalUUIDType。 (其他uuidX()函数通常没用。)此函数返回的是UUID的字节数组表示 - 基本上是一个16字节的字符串。这就是您的"ämªðÏBà=0£Ï‰"字符串。当您尝试将UUID插入Cassandra时,这就是您要使用的内容。

可以创建一个UUID对象,该对象具有来自此字节数组的有用方法和属性:

$my_uuid = phpcassa\UUID::import($my_uuid_string);

使用$ my_uuid,您可以得到一个漂亮的字符串表示形式,例如' d881bf7c-cf8f-11e0-85e5-00234d21610a'获得$my_uuid->string。您可以通过$my_uuid->bytes取回字节表示。您从Cassandra获取的任何uuid数据都将采用字节数组格式,因此如果您需要UUID对象,则需要在其上使用UUID::import()

此外,UUID::import()也适用于漂亮的字符串表示(看起来像'' d881bf7c-cf8f-11e0-85e5-00234d21610a')。

最后,请不要忘记UUID class的文档。

编辑:更新的链接和类名以匹配最新的phpcassa API

答案 1 :(得分:4)

uuid1()根据当前时间和机器的MAC地址生成UUID。

  • 优点:如果您希望能够按创建时间对UUID进行排序,则非常有用。
  • 缺点:潜在的隐私泄露,因为它揭示了它是在什么时间生成的计算机。
  • 可能发生冲突:如果在同一台计算机上同时生成两个UUID(在100 ns内)。 (或者其他一些不太可能的边缘案例。)

uuid2()似乎不再使用了。

uuid3()通过获取您在某个命名空间中选择的任意名称的MD5哈希值(例如,URL,域名等)来生成UUID。

  • 优点:提供了一种将UUID块分配给不同命名空间的好方法。易于从名称中重现UUID。
  • 缺点:如果您已经有一个唯一的名称,为什么还需要一个UUID?
  • 可能发生冲突:如果在名称空间中重用名称,或者存在哈希冲突。

uuid4()生成一个完全随机的UUID。

  • 优点:没有隐私问题。不必生成唯一的名称。
  • 缺点:UUID没有结构。
  • 可能发生冲突:如果您使用错误的随机数生成器,重复使用随机种子,或者非常非常不幸。
除了使用SHA-1哈希而不是MD5之外,

uuid5()uuid3()相同。官方优先于uuid3()