9
votes

Stocker un grand nombre de fichiers dans le système de fichiers

J'ai des millions de "forts> fichiers audio , générés par la base de GUID ( http: //fr.wikipedia.org/wiki/globally_unique_identifier ). Comment puis-je stocker ces fichiers dans le système de fichiers afin que je puisse efficacement Ajoutez plus de fichiers dans le même système de fichiers et peut recherche pour un fichier particulier efficacement . Aussi il devrait être évolutif à l'avenir.

Les fichiers sont nommés sur la base du GUID (nom de fichier unique).

par exemple:

[1] 63F4C070-0AB2-102D-ADCB-0015F22E2E5C

[2] BA7CD610-F268-102C-B5AC-0013D4A7A2D6

[3] D03CF036-0AB2-102D-ADCB-0015F22E2E5C

[4] D3655A36-0AB3-102D-ADCB-0015F222E2E5C

pl. Donnez votre point de vue.

PS: J'ai déjà traversé < stocker un grand nombre d'images >. J'ai besoin de la structure de données / algorithme / logique / logique afin qu'elle puisse aussi être évolutive à l'avenir.

Edit1: Les fichiers sont d'environ 1-2 millions de numéros et que le système de fichiers est EXT3 (CENTOS).

merci,

naveen


0 commentaires

4 Réponses :


1
votes

J'essaierais de garder le nombre de fichiers dans chaque répertoire à un numéro gérable. Le moyen le plus simple de le faire est de nommer le sous-répertoire après les 2-3 premiers caractères du GUID.


0 commentaires

16
votes

C'est très facile - Construisez un arbre de dossier basé sur des pièces de valeurs indicatrices.

Par exemple, faire 256 dossiers nommés d'après le premier octet et ne stockez que des fichiers qui ont un GUI à commencer par cet octet. Si cela reste trop de fichiers dans un dossier - faites la même chose dans chaque dossier pour le deuxième octet du GUID. Ajouter plus de niveaux si nécessaire. La recherche d'un fichier sera très rapide.

En sélectionnant le nombre d'octets que vous utilisez pour chaque niveau, vous pouvez choisir efficacement la structure de l'arborescence de votre scénario.


4 commentaires

Si la performance est critique, il serait une bonne idée de comparer différents nombres de fichiers dans chaque répertoire.


Si vous avez une structure de répertoire à deux niveaux, 256 ary (telle que le fichier 1 est stocké dans 63/63f4 / 63f4c070 -... ), puis avec 2 millions de fichiers, vous obtiendrez environ 30 Dans chaque répertoire de feuille - qui devrait fonctionner assez bien et à échelle modérément bien.


@Shachartooth: Pouvez-vous s'il vous plaît expliquer à l'aide d'un exemple pour que cela me donne une image beaucoup plus claire.


@Naveen: Supposons que vous utiliserez deux niveaux, un octet pour chacun. Pour tout GUID, vous obtenez vous créez un dossier sur le niveau supérieur et un autre dans le premier dossier. Donc, pour 7A09BF85-9E98-444-9AB5-A13953E88C3D Vous créez des dossiers 7A et 7A / 09 et mettez le fichier dans le dossier 7A / 09. Si vous recherchez 7A09BF85-9E98-44EA-9AB5-A13953E88C3D, vous regardez si 7A / 09 / 7A09BF85-9E98-44EA-9AB5-A13953E88C3D fichier existe.



0
votes

Tri des fichiers audio en sous-répertoires distincts peut plus lent si dir_index est utilisé sur le volume ext3. (Dir_index: "Utilisez des arbres b hachés à accélérer des recherches dans de grands répertoires.")

Cette commande définira la fonctionnalité Dir_index: Tune2FS -O DIR_IDEX / DEV / SDA1


0 commentaires

0
votes

Construisez la hiérarchie de dossiers de Niveau de Niveau profond pour stocker vos fichiers. Les noms des dossiers imbriqués seront les premiers n octets du nom de fichier correspondant. Par exemple: pour stocker un fichier "63F4C070-0AB2-102D-ADCB-0015F22E2E5C" dans une hiérarchie de dossiers à quatre niveaux, construisez 6/3 / f / 4 et placez ce fichier dans cette hiérarchie. La profondeur de la hiérarchie dépend du nombre maximal de fichiers que vous pouvez avoir dans votre système. Pour quelques millions de fichiers de mon projet, la hiérarchie de profondeur de niveau 4 fonctionne bien.

J'ai aussi fait la même chose dans mon projet ayant près de 1 million de fichiers. Mon exigence était également de traiter les fichiers en parcourant cette énorme liste. J'ai construit une hiérarchie de dossiers profonds de 4 niveaux et le temps de traitement réduit de près de 10 minutes à quelques secondes.

Ajoutez à cette optimisation peut être que, si vous souhaitez traiter tous les fichiers présents dans ces hiérarchies de dossiers profonds, alors au lieu d'appeler une fonction pour récupérer la liste des 4 premiers niveaux, il suffit de précomputer tout le niveau possible 4 Noms de hiérarchie de dossiers profonds. Supposons que le GUID puisse disposer de 16 caractères possibles, nous disposerons de 16 dossiers chacun aux quatre premiers niveaux, nous pouvons simplement précomputer les hiérarchies de 16 * 16 * 16 * 16 * 16 qui prend juste quelques ms. Cela permet de gagner beaucoup de temps si ces grands fichiers sont stockés dans un emplacement partagé et appelant une fonction pour récupérer la liste dans un répertoire prend près une seconde.


0 commentaires