Question Combien de fichiers puis-je mettre dans un répertoire?


Le nombre de fichiers que je conserve dans un seul répertoire est-il important? Si oui, combien de fichiers dans un répertoire sont trop nombreux et quels sont les impacts de trop de fichiers? (Ceci est sur un serveur Linux.)

Contexte: J'ai un site Web d'album photo, et chaque image téléchargée est renommée en un identifiant de 8 chiffres (par exemple, a58f375c.jpg). Ceci permet d'éviter les conflits de noms de fichiers (si de nombreux fichiers "IMG0001.JPG" sont téléchargés, par exemple). Le nom de fichier d'origine et toutes les métadonnées utiles sont stockés dans une base de données. En ce moment, j'ai environ 1500 fichiers dans le répertoire images. Cela rend la liste des fichiers dans le répertoire (via un client FTP ou SSH) prend quelques secondes. Mais je ne peux pas voir que cela a un effet autre que celui. En particulier, il ne semble pas y avoir d'impact sur la rapidité avec laquelle un fichier image est servi à l'utilisateur.

J'ai pensé à réduire le nombre d'images en créant 16 sous-répertoires: 0-9 et a-f. Ensuite, je déplacerais les images dans les sous-répertoires en fonction du premier chiffre hexadécimal du nom de fichier. Mais je ne suis pas sûr qu'il y ait une raison de le faire, sauf pour la liste occasionnelle du répertoire via FTP / SSH.


496
2018-01-21 18:58


origine


Réponses:


FAT32:

  • Nombre maximum de fichiers: 268 173 300
  • Nombre maximum de fichiers par répertoire: 216- 1 (65 535)
  • Taille maximale du fichier: 2 GiB - 1 sans LFS, 4 GiB - 1 avec

NTFS:

  • Nombre maximum de fichiers: 232- 1 (4 294 967 295)
  • Taille maximale du fichier
    • Implémentation: 244- 26 octets (16 TiB - 64 Ko)
    • Théorique: 264- 26 octets (16 EiB - 64 Ko)
  • Taille maximale du volume
    • Implémentation: 232- 1 grappe (256 TiB - 64 Ko)
    • Théorique: 264- 1 grappes

ext2:

  • Nombre maximum de fichiers: 1018
  • Nombre maximum de fichiers par répertoire: ~ 1,3 × 1020 (problèmes de performance après 10 000)
  • Taille maximale du fichier
    • 16 Gio (taille de bloc de 1 Ko)
    • 256 Gio (taille de bloc de 2 Ko)
    • 2 TiB (taille de bloc de 4 KiB)
    • 2 TiB (taille de bloc de 8 KiB)
  • Taille maximale du volume
    • 4 TiB (taille de bloc de 1 Ko)
    • 8 TiB (taille de bloc de 2 KiB)
    • 16 TiB (taille de bloc de 4 KiB)
    • 32 TiB (taille de bloc de 8 KiB)

ext3:

  • Nombre maximum de fichiers: min (volumeSize / 213, NumberOfBlocks)
  • Taille maximale du fichier: même que ext2
  • Taille maximale du volume: même que ext2

ext4:

  • Nombre maximum de fichiers: 232- 1 (4 294 967 295)
  • Nombre maximum de fichiers par répertoire: illimité
  • Taille maximale du fichier: 244- 1 octet (16 TiB - 1)
  • Taille maximale du volume: 248- 1 octet (256 TiB - 1)

643
2018-01-21 19:16



J'ai eu plus de 8 millions de fichiers dans un seul répertoire ext3. libc readdir() qui est utilisé par find, ls et la plupart des autres méthodes abordées dans ce fil de discussion pour répertorier les grands répertoires.

La raison ls et find sont lents dans ce cas est que readdir() lit seulement 32K d'entrées de répertoire à la fois, donc sur les disques lents il faudra beaucoup de lectures pour lister un répertoire. Il existe une solution à ce problème de vitesse. J'ai écrit un article assez détaillé à ce sujet à: http://www.olark.com/spw/2011/08/you-can-list-a-directory-with-8-million-files-but-not-with-ls/

La clé à emporter est: utiliser getdents() directement - http://www.kernel.org/doc/man-pages/online/pages/man2/getdents.2.html plutôt que tout ce qui est basé sur la libc readdir() vous pouvez donc spécifier la taille du tampon lors de la lecture des entrées du répertoire à partir du disque.


165
2017-08-11 20:19



Cela dépend un peu du système de fichiers spécifique utilisé sur le serveur Linux. De nos jours, la valeur par défaut est ext3 avec dir_index, ce qui rend la recherche de répertoires volumineux très rapide.

Donc, la vitesse ne devrait pas être un problème, autre que celui que vous avez déjà noté, c'est-à-dire que les inscriptions prendront plus de temps.

Il y a une limite au nombre total de fichiers dans un répertoire. Je crois me souvenir que ça fonctionne vraiment jusqu'à 32 000 fichiers.


55
2018-01-21 19:07



J'ai un répertoire avec 88 914 fichiers. Comme vous, ceci est utilisé pour stocker des vignettes et sur un serveur Linux.

Les fichiers listés via FTP ou une fonction PHP est lente oui, mais il y a aussi une baisse de performance sur l'affichage du fichier. par exemple. www.website.com/thumbdir/gh3hg4h2b4h234b3h2.jpg a un temps d’attente de 200 à 400 ms. Comme une comparaison sur un autre site, j'ai avec environ 100 fichiers dans un répertoire l'image est affichée après seulement ~ 40ms d'attente.

J'ai donné cette réponse car la plupart des gens viennent d'écrire comment les fonctions de recherche d'annuaire vont fonctionner, que vous n'utiliserez pas sur un dossier de pouce - affichage statique des fichiers, mais seront intéressés par la performance de la façon dont les fichiers peuvent réellement être utilisés .


54
2017-07-07 08:33



Gardez à l'esprit que sous Linux si vous avez un répertoire avec trop de fichiers, le shell peut ne pas être capable d'étendre les caractères génériques. J'ai ce problème avec un album photo hébergé sur Linux. Il stocke toutes les images redimensionnées dans un seul répertoire. Bien que le système de fichiers puisse gérer de nombreux fichiers, le shell ne le peut pas. Exemple:

-shell-3.00$ ls A*
-shell: /bin/ls: Argument list too long

ou

-shell-3.00$ chmod 644 *jpg
-shell: /bin/chmod: Argument list too long

47
2018-01-21 19:57



Je travaille sur un problème similaire en ce moment. Nous avons une structure de répertoire hiérarchique et utilisons des identifiants d'image comme noms de fichiers. Par exemple, une image avec id=1234567 est placé dans

..../45/67/1234567_<...>.jpg

en utilisant les 4 derniers chiffres pour déterminer où va le fichier.

Avec quelques milliers d'images, vous pouvez utiliser une hiérarchie à un niveau. Notre administrateur système n'a suggéré que quelques milliers de fichiers dans un répertoire donné (ext3) pour des raisons d'efficacité / de sauvegarde / quelles que soient les autres raisons qu'il avait en tête.


21
2018-01-21 20:52



Pour ce que ça vaut, je viens de créer un répertoire sur un ext4 système de fichiers avec 1.000.000 de fichiers, puis accédé au hasard ces fichiers via un serveur web. Je n'ai pas remarqué de prime sur l'accès à ceux qui ont (disons) seulement 10 fichiers là-bas.

C'est radicalement différent de mon expérience en faisant cela sur ntfs il y a quelques années.


15
2017-11-10 18:39