Armazenar arquivos em um diretório... há limites?

Armazenar arquivos em um diretório... há limites?

Estou usando o CentOS 5 com Plesk 9 (64 bits), estou administrando um site onde os usuários farão upload de fotos. Com um sistema operacional de 64 bits, há algum limite de quantos arquivos posso armazenar? Tudo o que me importa é o desempenho e a entrega dos arquivos. Eu preferiria não ter 4 diretórios com arquivos dispersos. No entanto, espero que em algum momento possa ter de 200 a 300 mil imagens.

Responder1

Se você estiverusando ext3, Eu encontreiesta citação(aviso: site em espanhol)

"Há um limite de 32k (32768) subdiretórios em um único diretório, uma limitação provavelmente de interesse apenas acadêmico, já que muitas pessoas nem possuem tantos arquivos (embora grandes servidores de e-mail possam precisar manter isso em mente). O A especificação do inode ext2 permite que mais de 100 trilhões de arquivos residam em um único diretório"

Leitura adicionalmostrou que ext3nãotem uma limitação de 32K, que pode ser comprovada empiricamente com

a=0; i=1; while [ $a == 0 ]; do touch $i; a=$?; let i++; done

mas issotemum limite de pasta de 32K para pasta, que pode ser testado com

a=0; i=1; while [ $a == 0 ]; do mkdir $i; a=$?; let i++; done

Esta afirmação (infundada)diz que

ReiserFS não tem nenhum problema com centenas de milhares de arquivos em um único diretório. flabdablet - 1º de fevereiro de 2007

Essa questãodo site irmão stackoverflow.com também pode ajudar.

Em geral:

  • éum limite para a quantidade de diretórios,
  • Vocêdevemantenha seus arquivos/diretórios abaixo de 32K, maspodeir muito além,
  • O sistema de arquivos que você está usando é importante.

Responder2

Isso depende muito do sistema de arquivos que você usa. Certas versões mais antigas do ext3 eram atrozes com isso, e foi assim que surgiram os btrees. Reiser tem muito mais desempenho com um grande número de arquivos como esse. Antigamente, eu tinha um diretório Novell NSS em um servidor NetWare com 250.000 arquivos de 4kb devido a um erro do GroupWise e funcionava perfeitamente. Enumerar o diretório foi uma droga, mas acessar um arquivo específico naquele diretório funcionou tão rápido quanto você esperava. Como isso foi há 8 anos, devo presumir que os sistemas de arquivos Linux modernos podem lidar com isso com segurança.

Responder3

Depende do sistema de arquivos que você está usando, não do sistema operacional de 64 bits. Com cada sistema de arquivos, chegará um ponto em que os grandes custos do algoritmo usado para pesquisar o diretório levarão a melhor sobre o computador.

Se você puder dividir a hierarquia de arquivos em apenas uma hierarquia de duas (2) camadas, verá melhor escalabilidade a longo prazo.

Responder4

Se você estiver indo além de algumas centenas de imagens, considere definitivamente duas coisas:

  1. Hierarquias aninhadas com nomes de arquivos com hash;
  2. Não usando ext3

Eu recomendaria usar o XFS ou, na sua falta, o ReiserFS, com uma hierarquia de diretórios de dois ou três níveis dividida por pares de dois bytes. por exemplo

11/2f/112f667c786eac323e300632b5b2a78d.jpg
49/2f/49ef6eb6169cc57d95218c842d3dee5c.jpg
0a/26/0a26f9f363f1d05b94ceb14ff5f27284.jpg

Isso lhe dará 256 diretórios nos primeiros níveis, dividindo as imagens em um total de 65.535 diretórios separados (o que é mais que suficiente para 100-200 mil imagens e além). Isso tornará as coisas muito mais rápidas e escalonáveis, além de facilitar muito a manutenção posteriormente.

informação relacionada