2014-02-28 56 views

回答

7

該字符串其實不是保證唯一。碰撞的機率非常小,但是有限。

但是在實踐中,你永遠不會看到使用這種機制生成的兩個id是相同的,因爲概率是如此之低。

您可以安全地對待SecureRandom.uuid的調用,以便在需要管理數十億數據庫實體的代碼中生成全局唯一的字符串。

Here is a small table of collision probabilities.

觀點:如果我要選擇一個任意的限制,你可能開始看到整個數據集的一個或兩個的衝突與現實的可能性,我會去周邊的10**16 - 假設你創建一個在你的系統中每秒有100萬個ID,那麼就需要30年的時間才能達到這個尺寸。即使如此,在整個30年的項目中發現任何碰撞的概率將大約爲100000.

+0

「10 ** 16」的基礎是什麼? – sawa

+0

@sawa:我現在正在查看我的事實,但它很粗糙'0.01 * Math.sqrt(2 ** 122)' - 平方根很重要,查找「生日悖論」 –

+0

感謝您的信息,但將碰撞的概率(相當容易實現)轉換爲預期(平均)的試驗次數,直到碰撞不是微不足道的。 – sawa

相關問題