Gostaríamos de armazenar milhões de arquivos de texto em um sistema de arquivos Linux, com o objetivo de poder compactar e servir uma coleção arbitrária como um serviço. Tentamos outras soluções, como um banco de dados de chave / valor, mas nossos requisitos de simultaneidade e paralelismo tornam a melhor escolha usar o sistema de arquivos nativo.
A maneira mais direta é armazenar todos os arquivos em uma pasta:
$ ls text_files/
1.txt
2.txt
3.txt
o que deve ser possível em um sistema de arquivos EXT4 , que não tem limite para o número de arquivos em uma pasta.
Os dois processos de FS serão:
- Escreva um arquivo de texto a partir do scrape da web (não deve ser afetado pelo número de arquivos na pasta).
- Zip arquivos selecionados, fornecidos pela lista de nomes de arquivos.
Minha pergunta é: o armazenamento de até dez milhões de arquivos em uma pasta afetará o desempenho das operações acima, ou o desempenho geral do sistema, de maneira diferente da criação de uma árvore de subpastas para os arquivos residirem?
ls -l
ou qualquer outra coisa que seja stat
cada inode no diretório (por exemplo, bash
globbing / tab tab) será artificialmente mais rápido do que depois de algum desgaste (apague alguns arquivos, escreva alguns novos). O ext4 pode se sair melhor com isso do que o XFS, porque o XFS aloca espaço dinamicamente para inodes x dados, para que você possa acabar com inodes mais dispersos, eu acho. (Mas esse é um palpite puro baseado em muito pouco conhecimento detalhado; eu mal usei o ext4). Vá com abc/def/
subdiretórios.
ZipOutputStream
rapidamente, superaria praticamente qualquer sistema de arquivos nativo gratuito do Linux - duvido que você queira pagar pelo GPFS da IBM. O loop para processar um conjunto de resultados JDBC e criar esse fluxo zip é provavelmente apenas de 6 a 8 linhas de código Java.
dir_index
, que geralmente é ativado por padrão, agiliza as pesquisas, mas pode limitar o número de arquivos por diretório.