Efetivamente manipular mais de 2 milhões de arquivos

5

Eu tenho um banco de dados baseado em arquivo que tem cerca de 2 milhões de arquivos armazenados em 3 níveis de subdiretórios.

2/2/6253
2/2/6252
...

O arquivo a varia de 30 bytes a 60 KB. DB inteiro é somente leitura. DB tem cerca de 125 Gigabytes.

Adicionado: Todos os arquivos são compactados por zlib (python)

Eu quero lidar com tudo isso como um arquivo com sistema de arquivos. Qual sistema de arquivos seria a minha melhor escolha?

No momento, uso o seguinte script:

dd if=/dev/zero of=/my_file.iso bs=1024K count=60000
mkfs.ext4 -f /my_file.iso
mount -o loop /my_file.iso /mnt/
    
por Worker 04.05.2015 / 14:29

4 respostas

7

Você provavelmente só quer usar o XFS.

É bem capaz do que você está pedindo e faz o trabalho.

Não há razão para complicar isso com sistemas de arquivos menos usados, que podem vir com outras compensações.

Por favor, veja: Como o número de subdiretórios afeta o desempenho de leitura / gravação de unidade no Linux? e O impacto de um alto diretório para taxa de arquivos no XFS

Se você quiser algo mais esotérico, o ZFS zvols com um sistema de arquivos no topo poderia fornecer uma alternativa interessante ( para propósitos de compressão, integridade e portabilidade ).

Veja aqui: Sistema de arquivos de compressão transparente em conjunto com ext4

    
por 04.05.2015 / 15:36
2

Se for somente leitura, por que não usar um arquivo ISO? Você pode usar genisoimage ou mkisofs .

Se você quiser compactar tudo, você também pode usar squashfs , outro sistema de arquivos somente leitura com taxa de compressão muito alta.

    
por 04.05.2015 / 15:08
2

Vendo o número de arquivos pequenos, eu consideraria o uso do SquashFS. Especialmente se você tiver CPU suficiente (ou seja, sem Pentium III ou 1GHz ARM).

Dependendo do tipo de dados armazenados, o SquashFS pode reduzir muito seu tamanho e, portanto, a E / S ao lê-lo. A única desvantagem é o uso da CPU na leitura. Por outro lado, qualquer CPU moderna pode descomprimir a velocidades que superam em muito o HDD e provavelmente até o SSD.

Como outra vantagem - você economiza espaço / largura de banda e / ou tempo gasto na compactação após a transferência.

Alguns benchmarks , comparando-o com o ISO e outros meios similares. Tal como acontece com todos os benchmark, tome-o com um grão de sal e melhor, fake o seu próprio. ; -)

Editar: dependendo das circunstâncias (e não estou querendo adivinhar aqui) SquashFS sem compactação ( mksquashfs -noD ) poderia superar o ext4, já que o código para leitura deveria ser muito mais simples e otimizado para operação somente leitura. Mas isso é realmente uma questão de referência no seu caso de uso. Outra vantagem é a imagem do SquashFS ser um pouco maior que seus dados. Com o Ext4, você deve sempre criar um dispositivo de loop maior. A desvantagem é, claro, que é bastante desconfortável, quando você precisa alterar os dados. Isso é muito mais fácil com o ext4.

    
por 04.05.2015 / 15:16
1

Não tenho certeza se isso se ajusta ao seu objetivo, mas você considerou tar para combinar vários arquivos? Isso pode diminuir os requisitos de pressão e espaço no sistema de arquivos, e seu aplicativo de banco de dados pode ler dados para um arquivo específico com uma das muitas bibliotecas tar existentes.

Dependendo do seu padrão de acesso, isso pode até aumentar o desempenho.

    
por 04.05.2015 / 21:34