Sự Phát Triển Của UUID: Hiểu Rõ Phiên Bản 1, 6 và 7
Mã định danh duy nhất toàn cầu (UUID) đã là nền tảng của các hệ thống phân tán trong nhiều thập kỷ, cung cấp một phương pháp tin cậy để tạo các khóa duy nhất mà không cần sự điều phối tập trung. Mặc dù UUID phiên bản 4 (dựa hoàn toàn vào các số ngẫu nhiên) được sử dụng phổ biến nhất, nó lại chứa đựng những hạn chế cố hữu khi được sử dụng làm khóa chính trong các hệ quản trị cơ sở dữ liệu quan hệ (RDBMS). Sự ngẫu nhiên rất tuyệt vời cho tính tuyệt mật, nhưng lại rất tệ cho việc đánh chỉ mục cơ sở dữ liệu. Khi bạn chèn một UUID ngẫu nhiên vào chỉ mục B-tree, nó gây ra tình trạng phân tách trang và phân mảnh chỉ mục nghiêm trọng, dẫn đến giảm hiệu suất ghi theo thời gian. Đó là lý do các UUID dựa trên thời gian—đặc biệt là phiên bản 1, 6 và 7—ra đời, cung cấp một giải pháp thay thế có cấu trúc đảm bảo cả tính duy nhất và thứ tự thời gian.
UUID phiên bản 1 là nỗ lực đầu tiên kết hợp tính duy nhất với thời gian. Nó tạo ra mã định danh bằng cách sử dụng nhãn thời gian hiện tại, chuỗi đồng hồ và địa chỉ MAC của nút. Việc đưa địa chỉ MAC vào đảm bảo tính duy nhất về mặt không gian trên các máy khác nhau, trong khi nhãn thời gian đảm bảo tính duy nhất về mặt thời gian. Tuy nhiên, UUID v1 có một khuyết điểm lớn đối với việc đánh chỉ mục cơ sở dữ liệu: nhãn thời gian của nó được cấu trúc với các bit quan trọng nhất đại diện cho độ phân giải thời gian thấp nhất. Nói một cách đơn giản, khi thời gian trôi qua, phần đầu của chuỗi UUID thay đổi nhanh chóng và không thể đoán trước, làm mất đi khả năng sắp xếp tuần tự. Ngoài ra, việc tiết lộ địa chỉ MAC làm dấy lên lo ngại lớn về quyền riêng tư và bảo mật, khiến nhiều nhà phát triển từ bỏ v1.
Để giải quyết những vấn đề này, cộng đồng kỹ thuật đã giới thiệu UUID phiên bản 6 và phiên bản 7. UUID v6 về bản chất là một UUID v1 được sắp xếp lại. Nó lấy các thành phần nhãn thời gian của v1 và sắp xếp lại để các bit quan trọng nhất đại diện cho độ phân giải thời gian cao nhất (năm, tháng, ngày), giảm dần đến các phân số của giây. Sự sắp xếp lại đơn giản này đảm bảo rằng các giá trị UUID v6 có thể sắp xếp theo thứ tự thời gian. Nếu bạn tạo một UUID v6 hôm nay và một UUID khác vào ngày mai, UUID của ngày mai sẽ được xếp sau UUID của hôm nay, hoàn toàn phù hợp với cách mà B-tree trong cơ sở dữ liệu kỳ vọng dữ liệu được chèn vào. Điều này loại bỏ sự phân mảnh chỉ mục của v4 và khả năng không thể sắp xếp của v1, đồng thời vẫn tương thích ngược với các hệ thống yêu cầu cấu trúc UUID truyền thống.
UUID phiên bản 7 đưa sự tối ưu hóa này lên một tầm cao mới và đại diện cho tiêu chuẩn vàng hiện đại cho các khóa chính cơ sở dữ liệu. Thay vì dựa vào kỷ nguyên Gregorian cũ được v1 và v6 sử dụng, UUID v7 sử dụng nhãn thời gian Unix Epoch chuẩn (tính bằng miligiây kể từ nửa đêm ngày 1 tháng 1 năm 1970 UTC). Nhãn thời gian này chiếm 48 bit đầu tiên của mã định danh. Các bit còn lại được lấp đầy bằng dữ liệu ngẫu nhiên mạnh về mặt mã hóa. Cách tiếp cận kết hợp này mang lại điều tốt nhất từ cả hai thế giới: khả năng sắp xếp tuần tự mạnh mẽ cần thiết cho việc chèn cơ sở dữ liệu hiệu suất cao, kết hợp với sự an toàn và riêng tư của việc tạo dữ liệu ngẫu nhiên. Bằng cách sử dụng công cụ tạo UUID trên trình duyệt miễn phí 100% và bảo mật của chúng tôi, bạn có thể tạo ngay các mã định danh hiện đại này mà không rủi ro lộ dữ liệu nhờ việc không tải dữ liệu lên máy chủ.