Есть n миллионов записей (лог) раз в минуту нужно собирать статистику за прошедший час (~10 записей). Нельзя просто where `time` > 'час назад'. Потому что сервис может: а) упасть и про**ать статистику, б) захлебнуться и про**ать статистику.
Для решения проблемы я обращаюсь к дате из последней записи статистики, дёргаю час логов, идущий после указанного в статистике. Всё просто? Нет. Сервер мог лежать или ещё что, потому часов может быть два. Какой выход? Првоерить несколько часов подряд пока не случится «текущее время».
Проверка выполняется отложенно: собралась статистика в 10:20, через 5 минут запускается проверка на «не наступило ли время собирать статистику». Из-за такого увеличения времени может получиться что шедулер назначится на 59 минут 50 секунд и я случайно «перепрыгну» в следующий час. И про**у час статистики!
Архитектра кривая. Написал костыль чтоб такого не было. А как надо было, чёрт?..