Я хочу внедрить систему ранжирования на веб-сайте, над которым я работаю, и решил использовать алгоритм Hacker News.Я выбрал этот алгоритм просто потому, что он был описан здесь .
Я искал этот код Python (язык, который я использую для создания своего сайта) и не мог понятькак я бы это реализовал.
def calculate_score(votes, item_hour_age, gravity=1.8):
return (votes - 1) / pow((item_hour_age+2), gravity)
Учитывая таблицы:
posts:
id | title | time_submitted
votes:
id | postid | userid | score
Как бы я вытащил данные из базы данных?Идеальным решением (наиболее эффективным) было бы создание запроса MySQL для получения 10 лучших постов, ранжированных с использованием алгоритма.Но, учитывая, что в Hacker News это реализовано в Arc, я думаю, что они извлекают все посты, а затем запускают их с помощью алгоритма их ранжирования.
Reddit также приходит на ум для этого ... Они используютсхема нереляционной базы данных, поэтому я предполагаю, что они, подобно Hacker News, выполняют ранжирование в своем коде, а не в базе данных.
Как бы вы это реализовали?
РЕДАКТИРОВАТЬ: В одном сообщении может быть много голосов, так как я хотел бы записать, какой пользователь за какой пост проголосовал.