2013-07-31 60 views
-1

我有一個系統分析師堅持使用oracle序列而不是UUID,因爲他不熟悉它。休眠UUID生成器(重新生成重複)

我有幾個問題,希望社區可以幫助我。

1)如何生成hibernate UUID以確保唯一性?

我知道預言SYS_GUID()使用

SYS_GUID生成並返回一個全局唯一標識符(RAW 值)構成的16個字節。在大多數平臺,所生成的 標識符由一個主機標識符,進程或線程 標識符的過程或線程調用該函數,和一個 非重複的值(字節順序),用於該進程或線程

的2)在使用UUID的情況下,休眠自動重新生成一個UUID來提交該行?

我知道這種情況很少發生,但是如果hibernate可以做到這一點,但他堅持有可能會發生並且事務將會失敗。

3)在oracle序列發生器上使用UUID有什麼好處?

+0

我之所以得到 - 點的任何理由? – seesee

+0

Hibernate的UUID看起來是128字節,這是不太可能重新生成相同值的次數,但爲什麼要討論呢?如果你這樣做,你不會錯。 – EJP

+0

權威是一種痛苦,他堅持1萬億次仍然是一個機會。 – seesee

回答

2

Rare甚至沒有開始描述兩次隨機生成相同UUID的遠程可能性。

如維基百科arcticle約UUID S N次嘗試後的衝突的

可能性所示。

n        probability 
68,719,476,736 = 2**36   0.0000000000000004 (4 × 10−16) 
2,199,023,255,552 = 2**41  0.0000000000004 (4 × 10−13) 
70,368,744,177,664 = 2**46  0.0000000004 (4 × 10−10) 

你可以爲100萬的速度每秒814天生成UUID,只有有一個4 * 10 ** - 產生重複的10機會。

更不用說Advantages and disadvantages of GUID/UUID database keys