Я работаю над сайтом, похожим на digg, в отношении того, что пользователи могут отправлять "истории".
Я отслеживаю, сколько "голосов" и "похожих добавок" получил каждый элемент. Подобные добавления определяются как два пользователя, добавляющие одну и ту же «ссылку».
Вот часть алгоритма (по сути, наиболее важная):
y = day number
sy = number of adds on day y
∑ y[1:10] sy / y
Таким образом, по сути, рассчитайте количество «похожих добавок» в указанный день и разделите на количество секунд с момента публикации контента. Делайте это в течение последних 10 дней (как пример).
Однако я не уверен, как это реализовать, чтобы она работала хорошо. Каждый метод, который я могу придумать, будет очень медленным.
Единственный способ реализовать это - рассчитать количество добавлений за последние 10 дней для каждого представленного элемента, который будет длиться вечно. (поэтому команда sql с группировкой по дате выполнялась 10 раз за последние 10 дней - очевидно, этот метод отстой).
Даже если я сохраню таблицу, которую обновляю раз в день (и запускаю вышеупомянутый sql в фоновом режиме), она все равно будет невероятно медленной, когда база данных станет большой. Кроме того, рейтинг будет «устаревшим», поскольку он не является живым (например, «новости» из последних новостей никогда не достигнут вершины).
Кто-нибудь знает, как это сделать?