UUID thực sự là gì
UUID, viết tắt của Universally Unique Identifier — Mã định danh duy nhất toàn cầu, là một giá trị 128-bit được dùng để gán nhãn cho một thứ gì đó mà không cần xin phép ai. Bạn cũng có thể thấy nó được gọi là GUID, hay Globally Unique Identifier — đây đơn giản là tên Microsoft đặt cho cùng khái niệm đó trong Windows và thế giới .NET. Hai thuật ngữ này mô tả cùng một số 128-bit trong hầu hết các trường hợp quan trọng, vì vậy khi đồng nghiệp nói GUID và bạn nói UUID, bạn hầu như luôn nói về cùng một thứ.
128 bit đó thường được viết dưới dạng 32 chữ số thập lục phân được chia thành năm nhóm bằng dấu gạch ngang, theo mô hình 8-4-4-4-12. Một giá trị điển hình trông như 123e4567-e89b-12d3-a456-426614174000. Các dấu gạch ngang không mang ý nghĩa riêng; chúng tồn tại chỉ để con người có thể đọc giá trị mà không bị lạc chỗ. Mỗi ký tự là một chữ số hex từ 0 đến f, đó là lý do tại sao UUID trông dày đặc hơn một con số thông thường mặc dù về bản chất, nó chỉ là một số nguyên rất lớn.

Các phiên bản, và tại sao v4 thống trị
Tiêu chuẩn định nghĩa một số phiên bản, và chúng khác nhau ở cách điền các bit. Phiên bản 1 dựa trên thời gian: nó kết hợp dấu thời gian hiện tại và địa chỉ MAC mạng của máy. Điều đó làm cho các giá trị v1 có thể sắp xếp theo thời gian tạo, nhưng cũng làm lộ thông tin về nơi và khoảng thời gian chúng được tạo ra — điều này không phải lúc nào cũng được chào đón. Phiên bản 3 và 5 dựa trên tên, băm một namespace cộng với một tên để cùng một đầu vào luôn cho ra cùng một mã định danh.
Phiên bản 4 đi theo hướng hoàn toàn khác. Nó gần như hoàn toàn ngẫu nhiên. Trong 128 bit, sáu bit được dành để đánh dấu phiên bản và biến thể, để lại 122 bit được điền bằng dữ liệu ngẫu nhiên. Không có dấu thời gian, không có địa chỉ MAC, không có namespace, chỉ là nhiễu ngẫu nhiên. Đó chính xác là lý do tại sao hầu hết các công cụ tạo, bao gồm cả công cụ này, tạo v4 theo mặc định. Nó không tiết lộ gì về thiết bị hay thời điểm tạo, và không cần phối hợp giữa các bên tạo ra nó. Công cụ trên trang này chạy hoàn toàn trong trình duyệt của bạn, vì vậy các giá trị ngẫu nhiên không bao giờ rời khỏi máy của bạn.
Khả năng trùng lặp thực sự thấp đến mức nào
Lo lắng hợp lý là hai UUID ngẫu nhiên có thể một ngày nào đó giống hệt nhau. Với 122 bit ngẫu nhiên, không gian các giá trị v4 có thể là 2 lũy thừa 122, tức là khoảng 5,3 theo sau 36 chữ số không. Để đặt điều đó trong ngôn ngữ con người, bạn cần tạo hàng tỷ UUID mỗi giây trong nhiều thập kỷ trước khi xác suất của một bản trùng lặp tăng lên mức đo được. Bản thân tiêu chuẩn mô tả khả năng va chạm là gần bằng không đến mức không đáng kể. Trong thực tế, các nhóm coi v4 là duy nhất và tiến hành, và họ có lý.

