2010-03-22 21 views
6

Tôi đã nhìn vào các thuật toán phổ biến được sử dụng trên các trang web như Reddit, Digg và thậm chí Stackoverflow.Popularity Algorithm - SQL/Django

Reddit thuật toán:

t = (time of entry post) - (Dec 8, 2005) 
x = upvotes - downvotes 

y = {1 if x > 0, 0 if x = 0, -1 if x < 0) 
z = {1 if x < 0, otherwise x} 

log(z) + (y * t)/45000 

Tôi đã luôn luôn thực hiện đặt hàng đơn giản trong SQL, tôi đang tự hỏi làm thế nào tôi phải đối phó với trật tự như vậy.

Nếu nó được sử dụng để xác định bảng, hoặc tôi có thể xây dựng một SQL với thứ tự trong công thức (mà không cản trở hiệu suất) không?

Tôi cũng tự hỏi, nếu có thể sử dụng nhiều thuật toán đặt hàng trong những dịp khác nhau, mà không gặp phải vấn đề về hiệu suất.


Tôi đang sử dụng Django và PostgreSQL.

Trợ giúp sẽ được nhiều người đánh giá cao! ^^

Trả lời

3

Bạn nên lưu trữ xếp hạng mức độ phổ biến của mình trong một cột riêng và cập nhật khi giá trị cơ bản thay đổi. Bạn cũng nên thiết lập một chỉ số cơ sở dữ liệu trên cột đó. Nếu sau đó bạn cũng lưu vào bộ nhớ cache kết quả của các truy vấn phổ biến nhất, bạn đã thực hiện các biện pháp hiệu quả nhất để thực hiện truy vấn phổ biến của mình.

+0

@stefanw Tôi phải đọc câu trả lời của bạn lần thứ hai. Cảm ơn stefan, tôi đoán đây là con đường để đi. Đặt hàng hoặc thiết lập thông qua SQL sẽ là một cách không có o quá phức tạp. :) – RadiantHex

Các vấn đề liên quan