История изменений
Исправление dizza, (текущая версия) :
Для ранка заводишь отдельный столбец и при любом изменении входных данных (поменялся у кого-то скор, ник, появилась/удалилась запись пользователя) запускаешь джобу пересчета путем отправки сообщения джобе. Только сообщения троттлить нужно, что бы ограничить количество общетов, например не чаще, чем раз в 10 секунд.
Дальше можно тюнить саму таску общета. Вроде как достаточно просто индекса составного, причем для вычисления ранка достаточно данных прямо из индекса, нужно стремиться к этому.
Если и этого мало, выносишь индекс во внешний сервис, который строит кеш в памяти.
Исходная версия dizza, :
Для ранка заводишь отдельный столбец и при любом изменении входных данных (поменялся у кого-то скор, ник, появилась/удалилась запись пользователя) запускаешь джобу пересчета путем отправки сообщения джобе. Только сообщения троттлить нужно, что бы ограничить количество общетов, например не чаще, чем раз в 10 секунд. Дальше можно тюнить саму таску общета. Вроде как достаточно просто индекса составного, причем для вычисления ранка достаточно данных прямо из индекса, нужно стремиться к этому.