uuid_short()
tạo ra một tập hợp bit theo chiều dọc của ID máy chủ, thành phần thời gian khá tĩnh và số nguyên 24 bit tăng tuần tự. Các bit này được nhồi vào một số nguyên 8 byte. Thành phần thời gian dựa trên thời gian khởi động của máy chủ.
uuid()
tạo chuỗi hex đại diện cho UUID phiên bản 1 16 byte. UUID phiên bản 1 là sự tập hợp theo từng bit của ID máy chủ, dấu thời gian hiện tại, một vài byte có tác dụng nếu bạn tạo ID ở tốc độ quá cao và một vài bit tiện ích.
Để trả lời câu hỏi của bạn:does uuid_short
cung cấp tính duy nhất về thời gian và không gian so với các đối thủ của uuid
? Câu trả lời là không. Điển hình là ID máy chủ trong uuid_short
chỉ là một byte. Vì vậy, nếu bạn có 256 máy chủ trở lên, ít nhất một vài trong số chúng sẽ có cùng id nút, có nghĩa là bạn mất tính duy nhất về không gian. Để so sánh, ID máy chủ trong UUID phiên bản 1 dài 6 byte, giết chết cơ hội trùng lặp một cách hiệu quả cho tất cả, trừ phần lớn nhất trong số các trang trại máy chủ của công ty :)
Một câu hỏi hay hơn là liệu uuid_short
Là đủ tốt. Bạn có thể thấy xung đột ID nếu bạn:
- Tạo hơn 16 triệu IDS từ cùng một máy chủ trong thời gian ngắn. ***
- Khởi động các máy chủ có cùng một ID máy chủ hoàn toàn cùng lúc và chia sẻ dữ liệu giữa chúng.
- Điều khiển đồng hồ hệ thống, sau đó khởi động lại máy chủ của bạn.
Vấn đề thứ hai có vẻ khó xảy ra đối với hầu hết mọi người, nhưng vấn đề đầu tiên đáng để điều tra trước khi bạn thực hiện uuid_short
cơ sở của các chìa khóa của bạn.
*** Dựa trên tài liệu mysql cho uuid_short
, có vẻ như bạn sẽ thấy xung đột nếu bạn tạo hơn 16 triệu ID trong thời gian hoạt động của một máy chủ. Nhưng điều đó sẽ thật ngớ ngẩn. Tài liệu mysql tiếp tục nói rằng bạn ổn miễn là bạn không tạo 16 triệu ID mỗi giây. Điều đó ngụ ý rằng chúng phải tăng một số bit trong dấu thời gian nếu bạn sử dụng hết 16 triệu ID tuần tự. Tôi chưa thử nghiệm cái này.