Chọn ngẫu nhiên phần tăng tự động trong Mysql


8

Chúng tôi có một cơ sở dữ liệu, nơi chúng tôi chèn dữ liệu vào bảng bất cứ khi nào chúng tôi nhận được đơn đặt hàng từ các dịch vụ của chúng tôi.

Chúng tôi sử dụng auto_incrementđể tạo ID và gán thứ tự với cùng. Điều này thường giống nhau ở mọi nơi.

Nhưng vấn đề là, vì thông tin này được chuyển đến các nhà cung cấp bên thứ ba, họ có thể theo dõi, chúng tôi nhận được bao nhiêu đơn hàng mỗi ngày. Bằng cách gửi một yêu cầu vào sáng sớm và gửi một yêu cầu khác vào nửa đêm và đếm sự khác biệt trong ID.

Đây là cung cấp thông tin sâu sắc về các dịch vụ của chúng tôi. Vì hệ thống phức tạp một chút, chúng tôi không thể thực hiện thao tác phức tạp có thể ngẫu nhiên hóa điều này.

Ý tưởng ban đầu của tôi là tạo ra các auto_incrementcon số theo cách ngẫu nhiên bit.

1,2,3,4,5,67,68,69,70,71,133,134,135,136,137,189,190,191,192,193,194

Tôi đoán nó sẽ đơn giản, vì Mysql hết bộ nhớ cache, tạo chuỗi tiếp theo bằng cách nối thêm một số ngẫu nhiên.

Làm thế nào để đạt được điều này mà không ảnh hưởng đến hiệu suất?


Thông tin nào bạn đang truyền chính xác? Chỉ có ID? Nếu các nhà cung cấp này có thể gửi các truy vấn tùy ý đến cơ sở dữ liệu, họ luôn có thể chạy SELECT * FROM Orders;hoặc SELECT COUNT(*) FROM Orders WHERE Date >= CURRENT_DATE();lấy thông tin này.
ypercubeᵀᴹ

Có thể bạn có thể thử sử dụng UUIDthay vì od Auto_Increment.
Abdul Manaf

@ypercube, họ không có quyền truy cập vào cơ sở dữ liệu. Tôi sẽ gửi xác nhận đơn hàng với id được tạo. Vì chúng tôi thực hiện hơn 0,1 triệu mỗi ngày, chúng tôi không thể sử dụng UUID vì nó có thể khá lớn và bộ phận chăm sóc khách hàng của chúng tôi sẽ không thể trả lời
Reddy

3
Tôi hiểu rồi. Vì vậy, bất kỳ nhà cung cấp nào trong số này, chỉ có thể có ý tưởng về kích thước của các đơn đặt hàng trong một ngày chỉ bằng ID của đơn đặt hàng của họ. Tôi nghĩ rằng việc thêm một cột UUID (và ẩn ID thực tế khỏi các nhà cung cấp) có thể là lựa chọn tốt nhất của bạn. Bộ phận chăm sóc khách hàng vẫn có thể kiểm tra mọi thứ bằng cách sử dụng truy vấn có thể đã thay đổi (do UUID chứ không phải ID). Điều này sẽ chỉ cần một cột mới và một chỉ mục trên đó. Và (tôi cho rằng bạn sử dụng InnoDB) bạn sẽ muốn giữ chỉ mục được nhóm IDvà tất cả các FK của bảng khác không bị ảnh hưởng.
ypercubeᵀᴹ

Câu trả lời:


5

Dưới đây là tổng quan về các phương pháp để tạo id duy nhất ngẫu nhiên trong mysql, bởi Rick James: http://forums.mysql.com/read.php?24,425424,425491

Tổng quan khá toàn diện, đưa ra 5 chiến lược khác nhau, liệt kê ưu và nhược điểm cho mỗi người.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.