2011-08-25 17 views
1

UUID工作我使用:雖然它會輸出一個INT如何與PHPCassa

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

我:

CassandraUtil::uuid1(); 

這是我得到的。

這是怎麼回事?這是正常的嗎?

也應該使用uuid1或2或3或4或...?

在此先感謝!

回答

4

在phpcassa中有幾個關於UUID的部分。首先,如何生成一個。以下功能是有用的這一:

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

UUID1()產生V1 UUID,其具有時間戳成分,在卡桑德拉稱爲TimeUUIDType。 uuid4()生成一個完全隨機的UUID,在Cassandra中稱爲LexicalUUIDType。 (其他的uuidX()函數通常不是很有用)。這個函數返回的是UUID的字節數組表示 - 基本上是一個16字節的字符串。這是您的"ämªðÏBà=0£Ï‰"字符串。當你試圖在Cassandra中插入一個UUID時,這就是你想要使用的。

這有可能使具有有用的方法,並從該字節數組屬性一個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

+0

你有什麼建議我減少碰撞? – jnbdz

+1

不要擔心碰撞。 UUID的全部目的是使碰撞的可能性微不足道。如果您需要按時間順序排列的內容,請使用uuid1()。如果你不這樣做,請使用uuid4()或uuid1()。 –

+0

您是否會使用它在您需要用戶創建帳戶的網站上生成用戶? – jnbdz

4

uuid1()基於當前時間和本機的MAC地址的UUID。

  • 優點:如果您希望能夠按照創建時間對UUID進行排序,這很有用。
  • 缺點:潛在的隱私泄漏,因爲它揭示了它是在哪個計算機上生成的,以及在什麼時間生成的。
  • 可能的衝突:如果在同一臺機器上同時生成兩個UUID(100ns內)。 (或其他一些不太可能的邊際情況)。

uuid2()似乎不再被使用。

uuid3()通過在某個名稱空間(例如URL,域名等)中選擇任意名稱的MD5哈希來生成UUID。

  • 優點:提供了一種將UUID塊分配給不同名稱空間的好方法。輕鬆從名稱中重現UUID。
  • 缺點:如果你已經有一個獨特的名字,爲什麼你需要一個UUID?
  • 可能的衝突:如果您在名稱空間內重用名稱,或者存在散列衝突。

uuid4()生成完全隨機的UUID。

  • 優點:沒有隱私問題。不必生成唯一的名稱。
  • 缺點:UUID沒有結構。
  • 碰撞可能:如果你使用了一個壞的隨機數發生器,重用一個隨機種子,或者是非常非常不幸的。

uuid5()相同uuid3(),除了使用SHA-1散列來代替MD5。正式優先於uuid3()

+0

我正在考慮使用uuid1();但我擔心碰撞。 PHPCassa有什麼方法可以消除這個問題? – jnbdz