tar.bz2 desempenho do extrato seletivo de 7zip

2

Nós usamos tar.bz2 como nosso arquivo de logs do servidor. Também escrevemos ferramentas que analisam seletivamente esses logs arquivados. Muitas vezes preciso regexar as linhas de um arquivo no arquivo para determinar se outros registros contidos no mesmo arquivo são relevantes para as necessidades de análise. (Eu tenho uma correspondência de regex para o nome / caminho do arquivo) De um ponto de vista de desempenho, acho que estou enfrentando alguns limites. Mas pode ser que eu tenha uma lacuna no meu conhecimento. Eu principalmente script em python e tem algumas habilidades bash básicas. Os arquivos são grandes e armazenados em uma montagem. Eu gostaria de evitar o máximo possível de leitura e armazenamento local / temporário, especialmente quando os arquivos não se qualificam para uma análise completa.

Opção 1 (desperdício de largura de banda e recursos de CPU que salvam armazenamento local)

  1. Leia todo o arquivo bz2 no disco local.
  2. Descompacte o tar ao examinar a lista de arquivos.
  3. Descompacte novamente para pesquisar o primeiro arquivo de log.
  4. Então, se esse arquivo qualifica, descompacte novamente para extrair o log que preciso analisar.
  5. Siga para o próximo arquivo

Ou (desperdice armazenamento local e desperdice menos largura de banda)

  1. Leia todo o arquivo bz2 no disco local.
  2. Extraia a maioria dos arquivos que atendem a um possível critério interessante (seria necessário aproveitar quase tudo)
  3. Agora, todos os arquivos estão no meu sistema de arquivos local. Digitalize o primeiro log
  4. Então, se ele se qualifica, vá para o log que preciso analisar.
  5. Exclua todo o armazenamento local e vá para o próximo arquivo.

Quando pesquiso ferramentas de compactação como o 7zip zip rar bz2… a maioria dos links me fornece informações sobre a velocidade de compactação e o tamanho da compactação. Eu gostaria de usar algo como 7zip porque o tamanho da compressão é importante a longo prazo. Esta não é a base da minha pergunta! Mas também "acho" que o zip tem a capacidade de expor a lista completa de arquivos e extrair um arquivo sem descompactar todo o arquivo. (Porque a lista de arquivos está nos cabeçalhos ...) Mas o zip não é muito nativo no Linux.
Existe uma maneira de otimizar o processo usando o tar.bz2 existente? Quais são algumas ferramentas / métodos que devo considerar? (Troque o tar, use 7zip?)

    
por user2315423 04.12.2013 / 16:55

1 resposta

1

zip não é nativo do linux, mas se você tem a fonte, você provavelmente não deve se importar.

Por outro lado, 7zip e xz têm melhor desempenho, e compactar um arquivo tar de várias entradas com dados semelhantes é melhor para compactação do que zip , que basicamente faz um arquivo por vez. Isso possibilita que zip se recupere quando um arquivo é quebrado (devido a corrupção), onde um arquivo compactado tar geralmente tem mais problemas para recuperar e / ou mais irrecuperável.

Se você tiver a chance de alterar a geração do arquivo compactado bz2 (provavelmente você não perguntaria), faça o seguinte em vez de gerar o tar.bz2 :

  • gera um index.lst usando find <list_of_files_to_archive> > index.lst
  • gera um tar.xz de index.lst + list_of_files_to_archive

Dessa forma, você pode extrair rapidamente o arquivo index.lst sem descompactar todo o arquivo e determinar o conteúdo de index.lst se tiver o arquivo correto. Não tenho certeza se o padrão tar pára depois de extrair index.lst (pode haver outro no arquivo), então use o módulo tar do python para ter certeza de parar após a extração (e você imediatamente analisa o arquivo index.lst sem necessidade de armazenamento em disco, velocidade extra).

    
por 04.12.2013 / 17:15