三條資料庫寫入跑道 · 識別碼也要選型
你選擇的不只格式,還有寫入順序與時間洩漏。
UUID v4 使用隨機位元;UUID v5 由 namespace UUID 與 name 經 SHA-1 確定性映射;UUID v7 與 ULID 則帶有毫秒時間。它們都只是識別碼,不是金鑰;系統仍須以唯一性 constraint、碰撞重試及正確欄位格式守住資料模型。
UUID v4
隨機 · 分散
UUID v7
時間 · 分桶
ULID
字典序 · 對齊
識別碼護照
Bit 結構切換台
UUID v4 · 128 bits
UUID v7 · 128 bits
ULID · 128 bits
排序競速
依時間排序,不代表全域連續遞增。
格式與建立時間無關
隨機落入索引空間
依毫秒時間前綴大致呈時間順序
此函式庫只在目前 Worker 的程序內維持同毫秒 sequence;跨程序不共享狀態
規範文字依時間前綴作字典序排序
本站呼叫一般 ulid(),同一毫秒內不保證依呼叫順序單調遞增
儲存決策矩陣
時間戳記隱私窗口
可以排序的 ID,也會暴露建立時間。
UUID v7 與 ULID 都揭露毫秒時間戳記,有助於維運及索引局部性,也可能洩漏物件建立時間與大致活動節奏。UUID v4 與 v5 沒有定義建立時間欄位;任何一種 ID 都不應拿來取代授權金鑰。
碰撞表述約定
極低機率,不等於保證唯一。
健康的密碼學亂數讓 v4、v7 與 ULID 的意外碰撞在一般規模下極不可能;v5 則會讓相同 namespace 與 name 得到同一 UUID。凡是身分資料都應設定唯一性 constraint、處理衝突重試,並監控時鐘與產生器品質。
正規化規則
檢查時可接受 URN 前綴或最外層大括號
小寫、含連字號的規範格式
同一組 namespace + name 得到同一結果;沒有隨機或時間欄位
函式庫接受不分大小寫的 Crockford Base32 文字
26 個大寫規範字元;不轉換成 UUID