1

我在用:

CassandraUtil::uuid1();

这就是我得到的:

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

我虽然它会输出一个int。

到底是怎么回事?正常吗?

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

提前致谢!

4

2 回答 2

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,您可以通过获取$my_uuid->string. 您可以通过执行$my_uuid->bytes. 您从 Cassandra 返回的任何 uuid 数据都将采用字节数组格式,因此UUID::import()如果您需要 UUID 对象,则需要在其上使用。

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

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

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

于 2011-08-26T03:09:17.373 回答
4

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

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

uuid2()似乎不再使用了。

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

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

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

  • 优点:没有隐私问题。不必生成唯一名称。
  • 缺点:UUID 没有结构。
  • 可能发生冲突:如果您使用了错误的随机数生成器,重复使用随机种子,或者非常非常不走运。

uuid5()与 相同uuid3(),除了使用 SHA-1 哈希而不是 MD5。官方首选超过uuid3().

于 2011-08-26T17:12:06.883 回答