Hình ảnh: Stokkete / Shutterstock.com
UUID (Số nhận dạng duy nhất phổ biến) là một dạng số nhận dạng cụ thể, được coi là duy nhất một cách an toàn cho hầu hết các mục đích thực tế. Hai UUID được tạo chính xác có khả năng giống hệt nhau gần như không đáng kể, ngay cả khi chúng được tạo bởi các bên khác nhau trong hai môi trường khác nhau. Điều này làm cho UUID trở thành một giải pháp phổ quát và độc nhất.
Chính xác thì UUID là gì?
UUID đơn giản là một giá trị duy nhất mà bạn có thể coi là an toàn. Mặc dù có thể có rủi ro va chạm, nhưng nó rất thấp, vì vậy bạn có thể bỏ qua nó một cách hợp lý. Các thuật ngữ khác nhau như GUID (Số nhận dạng duy nhất trên toàn cầu, ưa thích bởi Microsoft) được sử dụng để đề cập đến các UUID, nhưng ý nghĩa và tác dụng vẫn giống nhau.
UUID là một số nhận dạng duy nhất được tạo và hiển thị theo định dạng chuẩn hóa. RFC 4122 xác định các thuật toán có thể được sử dụng để tạo UUID duy nhất cho tất cả các triển khai mà không cần cơ quan cấp trung ương.
RFC mô tả năm phiên bản khác nhau của UUID, mỗi phiên bản sử dụng một cơ chế khác nhau để tạo giá trị. Dưới đây là một tóm tắt nhanh về các phiên bản này:
Phiên bản 1 – Dựa trên thời gian
Phiên bản này sử dụng một dấu thời gian, một chuỗi đồng hồ và một giá trị cụ thể cho thiết bị tạo để tạo ra một đầu ra duy nhất cho máy chủ lưu trữ tại thời điểm đó.
Phiên bản 2 – Bảo mật DCE
Phiên bản này được phát triển như một sự cải tiến của phiên bản 1 để sử dụng với Môi trường Máy tính Phân tán (DCE). Tuy nhiên, phiên bản này không được sử dụng rộng rãi.
Phiên bản 3 – Dựa trên tên (MD5)
Phiên bản này sử dụng MD5 để băm “không gian tên” và “tên” để tạo ra một giá trị duy nhất cho tên đó trong không gian tên. Việc tạo một UUID khác có cùng không gian tên và tên sẽ tạo ra kết quả giống nhau.
Phiên bản 4 – Ngẫu nhiên
Phiên bản này được sử dụng phổ biến nhất trên các hệ thống hiện đại. Nó sử dụng nguồn số ngẫu nhiên hoặc giả ngẫu nhiên của máy chủ để tạo ra các giá trị. Xác suất tạo ra cùng một UUID hai lần gần như không đáng kể.
Phiên bản 5 – Dựa trên tên (SHA-1)
Phiên bản này tương tự như phiên bản 3, nhưng sử dụng thuật toán băm SHA-1 mạnh hơn để băm không gian tên và tên đã nhập.
Mặc dù RFC đề cập đến các phiên bản này, việc chọn phiên bản phù hợp phụ thuộc vào tình huống sử dụng của bạn. Trong nhiều trường hợp, phiên bản 4 được chọn vì tính ngẫu nhiên của nó, làm cho nó trở thành ứng cử viên lý tưởng cho các tình huống đơn giản “cung cấp cho tôi một số nhận dạng mới”.
UUID có thể được biểu diễn dưới dạng số nguyên không dấu 128 bit. Tuy nhiên, thường coi UUID là chuỗi thập lục phân hoặc chuỗi nhị phân 16 ký tự. Dưới đây là một ví dụ về chuỗi UUID:
16763be4-6022-406e-a950-fcd5018633ca
Giá trị này được hiển thị dưới dạng năm nhóm ký tự chữ và số, được phân tách bằng dấu gạch ngang. Dấu gạch ngang không phải là một phần bắt buộc của chuỗi, nhưng chúng giúp mắt người nhận dạng dễ dàng hơn.
Các tình huống sử dụng UUID
Trường hợp sử dụng chính cho UUID là việc tạo ra các số nhận dạng duy nhất có cấp bậc. Bạn có thể tạo UUID ở bất kỳ đâu và coi nó là duy nhất một cách an toàn, cho dù nó đến từ mã phụ trợ, thiết bị khách hoặc công cụ cơ sở dữ liệu của bạn.
UUID giúp đơn giản hóa việc xác định và bảo trì danh tính đối tượng trong các môi trường bị ngắt kết nối. Trước đây, hầu hết các ứng dụng đều sử dụng trường số nguyên tự động tăng làm khóa chính. Khi bạn tạo một đối tượng mới, bạn không thể biết ID của nó cho đến khi sau đó nó đã được đưa vào cơ sở dữ liệu. UUID cho phép bạn xác định danh tính sớm hơn nhiều trong ứng dụng của mình.
Ví dụ, trong việc viết blog, UUID giúp đảm bảo rằng các bài đăng mới chỉ được gán ID sau khi được đăng. Điều này giúp tránh tình trạng các bản nháp bị nhận dạng sai trong hệ thống.
UUID cũng hỗ trợ sao chép dữ liệu bằng cách đảm bảo tính duy nhất bất kể lưu trữ dữ liệu, thiết bị hoặc môi trường, không giống như các khóa số nguyên truyền thống hoạt động ở cấp bảng. Điều này giúp bạn kết hợp dữ liệu từ các nguồn khác nhau một cách dễ dàng.
Cảnh báo khi sử dụng UUID với cơ sở dữ liệu
Mặc dù UUID mang lại nhiều lợi ích hấp dẫn, nhưng cũng có một số vấn đề cần lưu ý khi sử dụng chúng trong các hệ thống thực tế. So với khóa số nguyên, UUID có kích thước lớn hơn (36 byte so với 4 byte), điều này có thể gây ảnh hưởng đến hiệu suất với các tập dữ liệu lớn. Ngoài ra, việc sắp xếp và lập chỉ mục các giá trị UUID cũng khó khăn hơn nhiều, đặc biệt khi sử dụng các UUID ngẫu nhiên phổ biến nhất. Vì tính ngẫu nhiên của chúng, các giá trị UUID không có trật tự tự nhiên, điều này ảnh hưởng đến hiệu suất lập chỉ mục.
Điều này có thể trở nên nghiêm trọng hơn trong các cơ sở dữ liệu chuẩn hóa tốt sử dụng nhiều khóa ngoại. Việc lưu trữ và truy xuất các UUID có thể tốn nhiều tài nguyên bổ sung và ảnh hưởng đến hiệu suất hệ thống.
Tuy nhiên, có một số chiến lược giúp giảm thiểu các vấn đề này. Bạn có thể lưu trữ các UUID dưới dạng dữ liệu nhị phân thay vì chuỗi. Điều này giúp tiết kiệm tài nguyên lưu trữ và tối ưu hóa hiệu suất. Ngoài ra, bạn cũng có thể giữ các số nguyên làm khóa chính, nhưng thêm một trường UUID bổ sung để tham khảo trong ứng dụng của bạn. Điều này giúp cải thiện hiệu suất trong việc lập chỉ mục và liên kết giữa các bảng.
Tóm lại, UUID là các giá trị duy nhất mà bạn có thể sử dụng an toàn để tạo danh tính phi tập trung. Chúng đơn giản hóa việc xác định, bảo trì và sao chép dữ liệu trong các môi trường phân tán. Tuy nhiên, bạn cần lưu ý các vấn đề liên quan đến kích thước và hiệu suất khi sử dụng UUID với cơ sở dữ liệu của mình.
Được chỉnh sửa bởi dnulib.edu.vn