Você está enfrentando um problema bem conhecido. Embora existam sistemas de arquivos que acomodem milhões de arquivos (XFS e ReiserFS no Linux e NTFS no Windows), eles ainda precisam vasculhar a pilha de nomes de arquivos que pesquisam esse arquivo. Só porque acomoda muitos arquivos não significa que será rápido. Eu solicitei propriedades de arquivo em um servidor Windows com apenas dezenas de milhares de arquivos, e esse foi praticamente um negócio de "ir almoçar e voltar". Eu também tentei obter um diretório listado via ls
e descobri que os 20.000 arquivos estranhos nele requeriam cerca de 2 minutos de processamento em um servidor ocupado (o sistema de arquivos é o Ext3).
Felizmente, existe uma solução, embora possa ser um pouco diferente do que você espera.
Use subdiretórios adicionais.
Esta é uma estratégia bem conhecida e tem sido usada com sucesso em vários programas. Por exemplo, o Squid usa camadas de subdiretórios para lidar exatamente com o mesmo problema pelo mesmo motivo - centenas de milhares de arquivos que precisam ser acessados rapidamente. Usando apenas uma camada adicional de diretórios, eles podem gerenciar milhões com facilidade.
Também é muito mais comum em páginas da web que você esperaria. Toda vez que você vê uma URL semelhante a esta (negrito adicionado para ênfase):
link 09/08 / a4 /gibberish-page-key-abc123.html
... está realizando o mesmo efeito. Não se trata de rastrear artigos por ano e mês, trata-se de melhorar o desempenho de carregamento da página no cliente reduzindo o tempo que o servidor da Web gasta procurando pela página .
Se for possível, evite 100.000 arquivos por diretório. Tente apontar para 1.000 - 10.000. Se você não tiver certeza de como conseguir isso, apenas pegue a primeira letra do arquivo e torne-o um diretório adicional, por exemplo
http://mysite.com/subpage/abcdefg1234567.php
torna-se
http://mysite.com/subpage/a/abcdefg1234567.php
Se isso não reduzir a contagem de arquivos, você poderá usar a segunda ou a terceira letra, etc., até que a contagem de arquivos diminua para um tamanho gerenciável.
http://mysite.com/subpage/a/b/c/abcdefg1234567.php
Este processo requer um mínimo de codificação de sua parte, é facilmente acomodado pelos nomes de arquivos e irá melhorar seus tempos de acesso independentemente do sistema de arquivos que você usa . >