У нас есть данные журнала (данные XML), поступающие в папку с определенных машин. Так, например, данные журнала помещаются в плоскую структуру папок.
\\Machine1\logs\*.xml
В этой папке может быть от 50 до 300 тыс. Файлов одновременно. После помещения файла в эту папку он не обновляется. В файлах содержится некоторая информация о том, что было записано в журнал (информация о том, что / где это было обработано), и в конце файла yyyymmddhhmmss.xml.
Файлы, которые входят в это, хранятся в течение 3-6 недель, а затем, в конечном итоге, снова очищаются (обычно это делается каким-то другим процессом, который я не контролирую).
Задача состоит в том, чтобы заархивировать эти данные за несколько лет. Я планирую создать структуру папок \\ArchiveServer\Machine1\logs\YYYY\mm\DD\*.xml
. Это позволит нам легче получить данные в определенный день (при необходимости) и при этом у нас не будет более 1 миллиона файлов в одном каталоге.
Я пытаюсь найти хороший способ непрерывно управлять этой синхронизацией / слиянием между старой структурой и новой, где она будет достаточно масштабироваться, чтобы обрабатывать количество файлов, которые у нас в конечном итоге будут, без слишком большого замедления.
В Python я составлял список \\machine1\logs\*.xml
исходный каталог захватывает этот список файлов, а затем выполняет рекурсивный список каталогов, чтобы получить список всех файлов в \\ArchiveServer\Machine1\logs
назначения, сравните исходный список и список назначения, и если есть какие-либо файлы из исходного списка, которых нет в списке назначения, я копирую их в папку назначения (архив).
К сожалению, это связано с необходимостью делать список каталогов на \\Archiveserver
что в конечном итоге будет замедляться по мере того, как в архивную папку будет скопировано больше данных. Всего для 200k файлов машине требуется около 30 секунд, чтобы составить список в папке назначения. Я обеспокоен тем, что когда количество записей достигнет 500 000–1 млн, потребуется значительно больше времени.
Есть ли лучший способ добиться этого, который будет масштабироваться в зависимости от количества файлов, с которыми я буду иметь дело (это в Windows)?