Tenho mais de 100.000 arquivos em um diretório no meu MacOS X e parece que é lento para o meu script ler um arquivo neles.
Existe alguma limitação ou recomendação para ter tantos arquivos? Devo dividi-los em alguns diretórios?
A limitação que encontrei foi que não posso mv * foo
para todos os 100.000 arquivos. Ele mostra um erro, dizendo "argumento muito longo". Funciona com aproximadamente menos de 20.000 arquivos.
macos
mac
filesystems
Daisuki Honey
fonte
fonte
*
ou?
como parte de um argumento para um comando, o sistema operacional pesquisa no diretório inteiro por arquivos correspondentes (lento) e, em seguida, substitui o argumento por uma lista de todos os arquivos correspondentes (longos), que são transmitidos para o diretório comando. Você pode fazer melhor com um loop ou com vários comandos mv, por exemplomv a* foo && mv b* foo
,.Respostas:
De acordo com esta resposta do Stack Overflow e detalhes específicos no site da Apple , uma pasta individual pode conter até 2,1 bilhões de itens.
Dito isto, apenas porque ele pode armazenar até 2,1 bilhões de itens não significa que ele possa manter o desempenho nesse nível. De acordo com a Wikipedia ; ênfase é minha:
Portanto, o desempenho é degradado naturalmente, porque o arquivo de catálogo pode ser usado apenas por um programa por vez. E se o diretório aumentar de tamanho, o risco / degradação causado por esse problema aumentará apenas; mais arquivos significa uma chance maior de os programas acessarem arquivos nesse diretório. Confirmação adicional dessa ideia aqui ; novamente a ênfase é minha:
fonte
Resposta curta: Bem, se você estiver lendo 100.000 arquivos, posso esperar que o script seja lento.
Resposta longa: Para responder a essa pergunta mais detalhadamente, é necessário examinar o sistema de arquivos em um Mac. Os Macs usam o HFS + ( Hierarchical File System Plus ), que é um sistema de arquivos moderno que possui limitações, mas apenas em situações extremas.
Pela minha experiência, é muito parecido com um sistema de arquivos de registro em diário do Linux EXT. Ele suporta diretórios de montagem, permissões do tipo UNIX, etc. Ele endereçou arquivos em um formato de 32 bits, criando o número máximo de arquivos que podem ser armazenados em um volume 4.294.967.295, de acordo com esta fonte.
O sistema de arquivos começa a quebrar com arquivos maiores que 8 EB nos sistemas modernos e até 2,1 bilhões de arquivos e pastas em um local, conforme descrito aqui .
Dada a maneira como o HFS + - ou realmente qualquer sistema de arquivos é configurado -, ter muitos arquivos em uma pasta não deve fazer nada de 'estranho'.
Honestamente, acho que não haveria uma melhoria no desempenho distribuindo os arquivos por uma hierarquia de pastas mais complexa. Na verdade, essa técnica pode ser menos eficiente porque seu script precisaria fazer chamadas para alterar diretórios no meio do processo.
fonte