UUID là gì? Khi nào nên sử dụng UUID?
Tháng 6, 2026 · 8 phút đọc
Nếu bạn là developer, chắc chắn bạn đã từng gặp UUID trong các dự án. UUID (Universally Unique Identifier) là một trong những công cụ quan trọng nhất trong lập trình hiện đại. Bài viết này sẽ giải thích UUID là gì, các phiên bản UUID, và khi nào nên sử dụng UUID trong dự án của bạn.
UUID là gì?
UUID (Universally Unique Identifier) là định danh 128-bit được tạo ngẫu nhiên, đảm bảo tính duy nhất toàn cầu. UUID được định nghĩa trong tiêu chuẩn RFC 4122 và được sử dụng rộng rãi trong phần mềm.
Một UUID trông như thế này:
550e8400-e29b-41d4-a716-446655440000
UUID có định dạng 8-4-4-4-12 (32 ký tự hex và 4 dấu gạch ngang, tổng cộng 36 ký tự).
Các phiên bản UUID
UUID v1 (Time-based)
UUID v1 được tạo dựa trên thời gian và địa chỉ MAC của máy tính.
- Đặc điểm: Có thể sắp xếp được theo thời gian
- Ưu điểm: Dễ debug vì chứa thông tin thời gian
- Nhược điểm: Tiết lộ địa chỉ MAC và thời gian tạo
- Ứng dụng: Khi cần sắp xếp theo thời gian và không lo bảo mật
UUID v4 (Random)
UUID v4 được tạo hoàn toàn ngẫu nhiên, là phiên bản phổ biến nhất.
- Đặc điểm: Hoàn toàn ngẫu nhiên
- Ưu điểm: Bảo mật cao, không tiết lộ thông tin
- Nhược điểm: Không thể sắp xếp theo thời gian
- Ứng dụng: Phổ biến nhất, phù hợp hầu hết trường hợp
UUID v5 (Name-based, SHA-1)
UUID v5 được tạo từ tên và namespace sử dụng SHA-1.
- Đặc điểm: Cùng tên + namespace luôn cho ra cùng UUID
- Ưu điểm: Deterministic - có thể tái tạo
- Nhược điểm: Phụ thuộc vào SHA-1 (đang被淘汰)
- Ứng dụng: Khi cần UUID có thể tái tạo từ cùng dữ liệu
Bảng so sánh các phiên bản UUID
| Phiên bản | Dựa trên | Sắp xếp | Bảo mật | Phổ biến |
|---|---|---|---|---|
| v1 | Thời gian + MAC | Có | Thấp | Trung bình |
| v4 | Ngẫu nhiên | Không | Cao | Cao nhất |
| v5 | Name + SHA-1 | Không | Cao | Thấp |
Khi nào nên sử dụng UUID?
Nên dùng UUID khi:
- Hệ thống phân tán: Nhiều database cần tạo ID độc lập mà không cần trung tâm quản lý.
- API công khai: UUID an toàn hơn khi暴露 ra ngoài vì không tiết lộ số lượng bản ghi.
- Hợp nhất dữ liệu: Khi merge dữ liệu từ nhiều nguồn, UUID tránh trùng ID.
- Microservices: Mỗi service tạo ID độc lập mà không cần coordination.
- Bảo mật: Không thể đoán ID tiếp theo (so với auto-increment).
Không nên dùng UUID khi:
- Index chính của database: UUID 128-bit chiếm nhiều không gian hơn integer 64-bit.
- Cần sắp xếp theo thời gian: UUID v4 không thể sắp xếp được.
- Hiệu suất truy vấn cao: UUID làm chậm index và join trong database.
- URL thân thiện: UUID dài và khó đọc trong URL.
Sử dụng UUID trong các ngôn ngữ
JavaScript / Node.js
Sử dụng thư viện uuid:
const { v4: uuidv4 } = require('uuid');
const id = uuidv4();
// "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d"
Python
Sử dụng module uuid tích hợp:
import uuid
id = uuid.uuid4()
# UUID('9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d')
Java
Sử dụng class UUID tích hợp:
UUID id = UUID.randomUUID();
// 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d
SQL
Tạo UUID trong các database:
-- PostgreSQL
SELECT gen_random_uuid();
-- MySQL
SELECT UUID();
Tạo UUID bằng ToolHub
Công cụ UUID Generator của ToolHub cho phép bạn tạo UUID nhanh chóng:
- Truy cập ToolHub UUID Generator
- Chọn phiên bản UUID (v1, v4, v5)
- Nhập số lượng UUID cần tạo
- Nhấn "Tạo UUID"
- Copy kết quả (hỗ trợ nhiều định dạng: lowercase, uppercase, no-dash)
Lưu ý khi sử dụng UUID
- Chọn đúng phiên bản: UUID v4 phù hợp hầu hết trường hợp. Chỉ dùng v1 khi cần sắp xếp theo thời gian.
- Lưu trữ hiệu quả: Lưu UUID dưới dạng BINARY(16) thay vì VARCHAR(36) để tiết kiệm không gian.
- Index đúng cách: Sử dụng clustered index cho UUID không hiệu quả, nên dùng non-clustered index.
- Không dùng làm secret: UUID không phải là secret, không nên dùng làm token bảo mật.
Câu hỏi thường gặp
UUID có trùng nhau không?
Xác suất hai UUID v4 trùng nhau là cực kỳ thấp (khoảng 1 trên 2^122). Về mặt thực tế, UUID được coi là duy nhất toàn cầu.
UUID dài bao nhiêu?
UUID có 128 bit, thường được biểu diễn dưới dạng 32 ký tự hex và 4 dấu gạch ngang (tổng 36 ký tự).
Nên dùng UUID hay auto-increment?
UUID phù hợp khi cần ID duy nhất trên nhiều hệ thống phân tán. Auto-increment phù hợp khi chỉ dùng trong một database duy nhất và cần hiệu suất cao.
Có thể dùng UUID làm primary key không?
Có, nhưng cần lưu ý về hiệu suất. Sử dụng UUID v7 (sắp xếp được theo thời gian) hoặc lưu dưới dạng BINARY(16) để tối ưu.
Cần tạo UUID ngay? Thử ngay công cụ UUID Generator miễn phí của ToolHub!