UUID v4 與 v7 完全指南
什麼是 UUID?
UUID(Universally Unique Identifier) 是一種 128 位元的識別碼,用於在分散式系統中唯一標識資訊。UUID 的格式為 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,共 36 個字元。
UUID v4:隨機生成
UUID v4 是最常用的版本,完全由隨機數生成。
範例:550e8400-e29b-41d4-a716-446655440000
範例:550e8400-e29b-41d4-a716-446655440000
優點
- 實作簡單,只需要隨機數生成器
- 碰撞機率極低(約 2^122 種可能)
- 不包含任何可追蹤的資訊
缺點
- 完全隨機,無法排序
- 作為資料庫主鍵時,會導致 B-tree 索引碎片化
- 插入效能較差(隨機寫入)
UUID v7:時間排序
UUID v7 是較新的版本(RFC 9562),結合了時間戳和隨機數。
範例:018e4f8c-5a00-7000-8000-000000000001
範例:018e4f8c-5a00-7000-8000-000000000001
結構
- 前 48 位元:Unix 毫秒時間戳
- 4 位元:版本號(7)
- 12 位元:隨機數
- 2 位元:變體
- 62 位元:隨機數
優點
- 時間排序:自然按照建立時間排列
- 資料庫友好:順序寫入,B-tree 索引效能好
- 包含時間資訊:可以從 UUID 提取建立時間
- 仍然保持唯一性
缺點
- 包含時間資訊,可能有隱私考量
- 需要較新的函式庫支援
v4 vs v7 比較
| 特性 | UUID v4 | UUID v7 |
|---|---|---|
| 排序性 | 隨機 | 時間排序 |
| 資料庫效能 | 較差 | 優秀 |
| 隱私性 | 較好 | 包含時間資訊 |
| 實作複雜度 | 簡單 | 稍複雜 |
| 碰撞機率 | 極低 | 極低 |
| 適用場景 | 一般用途 | 資料庫主鍵 |
何時使用哪個版本?
使用 UUID v4
- 不需要排序的場景
- 隱私性要求高(不想暴露時間資訊)
- 舊系統相容性需求
- 簡單的唯一識別碼需求
使用 UUID v7
- 資料庫主鍵(強烈推薦)
- 需要按時間排序的場景
- 分散式系統中的事件排序
- 新專案的預設選擇
在各語言中使用
JavaScript/TypeScript
javascript
// UUID v4
crypto.randomUUID(); // 原生支援
// UUID v7(需要函式庫)
import { v7 as uuidv7 } from 'uuid';
const id = uuidv7();
// UUID v4
crypto.randomUUID(); // 原生支援
// UUID v7(需要函式庫)
import { v7 as uuidv7 } from 'uuid';
const id = uuidv7();
Python
python
import uuid
# UUID v4
uuid.uuid4()
# UUID v7(Python 3.12+)
uuid.uuid7()
import uuid
# UUID v4
uuid.uuid4()
# UUID v7(Python 3.12+)
uuid.uuid7()
實用工具推薦
使用我們的 UUID 產生器 [blocked] 可以快速生成 UUID v4 和 v7,支援批量產生和多種格式輸出。



