tomai
登入

UUID 解析:v1、v4、v7 的區別與各自適用場景

UUID 是 128-bit 標籤,寫成 32 個十六進位字元,分成 8、4、4、4、12 共五組,設計目標是讓任何人在任何地方都能獨立產生,無需向中央機構申請。它們用來在從不直接通訊的系統之間標識資料列、檔案、工作階段和 API key。

1. v1:時間加機器

v1 內嵌時間戳和節點標識,節點標識通常來自網路卡。ID 大致按建立時間排序,資料庫很喜歡這一點,但它們會洩露產生的時間和地點——這種隱私氣味讓多數新系統遠離了 v1。

2. v4:純隨機

v4 的 128 bit 裡有 122 bit 來自密碼學隨機源,固定 4 bit 標記版本。碰撞機率小到荒謬——每秒產生十億個 ID、連續產生一百年,出現一次重複的機率仍遠低於硬體故障率——但隨機性會打散資料庫索引,大表寫入會變慢。

3. v7:現代預設選擇

v7 把毫秒時間戳放在最前面,剩餘部分隨機填充,得到時間有序又不洩露機器身分的 ID。需要可排序、對索引友善的識別符的新專案,應該直接選 v7;our UUID generator 同時產生 v7 和經典 v4。

4. 什麼時候不用 UUID

面向使用者的短碼、發票號、需要手工輸入的任何東西,更適合計數器或緊湊編碼——UUID 又長又難念還容易抄錯。永遠不要把任何 UUID 當金鑰:它們只保證唯一,不保證不可猜,v1 和 v7 含有時間戳,v4 雖然隨機,卻經常躺在日誌裡或暴露在 URL 中。