Thẻ Căn cước công dân (CCCD) của Việt Nam mã hóa 12 chữ số theo một cấu trúc cố định — bao gồm mã thế kỷ sinh, giới tính, mã tỉnh và một dãy số ngẫu nhiên — và được một cơ quan trung ương cấp phát, đảm bảo không trùng lặp trên toàn quốc. UUID lại đi theo hướng ngược lại: không mã hóa bất kỳ thông tin nào về nguồn gốc, không cần cơ quan trung ương cấp phát, và có thể được tạo hoàn toàn độc lập trên bất kỳ máy nào, nhưng vẫn giữ được xác suất trùng lặp gần như bằng không.
Các phiên bản UUID
- v1 — dựa trên thời gian hiện tại và địa chỉ MAC của card mạng. Đảm bảo tính duy nhất, nhưng tiết lộ một phần thời điểm và thiết bị đã tạo ra định danh.
- v4 — hoàn toàn ngẫu nhiên (ngoại trừ vài bit dành riêng để đánh dấu phiên bản). Lựa chọn phổ biến nhất hiện nay chính vì nó không làm lộ thông tin phụ.
- v5 — có tính xác định, được tính như hash của một không gian tên và một chuỗi — cùng một đầu vào luôn cho cùng một UUID.
Vì sao xác suất trùng lặp gần như bằng không
Trong UUID v4, 122 bit là ngẫu nhiên. Ngay cả khi tạo hàng tỷ UUID mỗi giây trong nhiều thế kỷ, xác suất có ít nhất một lần trùng vẫn nhỏ đến mức thiên văn — đây là điều được chứng minh bằng toán học qua nghịch lý ngày sinh nhật cho một không gian có kích thước như vậy.
Vì sao cần điều này
- Tạo khóa chính cho cơ sở dữ liệu mà không cần bộ đếm trung tâm hay sự phối hợp giữa các máy chủ.
- Tạo định danh phiên làm việc, yêu cầu hoặc giao dịch trong hệ thống phân tán, mà không cần một cơ quan cấp phát trung tâm như với CCCD.
- Tránh các ID tuần tự dễ đoán, dễ liệt kê (khác với
1, 2, 3...).
UUID v7: sự cân bằng giữa tính ngẫu nhiên và khả năng sắp xếp
UUID v4 hoàn toàn ngẫu nhiên ảnh hưởng xấu đến hiệu năng chỉ mục cơ sở dữ liệu — các bản ghi mới được chèn vào các vị trí hỗn loạn trong cây chỉ mục thay vì ở cuối. UUID v7 mới hơn giải quyết vấn đề này bằng cách nhúng dấu thời gian vào các bit đầu của định danh: giá trị vẫn gần như duy nhất như v4, nhưng lại tự nhiên được sắp xếp theo thời gian tạo, giống như một bộ đếm tuần tự.