12000 fichiers dans un repertoire

12000 fichiers dans un repertoire - Divers - Programmation

Marsh Posté le 05-03-2008 à 16:08:27    

Bonjour, sous Windows avec système ntfs je souhaite mettre à disposition via un serveur de fichier (conçu en C) 12000 fichiers de 5ko max.
tout d'abord, au niveau du FS NTFS, n'y a-t-il pas un risque de stocker autant de petits fichiers dans un même répertoire ?
(chaque fichier à un nom unique)
j'ai testé 200 fopen sur un repertoire de 2000,4000,8000 et enfin 12000 fichier de 1mo sans différence notables.
lors des fopen, il y a t-il une recherche de la part de l'OS du fichier en question ?  
12000 fichiers c'est un début, cela pourrait augmenter assez rapidement.
j'ai un peu peur de stocker autant de fichier dans un seul et même répertoire : déjà à 12000 l'explorateur windows à un peu de mal
j'imagine les ravages d'un crash windows (coupure de courant par ex) suivis d'un bon vieux scandisk.
J'ai pensé a 2 autres solutions de stockage
- creer une image ISO de tous mes fichier et la monter avec un lecteur virtuel
- stocker le tout en base (mysql)
qu'en pensez vous ?

Reply

Marsh Posté le 05-03-2008 à 16:08:27   

Reply

Marsh Posté le 05-03-2008 à 20:36:54    

Hello,
 
pourquoi ne pas créer une arborescence ?
 
un dossier "a" pous les fichiers commencant par "a", ....
et eventuellement une sous arbo pour la deuxième lettre.
 
Ca me parait être la solution la plus simple à implémenter et ce quel que soit le langage...
 
@+

Reply

Marsh Posté le 06-03-2008 à 11:22:59    

J'ai déjà eu ce genre de problème et on avait résolu ça en faisant une arborescence de fichier :
 - le répertoire de base contient 256 répertoires nommés de '00' à 'FF'
 - chaque répertoire contient 256 répertoires
 
Ensuite pour savoir dans quel répertoire mettre un fichier il suffit de faire un hash du nom du fichier (SHA-1 ou MD5) et récupérer les 4 premiers caractères pour en déduire le chemin.
 
Exemple :
Un fichier nommé "Zorglub.txt" donnera le hash suivant EDC329B1DEA415CC8F2800B72234D8DB25BDAEAA et ira donc dans le répertoire ED/C3
 
Bien sur avec une telle architecture, on peut gérer un nombre pharaonique de fichier, si pour toi, 12000 fichiers c'est le max, tu peux te contenter de répertoires à 1 seul caractères (de '0' à 'F')
et le fichier exemple ira dans le répertoire E/D.
 
Par contre, pour avoir une recherche efficace d'un fichier, il faut connaître son nom exact car faire une recherche dans plus de 65000 répertoires, c'est pas tip top :)
 
Pour info, si tu prends des répertoires à 1 caractère, ça te fait quand même 256 répertoires différents et avec 12000 fichiers, tu auras une moyenne de 46 fichiers par répertoire


Message édité par Bidem le 06-03-2008 à 11:29:21
Reply

Marsh Posté le 06-03-2008 à 11:39:47    

bah trouve toi la doc sur les perfs / limites de NTFS. Sur d'autres FS genre ext3 / reiserfs, ça ne pose aucun problème ni de perf ni de rien.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed