Alguma limitação para ter muitos arquivos em um diretório no Mac OS X?

8

Eu 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.

    
por Daisuki Honey 26.11.2014 / 05:07

2 respostas

1

De acordo com esta resposta do Stack Overflow e específica detalhes no site da Apple , uma pasta individual pode conter até 2,1 bilhões de itens.

Dito isso, só porque ele pode armazenar até 2,1 bilhões de itens não significa que ele possa manter o desempenho nesse nível. Segundo a Wikipedia ; ênfase é minha:

The Catalog File, which stores all the file and directory records in a single data structure, results in performance problems when the system allows multitasking, as only one program can write to this structure at a time, meaning that many programs may be waiting in queue due to one program "hogging" the system. It is also a serious reliability concern, as damage to this file can destroy the entire file system.

Portanto, o desempenho é naturalmente degradado graças ao fato de o arquivo de catálogo só poder ser usado por um programa por vez. E se o diretório aumentar de tamanho, o risco / degradação causado por esse problema só aumentará; mais arquivos significa mais uma chance para os programas acessarem arquivos nesse diretório. Mais confirmação da ideia aqui ; mais uma vez a ênfase é minha:

The catalog file is a complicated structure. Because it keeps all file and directory information, it forces serialization of the file system—not an ideal situation when there are a large number of threads wanting to perform file I/O. In HFS, any operation that creates a file or modifies a file in any way has to lock the catalog file, which prevents other threads from even read-only access to the catalog file. Access to the catalog file must be single- writer/multireader.

    
por 26.11.2014 / 06:16
4

Resposta curta: Bem, se você estiver lendo 100.000 arquivos, posso esperar que o script seja lento.

Long Answer: Para responder a essa pergunta mais detalhadamente, você precisa examinar o sistema de arquivos em um Mac. Os Macs usam o HFS + ( Hierarchical File System Plus ), que é um sistema de arquivos moderno que tem limitações, mas apenas em situações extremas. .

Da minha experiência, é muito parecido com um sistema de arquivos com registro no diário do Linux EXT. Ele suporta diretórios de montagem, permissões do tipo UNIX, etc. Ele endereça arquivos em um formato de 32 bits, fazendo com que o número máximo de arquivos que podem ser armazenados em um volume de 4.294.967.295, de acordo com esta fonte.

O sistema de arquivos começa a quebrar com arquivos maiores que 8 EB em sistemas modernos e até 2.1 bilhões de arquivos e pastas em um único 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 'estranho'.

Honestamente, não acho que haveria uma melhoria de desempenho distribuindo os arquivos em uma hierarquia de pastas mais complexa. Na verdade, essa técnica pode ser menos eficiente porque seu script teria que fazer chamadas para alterar diretórios no meio do processo.

    
por 26.11.2014 / 06:16