🌐 ZH-TW

🆔 UUID 產生器

產生通用唯一識別碼(UUID)。可建立用於資料庫主鍵、API 權杖、工作階段 ID 等場景的標準 UUID。

版本資訊

v1(基於時間戳記)
基於 MAC 位址與時間戳記,保證時間順序。
v4(隨機)
完全隨機,最常用。
v7(可依時間戳記排序)
基於時間戳記可排序,最新標準。
指南

瞭解更多

01

1. 什麼是 UUID?

UUID(Universally Unique Identifier)即通用唯一識別碼,是一種無需中央協調即可保證唯一性的 128 位元識別碼。它以 8-4-4-4-12 格式的十六進位表示(例如:550e8400-e29b-41d4-a716-446655440000),在全球任何地方產生都極難重複。它被廣泛用於資料庫主鍵、工作階段 ID、檔案名稱、API 權杖等各種場景。UUID 也稱為 GUID(Globally Unique Identifier),由 RFC 4122 標準定義。

02

2. 各 UUID 版本的特點比較

UUID 共有 5 個版本,每個版本採用不同的產生方式。v1 將 MAC 位址與時間戳記結合以保證時間順序,但因暴露 MAC 位址而存在安全風險。v4 為完全隨機產生,使用最廣泛,不可預測性高。v7 是 2024 年標準化的最新版本,可基於時間戳記排序,有利於資料庫索引。v2 用於 DCE 安全,v3/v5 基於命名空間,用於特殊用途。

03

3. UUID 的使用場景

UUID 在多種場景下都很有用。在分散式系統中,無需中央伺服器即可產生唯一 ID,具有出色的可擴充性。在資料庫中,使用 UUID 作為主鍵而非自動遞增 ID,可以避免合併衝突。在微服務架構中,用於追蹤服務間的通訊。此外,還廣泛用於防止檔案上傳時的檔案名稱衝突、產生暫時性權杖、事件追蹤以及記錄關聯分析等。

04

4. v1、v4、v7 的選擇指南

UUID 版本的選擇取決於需求。如果時間順序很重要且可以接受暴露 MAC 位址,請選擇 v1。但 MAC 位址可用於追蹤產生位置,存在隱私問題。如果安全性重要且不需要排序,v4 是最佳選擇。它完全隨機、不可預測,且不會暴露個人資訊。如果同時需要時間排序和安全性,則建議使用 v7。基於時間戳記的排序可帶來良好的資料庫效能,並減少索引碎片。

05

5. UUID 唯一性的保證原理

UUID 的碰撞機率極低。以 v4 為例,122 位元是隨機的,因此有 2^122 = 5.3 x 10^36 種可能的組合。即使每秒產生 10 億個,要達到 50% 的碰撞機率也需要 85 年。v1 透過時間戳記(60 位元)和時脈序列(14 位元)保證基於時間的唯一性,並透過 MAC 位址(48 位元)保證基於空間的唯一性。v7 將 Unix 時間戳記(48 位元)和隨機數(74 位元)結合,同時滿足時間順序和唯一性。

06

6. 在資料庫中使用 UUID

將 UUID 用作資料庫主鍵有多項優勢。在分散式環境中,每個節點無需中央 ID 產生器即可獨立建立 ID,具有出色的可擴充性。資料合併時不會出現 ID 衝突,且在 URL 中暴露時也無法依序猜測,因而在安全性上更有優勢。不過也有缺點:UUID 為 16 位元組,比整數類型(4-8 位元組)更大,且 v4 的隨機性可能降低索引效能。這種情況下使用 v7,可依時間順序排序,從而提升 B-tree 索引的效能。