Reconstrua o arquivo original a partir de arquivos diff para economizar espaço em disco

3

Todos os dias, o arquivo de texto de 10 GB é baixado, o arquivo tem ~ 200 milhões de linhas e ~ 1% das linhas são alteradas no dia seguinte. Quero manter os arquivos diários como backup, mas estou tentando economizar espaço em disco usando a CPU.

EDITAR Atualmente a melhor maneira que encontrei é manter os arquivos diff e reconstruí-los com patch (como @Simon sugeriu), por exemplo em 01 Jan baixe o arquivo grande e depois por um mês inteiro continue fazendo apenas diff diff 01jan.txt 02jan.txt > 02jan.diff; rm 02jan.txt e assim por diante para todos os dias do mês.

Existe uma maneira melhor de fazer isso?

    
por nacholibre 13.09.2015 / 12:09

3 respostas

1

Este é exatamente o software de controle de versão de trabalho como o Git, o Bazaar ou o Subversion está fazendo (mais um pouco extra). Portanto, seu fluxo de trabalho pode ser o seguinte:

  • No início de um mês, crie um novo repositório.
  • A cada dia, copie novos arquivos no repositório e confirme as alterações
  • Opcionalmente, remova o repositório do último mês.

Eu os arquivos não mudam muito de mês para mês, apenas trabalhe com um repositório para cada mês.

    
por 13.09.2015 / 13:16
1

Como você mencionou o programa diff , posso supor com segurança que você está falando sobre arquivos de texto ...

Como você mencionou 10 GB em 200 milhões de linhas, este parece ser um único arquivo com um comprimento médio de linha de 50, o que parece OK.

  • Em tal situação, um sistema de controle de versão é o caminho certo a seguir.

Você precisa encontrar o sistema de controle de versão correto para o seu problema. Deixe-me, assim, supor sua informação:

  • Uma nova versão de arquivo todos os dias e 1% do conteúdo muda de um dia para o outro.

Dado que git não mantém deltas de arquivo, mas sim armazena arquivos compactados gzip -4, espero que depois de aprox. 2-3 semanas, o git consome mais espaço em disco do que o esperado. Então git não é a ferramenta certa para o seu caso.

Existem outros sistemas de controle de versão que usam diferenças para o método de tratamento de histórico.

  • O RCS armazena diffs invertidos e pode ser uma solução, mas o RCS é lento para arquivos > 256KBytes e RCS levam mais tempo se você não precisar da versão mais recente, mas algo mais antigo.

  • O SCCS é baseado em diffs, mas o formato de armazenamento é o chamado weave format que efetivamente armazena todas as versões ao mesmo tempo e permite que você recupere qualquer versão no mesmo tempo fixo.

O SCCS criará um arquivo de histórico inicial de 10GB e esse arquivo de histórico aumentará em 1% para cada nova versão do seu caso, então espero que o arquivo de histórico use aprox. 36,5 GB após um ano. Para o GIT, espero um requisito de espaço em disco de 100 a 400 GB após um ano.

O SCCS é OpenSource e pode ser recuperado de:

link

O SCCS é mantido desde 1972 (43 anos) e, portanto, pode ser visto como maduro ;-) e BTW: não conheço sistema de controle de versão mais rápido.

    
por 13.09.2015 / 14:19
1

Confira 'patch', no mesmo dia em que os mesmos problemas com o download do código-fonte do kernel eram quase diários. Isso pode ser usado para atualizar o arquivo original ou voltar para versões anteriores usando os arquivos diff.

    
por 13.09.2015 / 22:21