Сап!
Есть проект, в базе сейчас около 40 000 пользователей. Активных не так много, но порядок цифр примерно таков. Пользователи лежат в базе mongodb. Все крутится на nodejs. Для каждого пользователя, раз в сутки, любой другой пользователь может один раз нажать +1 или -1. По факту изменения оценки пользователь, для которого оценка была изменена, заносится в коллекцию-очередь jobs. Воркер, постоянно перезапускающийся через setTimeout раз в секунду (ограничение внешнего АПИ, т.к. +1 и -1 это на самом деле лайки в социальной сети) выбирает задачу из этой очереди, делает запрос к АПИ и получает сегодняшнее количество плюсов и минусов.
Далее, для каждого пользователя получаются все дневные количества плюсов и минусов за все дни, от плюсов отнимаются минуса, ко-во умножается на коефициент обратнопропорциональный дате оценки. Если оценке больше 30 дней она теряет вес.
Далее, мне необходимо получить массив всех пользователей, упорядочить их по общему ко-ву оценок за все дни и просто перераспределить индекс, чтобы получить значение места в рейтинге. Тоесть фаектически отображать мне нужно место, а не ко-во очков. Проблема в том что получение и обновление такого количества записей занимает нешуточное время, тоесть обновлять весь рейтинг по каждому запросу изменения оценки я не могу.
Пока решил обновлять реже, значение подбираю. Но возможно есть более быстрые способы? Хотелось бы всетаки уметь это делать рилтаймово.
Вобщем жду советов мудрых. Надеюсь доступно изложил.