Đây là một dự án sắp tới. Tôi có hai bảng - lần đầu tiên một giữ dấu vết của hình ảnh, và một trong những thứ hai theo dõi thứ hạng của ảnhLàm cách nào để tối ưu hóa bảng MySQL này?
Photos:
+-------+-----------+------------------+
| id | photo | current_rank |
+-------+-----------+------------------+
| 1 | apple | 5 |
| 2 | orange | 9 |
+-------+-----------+------------------+
Xếp hạng ảnh tiếp tục thay đổi một cách thường xuyên, và đây là bảng theo dõi nó:
Ranks:
+-------+-----------+----------+-------------+
| id | photo_id | ranks | timestamp |
+-------+-----------+----------+-------------+
| 1 | 1 | 8 | * |
| 2 | 2 | 2 | * |
| 3 | 1 | 3 | * |
| 4 | 1 | 7 | * |
| 5 | 1 | 5 | * |
| 6 | 2 | 9 | * |
+-------+-----------+----------+-------------+ * = current timestamp
Mọi thứ hạng đều được theo dõi cho mục đích báo cáo/phân tích. [Chỉnh sửa] Người dùng sẽ có quyền truy cập vào số liệu thống kê theo yêu cầu.
Tôi đã nói chuyện với một người có kinh nghiệm trong lĩnh vực này, và anh ấy nói với tôi rằng lưu trữ các cấp bậc như trên là con đường để đi. Nhưng tôi chưa chắc lắm.
Sự cố ở đây là dự phòng dữ liệu. Sẽ có hàng chục ngàn bức ảnh. Xếp hạng ảnh thay đổi theo giờ (nhiều lần trong vòng vài phút) đối với các ảnh gần đây nhưng ít thường xuyên hơn đối với ảnh cũ hơn. Với tốc độ này, bảng sẽ có hàng triệu hồ sơ trong vòng vài tháng. Và vì tôi không có kinh nghiệm làm việc với các cơ sở dữ liệu lớn, điều này khiến tôi hơi lo lắng.
Tôi nghĩ về điều này:
Ranks:
+-------+-----------+--------------------+
| id | photo_id | ranks |
+-------+-----------+--------------------+
| 1 | 1 | 8:*,3:*,7:*,5:* |
| 2 | 2 | 2:*,9:* |
+-------+-----------+--------------------+ * = current timestamp
Điều đó có nghĩa một số mã thêm trong PHP để chia cấp bậc/thời gian (và sắp xếp), nhưng điều đó có vẻ OK với tôi.
Đây có phải là cách chính xác để tối ưu hóa bảng cho hiệu suất không? Bạn muốn giới thiệu gì?
là xếp hạng được kết nối với bất kỳ điều gì khác? như người dùng đã cho nó? và nếu quan trọng như vậy thì quan hệ đó có quan trọng không? I E? bạn có cần phải lưu trữ thứ hạng trò chơi của người dùng không? –
Xếp hạng không được liên kết với bất kỳ thứ gì khác ngoài ảnh. Nó được tính toán và thay đổi bởi một thuật toán máy tính! :) – Yeti
@Col: bình luận của bạn luôn làm tôi mỉm cười! :) Trên thực tế các id trông giống như thế này: ** 4606886418 **, Ngay bây giờ có khoảng 2 triệu bức ảnh. Mỗi thứ hạng của một người thay đổi 50 lần. Vì vậy, mặc dù điều đó có thể không quá lớn, nó cũng không thể được gọi là nhỏ. – Yeti