Lập trình viên sử dụng chúng ở đâu
Vì tính duy nhất không cần cơ quan trung ương, UUID tỏa sáng ở những nơi mà sự phối hợp tốn kém hoặc không thể. Chúng phù hợp tự nhiên với khóa chính cơ sở dữ liệu, đặc biệt khi nhiều dịch vụ cùng chèn hàng và bạn không thể dừng lại để hỏi bộ đếm chung cho số tiếp theo. Trong các hệ thống phân tán, hai node ở hai đầu đối diện của trái đất có thể cùng lúc tạo ra các mã định danh mà không bao giờ va chạm. Chúng cũng cung cấp năng lượng cho các khóa idempotency API, nơi client gắn UUID vào request để server có thể bỏ qua an toàn một bản sao nếu mạng thử lại. Mã phiên, tên tệp, ID sự kiện và khóa tin nhắn đều dựa vào cùng thuộc tính đó.
UUID so với ID tự tăng
Lựa chọn thay thế cổ điển là số nguyên tự tăng: 1, 2, 3, và cứ thế. ID tuần tự gọn nhẹ, sắp xếp tự nhiên và dễ đọc, nhưng chúng có nhược điểm thực sự. Chúng tiết lộ có bao nhiêu bản ghi và cho phép người ngoài đoán các giá trị lân cận, và chúng buộc mọi thao tác chèn qua một bộ đếm duy nhất — điều này trở thành nút thắt cổ chai khi bạn phân mảnh cơ sở dữ liệu hoặc hợp nhất dữ liệu từ nhiều nguồn. UUID giải quyết những vấn đề đó bằng cách cho phép bất kỳ bên nào tạo khóa độc lập và không tiết lộ gì về khối lượng hay thứ tự. Sự đánh đổi là kích thước và ít cục bộ hơn trong các chỉ mục. Đối với các hệ thống mở rộng quy mô hoặc cần che giấu nội bộ, sự đánh đổi đó thường xứng đáng. Bạn có thể khám phá điều này và các tiện ích tương tự qua bộ sưu tập tất cả công cụ tạo của chúng tôi, hoặc duyệt bộ công cụ dành cho lập trình viên rộng hơn để tìm các khối xây dựng liên quan.
Câu hỏi thường gặp
GUID có giống UUID không?
Về mục đích hằng ngày, có. GUID là tên của Microsoft cho cùng mã định danh 128-bit đó. Sự khác biệt duy nhất thực sự là thứ tự byte trong dạng nhị phân thô trên một số hệ thống Windows; ở dạng chuỗi chúng giống hệt nhau và có thể hoán đổi cho nhau.
Công cụ này tạo phiên bản UUID nào?
Nó tạo phiên bản 4, biến thể ngẫu nhiên. Trong 128 bit của nó, 122 bit được điền bằng dữ liệu ngẫu nhiên, điều này làm cho mỗi giá trị cực kỳ khó lặp lại và không mang dấu thời gian hay thông tin thiết bị.
Hai UUID có thể giống nhau không?
Về lý thuyết xác suất không hoàn toàn bằng không, nhưng với khoảng 5,3 nhân 10 lũy thừa 36 giá trị v4 có thể, nó nhỏ đến mức được coi là không đáng kể. Bạn phải tạo số lượng thiên văn học UUID trước khi một va chạm có thể xảy ra.
Tại sao dùng UUID thay vì số tự tăng?
UUID có thể được tạo độc lập bởi bất kỳ dịch vụ nào mà không cần bộ đếm chung, chúng không tiết lộ số lượng bản ghi hay thứ tự, và chúng làm cho việc hợp nhất dữ liệu từ nhiều nguồn dễ dàng. ID tự tăng nhỏ hơn nhưng trở thành nút thắt cổ chai và rò rỉ thông tin ở quy mô lớn.
UUID có được tạo trên máy chủ không?
Không. Công cụ này chạy hoàn toàn trong trình duyệt của bạn, vì vậy các giá trị ngẫu nhiên được tạo ra cục bộ và không bao giờ được gửi đi đâu. Điều đó làm cho nó an toàn để sử dụng cho các khóa và mã thông báo bạn dự định giữ riêng tư.
Mô hình dấu gạch ngang có nghĩa gì?
Cách nhóm 8-4-4-4-12 chỉ là quy ước dễ đọc. Các dấu gạch ngang không mang dữ liệu; chúng chia 32 chữ số hex thành các khối để mọi người có thể xem và so sánh các giá trị dễ dàng hơn.
