UUID v4 與 v7 完全指南:如何選擇正確的 UUID 版本

深入比較 UUID v4 和 v7 的差異、優缺點和適用場景。了解為什麼 UUID v7 正在成為新的標準,以及何時該使用哪個版本。

本文介紹的工具:UUID 產生器

什麼是 UUID?

UUID(Universally Unique Identifier) 是一種 128 位元的識別碼,用於在分散式系統中唯一標識資訊。UUID 的格式為 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,共 36 個字元。

UUID v4:隨機生成

UUID v4 是最常用的版本,完全由隨機數生成。

範例:550e8400-e29b-41d4-a716-446655440000

優點

  • 實作簡單,只需要隨機數生成器
  • 碰撞機率極低(約 2^122 種可能)
  • 不包含任何可追蹤的資訊

缺點

  • 完全隨機,無法排序
  • 作為資料庫主鍵時,會導致 B-tree 索引碎片化
  • 插入效能較差(隨機寫入)

UUID v7:時間排序

UUID v7 是較新的版本(RFC 9562),結合了時間戳和隨機數。

範例: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

// UUID v4
crypto.randomUUID(); // 原生支援

// UUID v7(需要函式庫)
import { v7 as uuidv7 } from 'uuid';
const id = uuidv7();

Python

import uuid
# UUID v4
uuid.uuid4()
# UUID v7(Python 3.12+)
uuid.uuid7()

實用工具推薦

使用我們的 UUID 產生器 可以快速生成 UUID v4 和 v7,支援批量產生和多種格式輸出。