Quantos arquivos em um diretório são muitos? (Download de dados da net)

17

Saudações

Estou escrevendo alguns scripts para processar imagens de vários sites de fotos. No momento, estou armazenando todos esses dados em arquivos de texto individuais no mesmo diretório.

O diretório é acessível pela web. Um usuário final faz uma chamada para um serviço da web que retorna o caminho para o arquivo que o usuário precisará.

Eu queria saber em que estágio eu veria um impacto no desempenho tendo todos esses arquivos no mesmo diretório? (Se houver)

    
por steve 30.12.2009 / 14:50

7 respostas

11

O desempenho varia de acordo com o sistema de arquivos que você está usando.

  • FAT: esqueça :) (ok, acho que o limite é de 512 arquivos por diretório)
  • NTFS: Embora possa armazenar 4 bilhões de arquivos por pasta, ela degrada de forma relativamente rápida - em torno de mil você começará a notar problemas de desempenho, vários milhares e verá o explorador parecer travar por um bom tempo.
  • EXT3: o limite físico é de 32.000 arquivos, mas o perf sofre após vários milhares de arquivos também.

  • EXT4: teoricamente ilimitado

  • ReiserFS, XFS, JFS e BTRFS: esses são bons para muitos arquivos em um diretório, pois são mais modernos e projetados para lidar com muitos arquivos (os outros foram criados nos dias em que os HDDs eram medido em MB não GB). O desempenho é muito melhor para muitos arquivos (junto com o ext4), pois ambos usam um algoritmo de tipo de pesquisa binária para obter o arquivo desejado (os outros usam um arquivo mais linear).

por 30.12.2009 / 17:55
5

Eu armazeno imagens para veiculação por um servidor da web e tenho mais de 300.000 imagens em um diretório no EXT3. Não vejo problemas de desempenho. Antes de configurar isso, fiz testes com 500k imagens em um diretório e acessei aleatoriamente os arquivos pelo nome, e não houve lentidão significativa com 500k sobre 10k imagens no diretório.

A única desvantagem que vejo é que para sincronizar os novos com um segundo servidor eu tenho que rodar rsync em todo o diretório, e não posso simplesmente dizer para sincronizar um subdiretório contendo os milhares mais recentes ou mais.

    
por 31.12.2009 / 11:44
3

A quantidade de arquivos em uma pasta pode, teoricamente, ser ilimitada. No entanto, toda vez que o sistema operacional acessar a pasta específica para procurar arquivos, ele precisará processar todos os arquivos da pasta. Com menos de 500 arquivos, você pode não notar nenhum atraso. Mas quando você tem dezenas de milhares de arquivos em uma única pasta, um comando de lista de pastas simples (ls ou dir) pode demorar muito. Quando essas pastas podem ser acessadas através do FTP, será realmente muito lento ...

Os problemas de desempenho não dependem realmente do seu sistema operacional, mas da velocidade do processador do sistema, das capacidades de disco e da memória. Se você tiver muitos arquivos, convém combiná-los em um único arquivo e usar um sistema de arquivamento otimizado para armazenar muitos dados. Isso pode ser um arquivo ZIP, mas, melhor ainda, armazená-los como blobs em um banco de dados com o nome do arquivo como chave primária.

    
por 30.12.2009 / 15:21
1

Minha regra é dividir pastas se houver mais de 1000 arquivos e a pasta for procurada (por exemplo, pela Internet ou pelo Explorer) ou 5000 arquivos.

    
por 30.12.2009 / 18:04
0

Como @skaffman aponta, os limites dependem do sistema operacional. Você provavelmente será afetado por limites em sistemas operacionais mais antigos. Lembro-me de uma versão antiga do Solaris estava limitada a 32768 arquivos por diretório.

A solução usual é usar algum tipo de hashing, ou seja, o servidor imap Cyrus divide os usuários por um hash alfabético:

/var/spool/imap/a/user/anna/
/var/spool/imap/a/user/albert/
/var/spool/imap/d/user/dan/
/var/spool/imap/e/user/ewan/
    
por 30.12.2009 / 15:07
0

Se você está acessando diretamente um arquivo, o número de arquivos em um diretório não é um problema de velocidade.

O número de arquivos que você pode criar em um único diretório depende do sistema de arquivos que você está usando. Se você está listando todos os arquivos no diretório ou pesquisando, ordenando, etc., ter muitos arquivos retardará essas operações.

gbjbaanb está errado em sua resposta sobre o tamanho máximo do arquivo ext3. Geralmente ext limita o número de arquivos em seu disco em geral. Você não pode criar mais arquivos, então você tem inodes na sua tabela de inode. Ele está correto em sugerir reiserfs para mais desempenho com muitos arquivos

    
por 03.02.2010 / 15:55
0

Pasta marcada com arquivos 10K em NTFS (Windows 7, 64 bits). A pasta com imagens de 10K em qualquer visualização (Lista, Ícone, etc.) funciona e rola sem qualquer atraso razoável.

    
por 04.12.2015 / 03:31