開發者工具 · UUID 產生器
UUID 版本 1 到 8 說明:您應該產生哪一個?
· 背景
uuid 密碼學 瀏覽器 API
八個版本共享一種格式,但解決不同的問題:時間順序、再現性、隨機性或自訂佈局。這篇文章解釋了每一個並給出了決策路徑。
一種格式,八種配方-為什麼當您選擇函式庫函數時版本半位元組很重要
UUID 標準將 128 位元格式定義為帶有連字號的 36 個十六進位字元。 RFC 9562 定義了八種不同的配方(版本一到版本八),用於以不同的模式和含義填入這些位元。版本半位元組(第三組的第一個字元)標識產生該值的方法,用作標籤。選擇錯誤的版本意味著儲存不必要的時間資訊、缺少資料庫效能的排序保證或誤解標識符安全角色。這篇文章將介紹每個版本、它解決的具體問題、開發人員在實踐中遇到的問題,並提供一個決策框架,用於根據您的特定係統需求選擇正確的版本。
v1 和 v6:時間加節點 — 原始的基於時間的佈局和正確排序的重新排序版本
版本 1 將 60 位元時間戳記與節點識別碼(最初是 MAC 位址,儘管現代實作使用隨機值以避免洩漏硬體資訊)結合。時間戳記記錄自 10 月 15、1582 以來的 100 奈秒間隔。節點欄位可以揭示標識符的產生時間及其地理來源,這就是現代實現避免 MAC 位址的原因。版本 6 重新排列相同的時間戳記和節點信息,透過將高階時間位移到前面來提高可排序性,使 v6 UUID 按字典順序正確排序。如果您的應用程式需要能夠按建立時間自然排序並具有卓越索引局部性的 UUID,那麼 v6 是現代選擇。
v2:DCE 安全性 — 很少使用的嵌入 POSIX 識別碼的變體
版本 2 在新系統中很少使用。它將 POSIX 使用者或群組標識符嵌入到 UUID 佈局中,使其僅在這些標識符具有組織含義的遺留環境中有用。 v2 設計採用了現代分散式系統中不常見的特定計算模型(DCE 安全性)。大多數組織透過資料庫聯接或查找表將 UUID 與其應用程式層中的使用者或群組關聯起來,而不是透過將使用者 ID 編碼到識別碼本身。這種關注點分離使得更改授權模型、遷移使用者資料和維護審計追蹤變得更加容易。將憑證直接編碼到 UUID 會產生緊密耦合,並使系統更難發展。
v3 和 v5:基於名稱 — 從命名空間和具有 MD5 或 SHA-1 的名稱雜湊的確定性 ID
版本 3 和 5 UUID 是確定性的:相同的命名空間和名稱始終產生相同的標識符,非常適合表示來自外部資料的穩定映射。版本 3 使用 MD5,版本 5 使用 SHA-1 作為雜湊演演算法,反映了它們各自的年齡和採用情況。當客戶記錄到達導入時,從固定命名空間派生的 v5 UUID 在多次導入執行中將是相同的,從而防止重複記錄。這種確定性意味著 UUID 對於任何知道命名空間和輸入的人來說都是可重現和可預測的。實用價值在資料整合場景中凸顯:協調來自多個系統的客戶記錄、防止重複導入以及為專案分配穩定的 ID。
v4:隨機 — 來自 CSPRNG 的 122 位,訂購時的預設選擇並不重要
版本 4 是預設選擇。 v4 UUID 由來自加密安全隨機來源的 122 位元組成,其中六個位元設定為固定值(版本半位元組 4 和 RFC 9562 變體位元 10)。隨機性就是重點:每次呼叫都會產生不同的值,碰撞幾乎不可能發生,不需要外部狀態或協調。它是 ToolAcre 使用 crypto.randomUUID() 或 crypto.getRandomValues() 產生的版本。此版本適用於物件引用、非結構化資料以及主鍵或排序上下文之外的大多數角色。
v7 和 v8:Unix 時間和自訂 — 資料庫金鑰的現代時間排序版本和自訂佈局的逃生艙口
版本 7,在 RFC 9562 中標準化,將現代時間排序屬性引入 UUID 格式。它使用 48 位元 Unix 毫秒時間戳記、12 位元亞毫秒精度以及 62 隨機位元組合。 Unix 毫秒時間戳記在 10889 年之前有效,使其適合系統。結果按字典順序正確排序,並適合標準 128 位元 UUID 列,無需特殊處理或編碼轉換。如果您的應用程式需要依照標準 UUID 格式按建立時間排序的標識符,則 v7 是目前的最佳實務。版本 8 是實現定義格式的標準化包羅萬象,僅當您需要 v1-v7 未涵蓋的特定位元佈局時才有用。
工作範例 — 套用於三種情境的決策路徑:公用 API 參考、主鍵與匯入記錄的穩定 ID
三個現實情境說明了版本選擇:首先,公共 API 參考必須在 API 實例之間保持穩定,不得洩漏建立時間,並在伺服器重新啟動時必須相同,以便不同實例為相同檔案產生相同的參考。使用具有穩定命名空間和檔案名稱的 v5。其次,持續增長的表的主鍵需要是唯一的,不應導致索引碎片,並必須可由任何應用程式實例產生,無需中央協調。使用 v7 進行可排序標識符和標準 UUID 生態系統支援。第三,需要穩定尋找的歸檔記錄需要不可變的識別碼。
重點:按屬性選擇,而不是按習慣 - ToolAcre 產生器從瀏覽器的 CSPRNG 中為需要 v4 的情況產生隨機 UUID
版本選擇遵循您的模式設計和系統要求,而不是慣例或熟悉程度。隨機 UUID (v4) 是預設值,因為它們不需要狀態或協調,並產生適合大多數角色的獨立識別碼。時間排序版本(v6、v7)以時間資訊洩漏或時脈同步要求為代價解決了索引局部性問題。確定性版本(v3、v5)可防止重複導入並實現穩定的外部映射,但代價是可預測性 - 任何知道您的命名空間的人都可以重新計算它們。 ToolAcre 從瀏覽器的加密安全產生器產生隨機 v4 UUID。當您需要不同的版本時,格式正確的檢查會確認標識符解析是否有效。