🌐 VI

🆔 Trình tạo UUID

Tạo Universally Unique Identifiers (UUID). Tạo UUID chuẩn cho khóa cơ sở dữ liệu, mã token API, ID phiên và hơn thế nữa.

Thông tin phiên bản

v1 (Dựa trên dấu thời gian)
Dựa trên địa chỉ MAC và dấu thời gian. Có thứ tự theo thời gian.
v4 (Ngẫu nhiên)
Hoàn toàn ngẫu nhiên. Được dùng phổ biến nhất.
v7 (Sắp xếp theo dấu thời gian)
Có thể sắp xếp dựa trên dấu thời gian. Tiêu chuẩn mới nhất.
HƯỚNG DẪN

Tìm hiểu thêm

01

1. UUID là gì?

UUID (Universally Unique Identifier) là mã định danh 128-bit bảo đảm tính duy nhất mà không cần điều phối tập trung. Được biểu diễn dưới dạng thập lục phân theo định dạng 8-4-4-4-12 (ví dụ: 550e8400-e29b-41d4-a716-446655440000), xác suất trùng lặp là cực kỳ thấp khi được tạo ở bất kỳ đâu trên thế giới. UUID được dùng cho khóa chính cơ sở dữ liệu, ID phiên, tên tệp, mã token API và hơn thế nữa. Còn được gọi là GUID (Globally Unique Identifier), theo tiêu chuẩn RFC 4122.

02

2. So sánh các phiên bản UUID

Có 5 phiên bản UUID, mỗi phiên bản dùng cách tạo khác nhau. v1 kết hợp địa chỉ MAC và dấu thời gian để bảo đảm thứ tự theo thời gian nhưng có rủi ro bảo mật do lộ địa chỉ MAC. v4 hoàn toàn ngẫu nhiên, được dùng rộng rãi nhất vì khó đoán. v7 là phiên bản mới nhất được chuẩn hóa vào năm 2024, có thể sắp xếp theo dấu thời gian và rất hữu ích cho lập chỉ mục cơ sở dữ liệu. v2 dành cho bảo mật DCE, còn v3/v5 dựa trên namespace cho các mục đích đặc biệt.

03

3. Trường hợp sử dụng UUID

UUID hữu ích trong nhiều tình huống. Trong hệ thống phân tán, có thể tạo ID duy nhất mà không cần máy chủ trung tâm, giúp mở rộng rất tốt. Trong cơ sở dữ liệu, dùng UUID làm khóa chính thay vì ID tự tăng giúp tránh xung đột khi gộp dữ liệu. Trong kiến trúc microservice, UUID được dùng để theo dõi giao tiếp giữa các dịch vụ. UUID cũng được dùng rộng rãi để tránh trùng tên tệp khi tải tệp lên, tạo mã token tạm thời, theo dõi sự kiện và phân tích tương quan log.

04

4. Chọn v1, v4 hay v7

Việc chọn phiên bản UUID phụ thuộc vào yêu cầu. Chọn v1 nếu thứ tự theo thời gian quan trọng và có thể chấp nhận việc lộ địa chỉ MAC. Tuy nhiên, địa chỉ MAC có thể cho biết vị trí tạo UUID, gây lo ngại về quyền riêng tư. v4 là lựa chọn tốt nhất nếu bảo mật quan trọng và không cần thứ tự. Hoàn toàn ngẫu nhiên, khó đoán và không làm lộ thông tin cá nhân. v7 được khuyến nghị nếu bạn muốn vừa sắp xếp theo thời gian vừa đảm bảo bảo mật. Việc sắp xếp theo dấu thời gian mang lại hiệu năng cơ sở dữ liệu tốt và ít phân mảnh chỉ mục hơn.

05

5. Cam kết tính duy nhất của UUID

Xác suất va chạm của UUID là cực kỳ thấp. Với v4, có 122 bit ngẫu nhiên, cho ra 2^122 = 5.3 x 10^36 tổ hợp khả dĩ. Ngay cả khi tạo 1 billion mỗi giây, cũng phải mất 85 năm mới đạt xác suất va chạm 50%. v1 bảo đảm tính duy nhất theo thời gian với dấu thời gian (60 bit) và số thứ tự đồng hồ (14 bit), đồng thời bảo đảm tính duy nhất theo không gian với địa chỉ MAC (48 bit). v7 kết hợp Unix timestamp (48 bit) và ngẫu nhiên (74 bit) để đáp ứng cả thứ tự theo thời gian lẫn tính duy nhất.

06

6. Dùng UUID trong cơ sở dữ liệu

Dùng UUID làm khóa chính cơ sở dữ liệu có nhiều lợi ích. Trong môi trường phân tán, mỗi nút có thể tự tạo ID mà không cần bộ tạo ID trung tâm, giúp khả năng mở rộng rất tốt. Không có xung đột ID khi gộp dữ liệu, và nếu hiển thị trong URL thì cũng không thể đoán tuần tự, mang lại lợi thế bảo mật. Tuy nhiên, cũng có nhược điểm. Với 16 byte, UUID lớn hơn số nguyên (4-8 byte), và tính ngẫu nhiên của v4 có thể làm giảm hiệu năng chỉ mục. Trong trường hợp đó, dùng v7 với sắp xếp theo thứ tự thời gian sẽ cải thiện hiệu năng chỉ mục B-tree.

Câu hỏi thường gặp

Tôi nên chọn UUID v1, v4 hay v7?
Chọn v4 nếu bảo mật quan trọng và không cần sắp xếp, hoặc v7 nếu bạn muốn sắp xếp theo thời gian và hiệu năng chỉ mục cơ sở dữ liệu tốt hơn. v1 tiết lộ địa chỉ MAC nên gây lo ngại về quyền riêng tư, vì vậy không được khuyến nghị trừ khi bạn có nhu cầu cụ thể.
UUID có thể bị trùng không?
Với v4, có 2^122 tổ hợp khả dĩ - ngay cả khi tạo 1 billion mỗi giây, cũng phải mất 85 năm mới đạt xác suất trùng 50%. Trên thực tế, việc trùng lặp không phải là mối lo đáng kể.
Tôi có thể tạo nhiều UUID cùng lúc không?
Có, bạn có thể chỉ định số lượng và tạo tối đa 100 UUID cùng lúc, rồi dùng "Sao chép tất cả" để lấy chúng cùng một lúc.
Tôi có thể dùng UUID làm khóa chính cơ sở dữ liệu không?
Có. Cách này cho phép hệ thống phân tán tạo ID duy nhất mà không cần điều phối trung tâm, nhưng tính ngẫu nhiên của v4 có thể gây phân mảnh chỉ mục - hãy dùng v7 nếu bạn cần sắp xếp theo thời gian.
UUID và GUID có phải là cùng một thứ không?
Có, GUID (Globally Unique Identifier) là tên gọi của Microsoft cho cùng một khái niệm, và cả hai đều tuân theo tiêu chuẩn RFC 4122.