Nous avons 3 dossiers sur une machine Ubuntu 14.04, chacun contenant 250 000 images d’une taille de 2 Ko à 30 Ko, et devrait croître jusqu’à 1 million de fichiers par répertoire.
Tout en essayant d’étendre l’application à plusieurs serveurs, nous examinons Glusterfs pour un stockage partagé. Comme les fichiers 250K ne posent pas de problème sur ext4, cela semble poser problème pour glusterfs. Essayer de copier les fichiers plante complètement l'ordinateur.
Je cherche à partitionner les fichiers dans des répertoires en 2 niveaux:
mkdir -p {000..255} / {000..255}
/000/000/filename
/001/000/filename
/001/001/filename
...
Cela vous semble-t-il être un bon moyen? La structure entière contiendra des millions de fichiers plus tard. Est-ce que cela permettrait aux glusterfs d'être fiables en production avec de bonnes performances, hébergeant des millions de fichiers?
rsync -aHS --progress /data/files/ /gluster/files/
ou vous pouvez utiliser une commande de recherche comme:find /data/files/ -name '*name*.ext' -exec cp -p {} /gluster/files/ \;
Réponses:
L'utilisation de GlusterFS pour stocker et accéder à des tas de très petits fichiers est une difficulté pour de nombreuses implémentations, et il semble que vous soyez déjà sur le bon chemin pour résoudre le problème: diviser les fichiers dans des répertoires séparés.
Vous pourriez mettre en œuvre une solution comme celle-là. Créez simplement un ensemble de répertoires, choisissez une limite de nombre de fichiers dans chaque répertoire et espérez que vous ne manquerez pas d'endroits pour placer des fichiers. Dans votre exemple, vous créez des répertoires de 65 000 $ ou plus, ce qui ne devrait pas poser de problème de si tôt.
Une autre option consiste à créer des répertoires en fonction de la date de création du fichier. Par exemple, si le fichier a
cust_logo_xad.png
été créé aujourd'hui, il sera stocké ici:Si vous hébergez des données pour différentes entités (clients, services, etc.), vous pouvez séparer les fichiers en fonction de leur propriété, en attribuant à cette entité un identifiant unique. Par exemple:
Au-delà, il serait judicieux de consulter la documentation de GlusterFS pour optimiser le cluster de stockage en vue de l'hébergement de petits fichiers. À tout le moins, assurez-vous que:
mkfs
option)Si vous le pouvez (et si vous ne l'avez pas déjà fait), il est judicieux de créer une base de données servant d'index pour les fichiers plutôt que de devoir analyser (par exemple
ls
) ou rechercher (par exemplefind
) des fichiers à tout moment.la source