Допустим, у меня 5 записей в базе данных Redis:
news::id
: идентификатор последней новости; news::list
: список всех идентификаторов новостей; news:n
, где n - идентификатор новости: хэш, содержащий такие поля, как title
, url
и т. Д .; news:n:upvotes
:список идентификаторов всех пользователей, которые проголосовали за новости, таким образом, указав количество голосов против. news:n:downvotes
: список идентификаторов всех пользователей, проголосовавших против новостей, таким образом, указав количество голосов против.
Тогда у меня есть несколько алгоритмов ранжирования, где rank =
:
upvotes_count
; upvotes_count - downvotes_count
; upvotes_count - downvotes_count - age
; upvotes_count / downvotes_count
; age
.
Теперь, как мне отсортировать эти новости по каждому из этих алгоритмов?
Я думал о вычислении различных рангов для каждого голоса, но затем, если я введу новый алгоритм, мне нужно вычислить новый ранг для всех новостей.
EVAL
может помочь, ноэто не будет доступно до v2.6, что, конечно, я нехочу подождать.
В конце концов, я могу получить все новости и поместить их в список Python.Но опять-таки это приводит к высокому использованию памяти, не говоря уже о том, что Redis хранит свои данные в памяти.
Так есть ли правильный способ сделать это или я должен просто перейти на MongoDB?