Nous aimerions stocker des millions de fichiers texte dans un système de fichiers Linux, dans le but de pouvoir compresser et servir une collection arbitraire en tant que service. Nous avons essayé d'autres solutions, comme une base de données clé / valeur, mais nos exigences de concurrence et de parallélisme font de l'utilisation du système de fichiers natif le meilleur choix.
Le moyen le plus simple consiste à stocker tous les fichiers dans un dossier:
$ ls text_files/
1.txt
2.txt
3.txt
ce qui devrait être possible sur un système de fichiers EXT4 , qui n'a pas de limite au nombre de fichiers dans un dossier.
Les deux processus FS seront:
- Écrire un fichier texte à partir du Web scrape (ne devrait pas être affecté par le nombre de fichiers dans le dossier).
- Compressez les fichiers sélectionnés en fonction de la liste des noms de fichiers.
Ma question est la suivante: le stockage d'un maximum de dix millions de fichiers dans un dossier affectera-t-il les performances des opérations ci-dessus, ou les performances générales du système, différemment de la création d'une arborescence de sous-dossiers dans laquelle les fichiers doivent vivre?
ls -l
ou toute autre chose qui se trouve à stat
chaque inode dans le répertoire (par exemple bash
globbing / tabulation) sera artificiellement plus rapide qu'après une certaine usure (supprimez certains fichiers, écrivez-en de nouveaux). ext4 pourrait faire mieux avec cela que XFS, car XFS alloue dynamiquement de l'espace pour les inodes par rapport aux données, donc vous pouvez vous retrouver avec des inodes plus dispersés, je pense. (Mais c'est une pure supposition basée sur très peu de connaissances détaillées; j'ai à peine utilisé ext4). Allez avec des sous- abc/def/
dires.
ZipOutputStream
battrait à peu près n'importe quel système de fichiers natif Linux gratuit - je doute que vous souhaitiez payer pour le GPFS d'IBM. La boucle pour traiter un jeu de résultats JDBC et créer ce flux zip n'est probablement que de 6 à 8 lignes de code Java.
dir_index
, qui est souvent activée par défaut, accélérera les recherches mais peut limiter le nombre de fichiers par répertoire.