estrutura de pastas ideal para armazenar arquivos de 100k em um drive USB

3

Eu preciso armazenar 100k arquivos (cerca de 40GB) em uma unidade USB. Cada arquivo tem um int id exclusivo (por exemplo, 45000).

A opção 1 é colocar todos os arquivos em uma única pasta:

root/
root/1.pdf
root/2.pdf
root/3.pdf
...
root/567.pdf
root/568.pdf
root/569.pdf
...
root/10001.pdf
root/10002.pdf
root/10003.pdf
...
root/99998.pdf
root/99999.pdf
root/100000.pdf

A opção dois é criar uma hierarquia de pastas [1-9][0-9]* com base nesse ID:

root/
root/1/file.pdf
root/2/file.pdf
root/3/file.pdf
...
root/5/6/7/file.pdf
root/5/6/8/file.pdf
root/5/6/9/file.pdf
...
root/1/0/0/0/1/file.pdf
root/1/0/0/0/2/file.pdf
root/1/0/0/0/3/file.pdf
...
root/9/9/9/9/8/file.pdf
root/9/9/9/9/9/file.pdf
root/1/0/0/0/0/0/file.pdf

Qual opção será melhor dimensionada? Eu posso entender que a segunda opção exigirá toneladas de pastas, mas cada pasta conterá no máximo 10 pastas e 1 arquivo. A manutenção não será um problema, pois tudo será controlado por um aplicativo.

Note que esta é uma unidade USB no linux e com base no acima eu também gostaria de saber se eu deveria ir com FAT32 ou NTFS.

    
por cherouvim 29.12.2010 / 14:52

4 respostas

6

Eu recomendaria o ext3 / 4 para uso com o Linux como minha preferência pessoal.

Para a estrutura de arquivos, eu recomendaria a opção número 3 (um saldo de profundidade de diretórios e arquivos por diretório). Isso é apenas sobre a escolha de uma estrutura de dados de árvore . Para conseguir isso para os arquivos eu faria um hash md5sum de cada arquivo e usaria os primeiros x caracteres de cada arquivo como diretórios. Os caracteres serão sempre caracteres hexideclarais, de modo que cada ramificação terá 16 diretórios. O número de caracteres que você escolheu será a altura da estrutura da árvore.

Por exemplo:

kbrandt@alpine:~/scrap$ md5sum y.tab.h
03b01228467fbe94f8fedd9fcbb6d470  y.tab.h

Entraria em algo como ./0/3/b/y.tab.h .

Como pré-criar diretórios no linux para armazenamento de arquivos? mostra como precrear os diretórios.

Esta é uma solução genérica que funciona muito bem para muitos casos de uso e deve criar uma boa distribuição de arquivos.

    
por 29.12.2010 / 15:20
3

Algum nível de sistema de árvore de pastas é definitivamente recomendado; evite colocar mais de 10k arquivos por pasta. Não use FAT se NTFS ou EXT funcionarem.

    
por 29.12.2010 / 14:55
2
  • Ext2: deve usar diretórios. Os arquivos são pesquisados digitalizando uma lista de entradas.
  • Ext3: Você pode despejar todos eles no diretório raiz. A estrutura do HTree tornará o acesso razoavelmente rápido. Eu recomendo isso.
  • FAT32: Eu sei menos sobre isso, mas dado o histórico de limites de entrada de diretório, eu presumo que ele age muito como Ext2.
  • NTFS: Evite com o Linux, a menos que você precise de compatibilidade com o Windows. Usa árvores B +, que devem ser razoavelmente rápidas.

Nos casos em que você estiver usando uma estrutura de diretórios, colocaria 100 a 200 arquivos no diretório. Então, no nível superior, talvez isso:

[0-99] #Directory entries
[0-99] #File entries

E abaixo disso ...

[0-99] #Directory entries
[directory prefix][0-99] #File entries -- so in /37/76, one might find 377692 .pdf
    
por 29.12.2010 / 15:53
0

O FAT fica mais lento à medida que o número de arquivos no disco aumenta e não por diretório, portanto você não deve ter nenhuma diferença.

Leia este artigo sobre o FAT32

    
por 29.12.2010 / 15:08