Вопрос

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

Алгоритм Реддита:

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.

Помощь будет очень признательна!^^

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top