Manipulação eficaz de mais de 2 milhões de arquivos

Manipulação eficaz de mais de 2 milhões de arquivos

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

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

O arquivo varia de 30 bytes a 60 KB. Todo o banco de dados é somente leitura. O banco de dados tem cerca de 125 Gigabytes.

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

Quero lidar com tudo isso como um arquivo com sistema de arquivos nele. Qual sistema de arquivos seria minha melhor escolha?

No momento eu 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/

Responder1

Você provavelmente só deseja usar o XFS.

É perfeitamente capaz de fazer o que você está pedindo e faz o trabalho.

Não há razão para complicar isso com sistemas de arquivos menos usados, que podem trazer outras desvantagens.

Por favor, veja:Como o número de subdiretórios afeta o desempenho de leitura/gravação da unidade no Linux? eO impacto de uma alta proporção de diretório para arquivo no XFS

Se você quiser algo mais esotérico, os zvols do ZFS com um sistema de arquivos no topo podem fornecer uma alternativa interessante (para fins de compactação, integridade e portabilidade).

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

Responder2

Vendo a quantidade de arquivos pequenos, consideraria usar o SquashFS. Especialmente se você tiver uma CPU poderosa o suficiente (ou seja, sem Pentium III ou ARM de 1 GHz).

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

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

Alguns benchmarkscomparando-o com ISO e outros meios semelhantes. Como acontece com todo benchmark, aceite-o com cautela e, melhor, falsifique o seu próprio. ;-)

Editar: dependendo das circunstâncias (e não ouso adivinhar aqui) o SquashFS sem compactação ( mksquashfs -noD) pode superar o ext4, já que o código para leitura deve ser muito mais simples e otimizado para operação somente leitura. Mas isso depende realmente de você avaliar seu caso de uso. Outra vantagem é que a imagem do SquashFS é 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.

Responder3

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

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

Responder4

Não tenho certeza se isso atende ao seu propósito, mas você já pensou tarem combinar vários arquivos? Isso pode diminuir a pressão e os requisitos de espaço no sistema de arquivos, e seu aplicativo de banco de dados pode ler dados de um arquivo específico com uma das muitas tarbibliotecas disponíveis.

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

informação relacionada