Gerencio um aplicativo que contém um armazenamento de arquivos no qual todos os arquivos são armazenados com os nomes de arquivos iguais às somas md5. Todos os arquivos são armazenados em um diretório. Atualmente, existem milhares, mas em breve devem haver milhões de arquivos no servidor. O servidor atual está executando o Ubuntu 11.10 em um sistema de arquivos ext4.
Alguém me disse que não é aconselhável colocar muitos arquivos em um diretório, pois isso criará um aumento significativo no tempo e na confiabilidade da pesquisa (ele tinha uma história sobre o máximo de arquivos que um único diretório poderia apontar, resultando em uma grande lista vinculada). Em vez disso, ele sugeriu criar subdiretórios com, por exemplo, substrings do nome do arquivo. No entanto, isso tornará algumas coisas no meu aplicativo muito mais complicadas.
Isso ainda é verdade ou os sistemas de arquivos modernos (por exemplo, ext4) têm maneiras mais eficientes de lidar com isso e escalar naturalmente? A Wikipedia tem alguns detalhes sobre os sistemas de arquivos, mas na verdade não diz nada sobre o máximo de arquivos por diretório ou tempos de pesquisa.
fonte
Os sistemas de arquivos modernos lidam com diretórios muito grandes muito bem, até milhões de arquivos. Mas ferramentas convencionais não. Por exemplo, listar um diretório tão grande com "ls" levaria muito tempo, pois normalmente leria o diretório inteiro e o classificava (embora você possa usar ls -f para evitar a classificação). Não começaria a exibir arquivos até que todos sejam lidos. Dividir os nomes ajuda em alguns casos, mas não em todos (por exemplo, a replicação rsync ainda pode precisar coletar a árvore inteira de nomes).
fonte
Posso sugerir o uso de um banco de dados SQL? Isso provavelmente transformaria essa fraqueza percebida em seu aplicativo em uma força.
fonte