Temos dados de log (dados XML) indo para uma pasta de máquinas específicas. Assim, por exemplo, os dados de log vão para uma estrutura de pastas simples como essa.
\Machine1\logs\*.xml
Esta pasta pode ter entre 50 e 300k arquivos a qualquer momento. Depois que um arquivo é colocado nessa pasta, ele não é atualizado. Os arquivos têm algumas informações sobre o que foi registrado (informações sobre o que / onde ele foi processado) e o yyyymmddhhmmss.xml anexado ao final dele.
Os arquivos que entram nisso são mantidos entre 3 a 6 semanas e, em seguida, eventualmente, são removidos de volta (isso geralmente é feito por algum outro processo sobre o qual não tenho controle).
O desafio é arquivar vários anos desses dados. Estou planejando criar uma estrutura de pastas de \ArchiveServer\Machine1\logs\YYYY\mm\DD\*.xml
. Isso nos permitirá acessar os dados em um determinado dia mais facilmente (se necessário) e onde não teremos mais de 1 milhão de arquivos em um único diretório.
Estou tentando descobrir uma boa maneira de gerenciar essa sincronização / mesclagem entre a estrutura antiga e a nova continuamente, onde ela será dimensionada o suficiente para lidar com o número de arquivos que teremos eventualmente sem diminuir muito a velocidade.
No Python, eu estava fazendo uma listagem do diretório \machine1\logs\*.xml
source pegando essa lista de arquivos e, em seguida, fazendo uma listagem de diretórios recursivos para obter a lista de todos os arquivos no destino \ArchiveServer\Machine1\logs
, comparar a lista de origem e o destino lista e se houver arquivos da lista de origem que não constam na lista de destinos, copio-os para a pasta de destino (arquivo).
Infelizmente, isso tem o problema de ter que fazer uma listagem de diretórios no \Archiveserver
, que eventualmente ficará lento à medida que mais dados forem copiados para a pasta de arquivos. Para apenas 200k, leva cerca de 30 segundos para que uma máquina faça uma listagem na pasta de destino. Estou preocupado que uma vez que chegue aos registros de 500k-1M, demorará significativamente mais tempo.
Existe uma maneira melhor de realizar isso que será escalonado com o número de arquivos com os quais lidarei (isso é no Windows)?