Алгоритм популярности — SQL/Django

Я изучал алгоритмы популярности, используемые на таких сайтах, как Reddit, Digg и даже Stackoverflow.

Алгоритм Reddit:

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

Я всегда выполнял простое упорядочение в SQL, мне интересно, как мне поступить с таким упорядочением.

Должен ли он использоваться для определения таблицы или я могу построить SQL с упорядочением в формуле (без снижения производительности)?

Мне также интересно, можно ли использовать несколько алгоритмов упорядочения в разных случаях, не создавая проблем с производительностью.


Я использую Django и PostgreSQL.

Помощь будет высоко оценена! ^^


person RadiantHex    schedule 22.03.2010    source источник


Ответы (1)


Вы должны кэшировать свой рейтинг популярности в собственном столбце и обновлять его при изменении базовых значений. Вы также должны настроить индекс базы данных для этого столбца. Если вы затем также кешируете результаты своих наиболее распространенных запросов, вы принимаете наиболее эффективные меры для повышения производительности ваших популярных запросов.

person stefanw    schedule 22.03.2010
comment
@stefanw Мне пришлось прочитать твой ответ во второй раз. Спасибо, Стефан, я думаю, это правильный путь. Заказ или настройка через SQL были бы не слишком сложными. :) - person RadiantHex; 24.03.2010