Milhares de arquivos para backup… sobrecarga nos matando

2

Temos um sistema que gera literalmente 5k - 10k arquivos XML por dia. É uma longa história, mas esse sistema não mudará por um tempo.

De qualquer forma, o sistema despeja esses arquivos XML (3k-20k cada) em UMA pasta. Então imagine a rapidez com que a pasta começa a ficar sobrecarregada.

Eu escrevi um programa que pega os arquivos e os organiza em uma hierarquia de formato ano / mês / dia. Em seguida, outro programa entra e apaga qualquer arquivo com mais de 90 dias.

Aqui está o problema. Nosso sistema de backup (mais uma vez, algo que não pode ser alterado) leva HOURS para fazer backup dessas pastas arquivadas porque há cerca de 1 milhão de arquivos. O backup faz um backup completo (novamente, não podemos mudar) e o que está acontecendo é que o backup tem que abrir e inspecionar CADA arquivo XML. Portanto, a velocidade de backup é tão lenta que, na verdade, não termina antes do backup da noite seguinte!

Então, o que eu tenho feito agora é pegar pastas mensais e criar um arquivo 7z. Isso funciona bem. 200k arquivos para um arquivo. No entanto, tenho que fazer isso manualmente.

Além disso, há outro problema. Nós não podemos arquivar o mês atual. Portanto, sempre é necessário ter 30 dias (x 5k - 10k) de arquivos instantaneamente "pesquisáveis".

Alguma sugestão sobre como lidar melhor com isso?

O seguinte passou pela minha cabeça:

1) Escreva um programa para o dia anterior e despeje para o SQL. Em seguida, adicione o arquivo a um arquivo.

2) Algum tipo de sistema de arquivos "live-archiving" para o qual o XML pode ser movido.

Obrigado.

    
por cbmeeks 16.08.2010 / 14:21

5 respostas

2

Se eles são XML, eles poderiam ser concatenados antes de serem compactados? Eles devem então compactar melhor (melhor dicionário de símbolos compartilhados). Você pode fazer quase o que está fazendo agora se concatenar os arquivos diários no final de cada mês em um grande arquivo XML ou ir ainda mais longe e concatenar anos, ou até mesmo todo histórico, exceto um mês. Em todos os casos, você então os compacta, sim.

Não parece que você está indo muito mal, na verdade, além de precisar escrever alguns scripts para fazer as coisas automaticamente para você.

    
por 16.08.2010 / 15:11
0

você tem logrotate em mente? É principalmente para o arquivamento de log, mas poderia funcionar para você cenário.

Sobre o seu caso, qual banco de dados você tem? Pode suportar a quantidade de texto simples que você mencionou?

Além disso, por que você precisa fazer o arquivo 7zip manualmente? Por que você não usa o cron para fazer isso por você?

    
por 16.08.2010 / 14:47
0

Você não menciona sua plataforma ... se é linux, por que não escrever um bit de classificação (que você já parece fazer) que os divide em diretórios menores, então execute um arquivo de linha de comando 7z para compactar esses diretórios para um único arquivo, então, de volta?

Como alternativa, você pode criar um "servidor de backup" que espelhe o diretório despejado sobre IP (algo como drdb ou rsync), então você pode fazer o backup desse servidor e liberar alguns recursos em seu servidor sobrecarregado. / p>

Na verdade, além de encontrar maneiras de reduzir o número de arquivos que você está criando, você fica limitado nas opções. Cada parede de tijolo que você nomear tem a tag adicionada que nada pode ser feito ou alterado.

Se os dados do mês precisarem ser pesquisados instantaneamente, talvez você queira procurar uma solução de banco de dados ou uma maneira de integrá-la a um banco de dados. Pelo que parece, você já está usando o sistema de arquivos como um banco de dados ad-hoc e, na verdade, colocar as informações em um banco de dados deve melhorar seu desempenho (e capacidade de fazer backup).

    
por 16.08.2010 / 15:27
0

Sei que você mencionou que não é possível alterar seu sistema de backup, mas, com os problemas que você está tendo, talvez valha a pena revisitar a solução para começar.

Há também o rsnapshot disponível. Isso usa o rsync, que fará backup apenas dos arquivos alterados. No seu caso, se você executá-lo diariamente, ele apenas fará o backup dos arquivos de 5 a 10k, e você poderá limitá-lo ao mês mais atual também.

Se você precisar de algo pesquisável, eu concordo com Bart Silverstrim sobre jogar o conteúdo em um banco de dados, pois backups e bancos de dados devem ser tratados como dois sistemas separados.

    
por 16.08.2010 / 15:31
0

Você pode tentar usar um sistema de arquivos diferente (xfs) e ajustar seus parâmetros.

Por exemplo: link

Além disso, você pode adicionar algumas unidades de disco e / ou configurar um nível de RAID mais rápido para melhorar o desempenho, já que parece que você tem um gargalo na IOPS.

    
por 30.08.2010 / 08:51