У меня есть бизнес-приложение на основе LAMP. SugarCRM, если быть точнее. На данный момент более 120 активных пользователей. Каждый день каждый пользователь генерирует несколько записей, которые используются в сложном расчете для получения так называемого «индивидуального рейтинга».
Расчет одного значения «индивидуального рейтинга» занимает около 6 секунд. А раньше не было большой проблемы: каждый пользователь переходит по предоставленной ссылке для запуска расчета «индивидуального рейтинга», ждет 6-7 секунд и получает отображаемое значение.
Но теперь мне нужно реализовать расчет «общего рейтинга». То есть помимо «индивидуального рейтинга» я должен вычислить и отобразить пользователю:
минимальный индивидуальный рейтинг среди ВСЕХ пользователей приложения
максимальный индивидуальный рейтинг среди ВСЕХ пользователей приложения
текущая позиция пользователя в диапазоне всех индивидуальных оценок.
Скажем, текущий пользователь имеет индивидуальный рейтинг 220 баллов, минимальное значение рейтинга 80, максимальное 235 и он находится на 23 месте среди всех пользователей.
Каковы (имхо) основные проблемы, которые необходимо решить?
Если один расчет длится 6 секунд, общий расчет займет более 10 минут. Я думаю, что нет смысла делать приложение почти недоступным на этот период. А что если количество пользователей вырастет в ближайшее время в 2-3 раза?
Эти расчеты можно было бы выполнять как ночную работу, но все пользователи находятся в разных часовых поясах. В России разница между крайними часовыми поясами составляет 9 часов. Так что люди в западной части России все еще работают «сегодня». В то время как люди в восточной части просыпаются, чтобы работать в «завтра». Так какое лучшее время для ночной работы в этом случае?
Существуют ли какие-либо передовые методы|подходы|алгоритмы для построения такой рейтинговой системы?