什麼是 UUID
UUID(Universally Unique Identifier,通用唯一識別碼)由 Open Software Foundation 在 RFC 4122 中定義,共 128 位,通常以十六進位制 8-4-4-4-12 形式呈現為 32 字元。UUID v1 基於時間戳,v4 基於強隨機數,實踐中 v4 是最常用的版本。
UUID v4 的隨機性
UUID v4 用 122 bit 的強隨機數填充後半段,前 6 位固定為版本與變體標識。結果形如:
550e8400-e29b-41d4-a716-446655440000
理論上每秒生成 10 億個 UUID,要等到第 82 年才有 50% 機率出現一次重複——這已被數學證明。
什麼是 Nano ID
Nano ID 是 Andrey Sitnik 在 2017 年建立的輕量級唯一 ID 字串庫,體積僅 130 位元組(壓縮後),比 UUID v4 短 4 倍。字元集預設使用 URL 安全字母表 A-Za-z0-9_-。
使用建議
- 資料庫主鍵:uuid 或 text 欄位都可以,推薦使用 BINARY(16) 節省空間。
- 分散式追蹤:UUID v4 更通用,OpenTelemetry 預設採用。
- API Token / 短鏈:Nano ID 更短,但建議再疊加簽名校驗。
- 檔名:Nano ID 在 URL 中可直接使用。
效能對比
每秒生成效率:UUID v4 ≈ 130 萬,Nano ID ≈ 180 萬。在批次生成(>1000)場景下,Nano ID 略快。
現在試著點一下「生成」按鈕,體驗幾毫秒內獲得 100 個唯一 ID 的感覺。
UUID v7 — 時間有序
UUID v7 由 RFC 9562(2024)定義。它把 48 位 Unix 毫秒時間戳放在前 6 字節,其餘為隨機位。因為 ID 按時間順序生成、天然有序,非常適合做資料庫主鍵的 B-tree 索引——新行落在索引「尾部」而非零散分佈,避免了 v4 的「熱頁」問題。本工具在同一毫秒內用單調計數器保證批次輸出嚴格遞增。各大生態已原生支援:PostgreSQL 18 的 uuidv7()、Python 3.13 的 uuid.uuid7()、Go google/uuid 的 NewV7()、Node uuid v10。