Comment Windows avec NTFS fonctionne-t-il avec de gros volumes de fichiers et de répertoires?
Existe-t-il des conseils sur les limites de fichiers ou de répertoires que vous pouvez placer dans un seul répertoire avant de rencontrer des problèmes de performances ou d'autres problèmes?
Par exemple, avoir un dossier contenant 100 000 dossiers à l'intérieur est-il une bonne chose à faire?
windows
performance
filesystems
ntfs
James Newton-King
la source
la source
Réponses:
Voici quelques conseils de quelqu'un avec un environnement dans lequel nous avons des dossiers contenant des dizaines de millions de fichiers.
Pour répondre plus directement à votre question: si vous recherchez 100 000 entrées, pas de souci. Allez vous assommer. Si vous regardez des dizaines de millions d'entrées, alors soit:
a) Prévoyez de les sous-diviser en sous-dossiers (par exemple, disons que vous avez 100 Mo de fichiers. Il est préférable de les stocker dans 1000 dossiers pour ne disposer que de 100 000 fichiers par dossier plutôt que de les stocker dans un seul grand dossier. créera 1000 index de dossier au lieu d'un seul gros qui est plus susceptible d'atteindre la limite du nombre maximum de fragments ou
b) Prévoyez d'exécuter régulièrement contig.exe pour que l'index de votre grand dossier reste défragmenté.
Lisez ci-dessous uniquement si vous vous ennuyez.
La limite réelle n'est pas sur le nombre de fragment, mais sur le nombre d'enregistrements du segment de données qui stocke les pointeurs vers le fragment.
Vous disposez donc d'un segment de données qui stocke des pointeurs vers les fragments des données de l'annuaire. Les données du répertoire stockent des informations sur les sous-répertoires et sous-fichiers que le répertoire est censé avoir stocké. En fait, un répertoire ne «stocke» rien. C'est juste une fonction de suivi et de présentation qui présente l'illusion de la hiérarchie à l'utilisateur puisque le support de stockage lui-même est linéaire.
la source
contig.exe
, ce n'est pas sur mon serveur. Une recherche Google a renvoyé cette page technet qui ne contient aucune mention de sous-répertoires ou de défragmentation d'index de dossier.contig.exe
vers un répertoire, je pense que ça fera l'affaire:contig -a .
donne:C:\temp\viele-Dateien is in 411 fragments Summary: Number of files processed : 1 Average fragmentation : 411 frags/file
c:\my\big\directory
, ouc:\my\big\directory\*
, ou sur$mft
? (ou autre chose?)Il existe également des problèmes de performances avec la création de noms de fichiers courts qui ralentissent les choses. Microsoft recommande de désactiver la création de nom de fichier court si vous avez plus de 300k fichiers dans un dossier [1]. Moins les 6 premiers caractères sont uniques, plus c'est un problème.
[1] Fonctionnement de NTFS sur http://technet.microsoft.com , recherchez "300 000"
la source
If you use large numbers of files in an NTFS folder (300,000 or more), disable short-file name generation for better performance, and especially if the first six characters of the long file names are similar.
- épargne la recherche de l'indice "300 000". BTW: taper "300" sera suffisant (= pas besoin de presse-papiers ici)Je construis une structure de fichiers pour héberger jusqu'à 2 milliards (2 ^ 32) de fichiers et j'ai effectué les tests suivants qui montrent une forte baisse des performances de navigation + lecture à environ 250 fichiers ou 120 répertoires par répertoire NTFS sur un disque SSD ( SSD):
Fait intéressant, le nombre de répertoires et de fichiers n'interfère PAS de manière significative.
Les leçons sont donc:
Voici les données (2 mesures pour chaque fichier et répertoire):
Et voici le code de test:
la source
100 000 devrait être bien.
J'ai (de façon anecdotique) vu des gens avoir des problèmes avec des millions de fichiers et j'ai moi-même eu des problèmes avec Explorer, n'ayant tout simplement pas la moindre idée de la façon de compter au-delà de 60 000 fichiers, mais NTFS devrait être bon pour les volumes dont vous parlez.
Au cas où vous vous poseriez la question, le nombre maximum technique (et je l'espère théorique ) de fichiers est: 4 294 967 295
la source
Pour l'accès local, un grand nombre de répertoires / fichiers ne semble pas être un problème. Cependant, si vous y accédez via un réseau, il y a un impact notable sur les performances après quelques centaines (en particulier lors d'un accès à partir de machines Vista (XP à Windows Server w / NTFS semblait fonctionner beaucoup plus rapidement à cet égard)).
la source
Lorsque vous créez un dossier avec N entrées, vous créez une liste de N éléments au niveau du système de fichiers. Cette liste est une structure de données partagée à l'échelle du système. Si vous commencez ensuite à modifier cette liste en continu en ajoutant / supprimant des entrées, je m'attends au moins à un conflit de verrouillage sur les données partagées. Cette affirmation - en théorie - peut affecter négativement les performances.
Pour les scénarios en lecture seule, je ne peux imaginer aucune raison de dégradation des performances des répertoires avec un grand nombre d'entrées.
la source
J'ai eu une réelle expérience avec environ 100 000 fichiers (chacun plusieurs Mo) sur NTFS dans un répertoire tout en copiant une bibliothèque en ligne.
Il faut environ 15 minutes pour ouvrir le répertoire avec Explorer ou 7-zip.
L'écriture d'une copie de site avec
winhttrack
sera toujours bloquée après un certain temps. Il traitait également du répertoire, contenant environ 1 000 000 fichiers. Je pense que le pire, c'est que le MFT ne peut être parcouru que séquentiellement.Ouvrir le même sous ext2fsd sur ext3 a donné presque le même timing. Le passage à reiserfs (et non à reiser4fs) peut probablement aider.
Essayer d'éviter cette situation est probablement le meilleur.
Pour vos propres programmes, l'utilisation de blobs sans fs pourrait être bénéfique. C'est ainsi que Facebook le fait pour stocker des photos.
la source