Número de arquivos por diretório

19

Eu tenho um diretório com cerca de 100000 arquivos pequenos (cada arquivo é de 1 a 3 linhas, cada arquivo é um arquivo de texto). Em tamanho, o diretório não é muito grande (<2 GB). Esses dados residem em um servidor NFS administrado profissionalmente. O servidor executa o Linux. Eu acho que o sistema de arquivos é ext3, mas não tenho certeza. Além disso, não tenho acesso root ao servidor.

Esses arquivos são o resultado de um experimento científico em larga escala, sobre o qual não tenho controle. No entanto, tenho que analisar os resultados.

Qualquer operação / processamento de E / S neste diretório é muito, muito lenta. Abrir um arquivo (aberto em python), ler de um arquivo aberto, fechar um arquivo, são todos muito lentos. No bash ls, du, etc. não funcionam.

A questão é:

Qual é o número máximo de arquivos em um diretório no Linux de forma que seja prático processar, abrir, ler, etc? Entendo que a resposta depende de muitas coisas: tipo fs, versão do kernel, versão do servidor, hardware etc. Eu só quero uma regra geral, se possível.

carlosdc
fonte
6
Sua pergunta direta foi bem respondida por Giles, mas, em suma, os sistemas de arquivos Linux substituem mal os bancos de dados quando você usa nomes de arquivos como chaves para pequenos pedaços de dados. Você não controla a geração, mas pode pós-processar os dados em um formulário mais passível de análise; caso contrário, você estará pagando a sobrecarga do sistema de arquivos a cada etapa. Você pode reduzir a sobrecarga, mas pode ser mais feliz se a eliminar.
msw
Além disso, consulte este stackoverflow.com/questions/466521/…
Cristi

Respostas:

22

Como você supõe, depende de muitas coisas, principalmente do tipo e das opções do sistema de arquivos e, até certo ponto, da versão do kernel. Nas séries ext2 / ext3 / ext4, houve uma grande melhoria quando a dir_indexopção apareceu (algum tempo após o lançamento inicial do ext3): faz com que os diretórios sejam armazenados como árvores de pesquisa (acesso logarítmico de tempo) em vez de listas lineares (acesso linear de tempo ) Isso não é algo que você pode ver no NFS, mas se você tiver algum contato com os administradores, poderá solicitar que eles executem tune2fs -l /dev/something |grep features(talvez até convencê-los a atualizar?). Apenas o número de arquivos é importante, não o tamanho.

Mesmo com dir_index, 100000 parece grande. Idealmente, peça aos autores do programa que cria os arquivos para adicionar um nível de subdiretórios. Para nenhuma degradação do desempenho, eu recomendaria um limite de cerca de 1000 arquivos por diretório para ext2 ou ext3 sem dir_indexe 20000 com dir_indexou reiserfs. Se você não pode controlar como os arquivos são criados, mova-os para diretórios separados antes de fazer qualquer outra coisa.

Gilles 'SO- parar de ser mau'
fonte