Это может быть одним из способов:
- L oop over:
- Получить файл
- Проверить, что запрос не был обработан с запросом в базу данных.
- Обработка файла
- Обновление базы данных
- Обновление базы данных с помощью журнала обработанного файла
- Фиксация
- Перемещение файла из необработанной очереди
Вы также можете записать запись файла в другой постоянный ресурс .
Q. Что делать, если есть много файлов. Разве запись в журналы не замедляет процесс?
A: Вероятно, немного, это всего лишь одна запись в базе данных на файл. Это стоимость устойчивости.
В: Что, если файлы настолько малы, что они обновляют только одну строку на файл?
A: Сделайте ваш запрос на обновление идемпотентным. Не регистрируйте, но убедитесь, что файлы будут удалены из очереди после завершения транзакции.
В: Что, если в файле много строк. Вы действительно хотите перезапустить с первой строки файла?
A: Зависит от стоимости / выгоды. Вы можете разбить файл на более мелкие перед обработкой каждого вложенного файла. Если отключение питания происходит постоянно, это хороший компромисс. Если это происходит очень редко, дополнительная работа системы может не стоить этого.
A: Что, если есть смешанные файлы малого и большого размера?
Q: Поместите файлы в отдельные очереди, которые обрабатывать их соответствующим образом.
Идея UPS от @TimBiegeleisen очень хороша. Я испытал сбой одного такого, поэтому вам понадобится два.