Question

J'écris une application qui doit stocker beaucoup de fichiers jusqu'à environ 10 millions.

Ils sont actuellement nommés avec un UUID et vont être d'environ 4 Mo chacun mais toujours de la même taille. La lecture et l'écriture de / vers ces fichiers seront toujours séquentielles.

2 questions principales pour lesquelles je cherche des réponses:

1) Quel système de fichiers serait le meilleur pour cela. XFS ou EXT4? 2) serait-il nécessaire de stocker les fichiers sous les sous-répertoires afin de réduire le nombre de fichiers dans un seul répertoire?

Pour la question 2, je note que les gens ont tenté de découvrir la limite XFS pour le nombre de fichiers que vous pouvez stocker dans un seul répertoire et n'ont pas trouvé la limite qui dépasse des millions. Ils n'ont noté aucun problème de performance. Qu'en est-il de sous EXT4?

Googler avec des personnes faisant des choses similaires, certaines personnes ont suggéré de stocker le numéro Inode comme un lien vers le fichier au lieu du nom de fichier pour les performances (c'est dans un index de base de données. Que j'utilise également). Cependant, je ne vois pas une API utilisable pour ouvrir le fichier par numéro Inode. Cela semblait être davantage une suggestion pour améliorer les performances sous EXT3 que je n'ai pas l'intention d'utiliser d'ailleurs.

Quelles sont les limites EXT4 et XFS? Quels avantages de performance y a-t-il de l'un sur l'autre et pourriez-vous voir une raison d'utiliser EXT4 sur XFS dans mon cas?

Était-ce utile?

La solution

Vous devez certainement stocker les fichiers en sous-répertoires.

EXT4 et XFS utilisent tous deux des méthodes de recherche efficaces pour les noms de fichiers, mais si vous avez besoin d'exécuter des outils sur les répertoires tels que ls ou find Vous serez très heureux d'avoir les fichiers en morceaux gérables de 1 000 à 10 000 fichiers.

Le numéro Inode est d'améliorer les performances d'accès séquentielles des systèmes de fichiers EXT. Les métadonnées sont stockées dans des inodes et si vous accédez à ces Inodes hors service, les accédents de métadonnées sont randomisés. En lisant vos fichiers dans Inode Order, vous faites également le séquentiel d'accès des métadonnées.

Autres conseils

Les systèmes de fichiers modernes vous permettront de stocker 10 millions de fichiers dans le même répertoire si vous le souhaitez. Mais les outils (LS et ses amis) ne fonctionneront pas bien.

Je recommanderais de mettre un seul niveau d'annuaires, un nombre fixe, peut-être 1 000 répertoires, et de mettre les fichiers là-dedans (10 000 fichiers sont tolérables pour le shell et "LS").

J'ai vu des systèmes qui créent de nombreux niveaux de répertoires, cela est vraiment inutile et augmente la consommation d'Inode et rend la traversée plus lente.

Les fichiers 10M ne doivent pas vraiment être un problème non plus, sauf si vous devez effectuer des opérations en vrac sur eux.

Je m'attends à ce que vous deviez tailler d'anciens fichiers, mais quelque chose comme "TMPWatch" fonctionnera probablement très bien avec les fichiers 10m.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top