Это очень распространенный сценарий: какой-то процесс хочет сбросить файл на сервере каждые 30 минут или около того. Просто, правда? Ну, я могу придумать, как это может пойти не так.
Например, обработка файла может занять больше или меньше 30 минут, поэтому новый файл может прибыть до того, как я закончу с предыдущим. Я не хочу, чтобы исходная система перезаписывала файл, который я все еще обрабатываю.
С другой стороны, файлы имеют большой размер, поэтому их загрузка занимает несколько минут. Я не хочу начинать обработку частичного файла. Файлы просто передаются по FTP или sftp (мое предпочтение), поэтому блокировка на уровне ОС не возможна.
Наконец, мне нужно некоторое время хранить файлы, на случай, если мне нужно вручную проверить один из них (для отладки) или повторно обработать один.
Я видел много специальных подходов к перестановке загружаемых файлов, обмену именами файлов, использованию меток даты, прикосновению к файлам-индикаторам для помощи в синхронизации и так далее. То, что я еще не видел, это всеобъемлющий «алгоритм» для обработки файлов, который учитывает параллелизм, согласованность и полноту.
Итак, я хотел бы воспользоваться мудростью толпы здесь. Кто-нибудь видел действительно пуленепробиваемый способ манипулирования пакетными файлами данных, чтобы они никогда не обрабатывались слишком рано, никогда не перезаписывались до выполнения и надежно сохранялись после обработки?