Tôi đang cố gắng lập trình một plugin cho bbPress (phần mềm diễn đàn nguồn mở) sẽ hoạt động tương tự như Hacker News (http://news.ycombinator.com/).Cách sắp xếp như tin nhắn Hacker
Cụ thể, tôi muốn sắp xếp thứ tự của diễn đàn-đề (bbPress gọi họ là "chủ đề") bằng cách sử dụng thuật toán sau đây:
sort_value = (p - 1)/(t + 2)^1.5
where p = total votes for each topic from users
t = time since submission of each topic in hours
Tôi muốn để có thể sắp xếp chủ đề của thành viên này tính sort_value sử dụng MySQL.
Các lĩnh vực có liên quan trong bảng topics
trông giống như sau:
topic_id bigint(20)
topic_start_time datetime
Đây là lên trong không khí, nhưng tôi đã suy nghĩ sẽ có một bảng mà các cửa hàng phiếu cá nhân của người sử dụng vì vậy chúng tôi sẽ có thể biết liệu người dùng đã bỏ phiếu chưa. Và một bảng khác sẽ lưu trữ tổng số phiếu bầu hiện tại cho mỗi chủ đề. Có lẽ sẽ có một lĩnh vực khác trong bảng đó lưu trữ sort_Value được tính toán mới nhất?
Để chính xác 100%, giá trị sắp xếp phải được cập nhật sau mỗi phiếu bầu mới. Điều này sẽ thêm quá nhiều tải vào máy chủ cơ sở dữ liệu, mặc dù, đặc biệt là nếu chúng tôi cố gắng cập nhật TẤT CẢ các chủ đề. Nếu chúng ta phải, chúng tôi có thể giới hạn tập dữ liệu bằng cách chỉ tính toán giá trị sort_value cho X # chủ đề cuối cùng. Chúng tôi cũng có thể giới hạn tải bằng cách chỉ cập nhật định kỳ sort_value (ví dụ: cứ 5 phút một lần thông qua một công việc cron).
Các phím tắt này có thể làm cho tải có thể chấp nhận được, nhưng tôi muốn một giải pháp thanh lịch hơn có thể mở rộng tốt hơn.
Bạn cấu trúc như thế nào? :-)
Tôi nghĩ rằng đó là hợp lệ nếu một chút vụng về. Thật không may bạn đang đối phó với những hạn chế của hệ thống bạn đang thêm vào. Chia tỷ lệ loại vấn đề này chính xác là loại cơ sở dữ liệu thứ rdbms không hoạt động tốt. Một cái gì đó giống như Chế độ xem CouchDB sẽ nằm ngay trên con hẻm này. –
Cảm ơn, Jeremy. Tôi sẽ kiểm tra CouchDB. Tôi chỉ nghĩ về một tinh chỉnh khác cho ý tưởng này, đó là chỉ cần lưu (ở nơi khác) một giá trị cho biết 'bảng' nào đang hoạt động. Giả sử giá trị hiện tại là 'old_table'. Điều này sẽ cho ứng dụng của tôi thực hiện một JOIN với 'old_table'. Sau đó, sau khi tạo một 'new_table' được cập nhật, tôi sẽ cập nhật giá trị" Active database "thành' new_table'. Điều này sẽ tránh DROP của bảng đang được yêu cầu cho JOIN thường xuyên. – bobbyh