Chúng tôi đang xem xét sử dụng các giá trị UUID làm khóa chính cho cơ sở dữ liệu MySQL của mình. Dữ liệu đang được chèn được tạo ra từ hàng chục, hàng trăm hoặc thậm chí hàng nghìn máy tính từ xa và được chèn với tốc độ 100-40.000 lần chèn mỗi giây và chúng tôi sẽ không bao giờ thực hiện bất kỳ cập nhật nào.
Bản thân cơ sở dữ liệu thường sẽ nhận được khoảng 50 triệu bản ghi trước khi chúng tôi bắt đầu thu thập dữ liệu, vì vậy không phải là một cơ sở dữ liệu lớn, nhưng cũng không phải là nhỏ. Chúng tôi cũng đang có kế hoạch chạy trên InnoDB, mặc dù chúng tôi sẵn sàng thay đổi điều đó nếu có một công cụ tốt hơn cho những gì chúng tôi đang làm.
Chúng tôi đã sẵn sàng sử dụng UUID Kiểu 4 của Java, nhưng trong quá trình thử nghiệm đã thấy một số hành vi lạ. Đầu tiên, chúng tôi đang lưu trữ dưới dạng varchar (36) và bây giờ tôi nhận ra rằng chúng tôi tốt hơn nên sử dụng nhị phân (16) - mặc dù tốt hơn bao nhiêu thì tôi không chắc.
Câu hỏi lớn hơn là: dữ liệu ngẫu nhiên này làm hỏng chỉ mục tệ đến mức nào khi chúng ta có 50 triệu bản ghi? Chúng ta sẽ tốt hơn nếu chúng ta sử dụng, chẳng hạn như UUID loại 1 trong đó các bit ngoài cùng bên trái được đánh dấu thời gian? Hoặc có thể chúng ta nên loại bỏ hoàn toàn các UUID và xem xét các khóa chính auto_increment?
Tôi đang tìm kiếm những suy nghĩ / mẹo chung về hiệu suất của các loại UUID khác nhau khi chúng được lưu trữ dưới dạng chỉ mục / khóa chính trong MySQL. Cảm ơn!