Question

Je cherche à créer un serveur avec beaucoup de petits fichiers fournis par une API XML. Nous ne ferons pas beaucoup d’itérations sur des répertoires ou des blocs de fichiers séquentiels, nous parlons de nombreuses recherches de données discontinues.

Est-ce que la recherche de temps sur BSD UFS se dégradera avec le temps pour les demandes de fichiers individuels? Je comprends que la limite d'inode du système de fichiers est basée sur la taille de la partition / tranche, mais le disque dur doit parcourir la table inode pour chaque demande de fichier avant de pouvoir découvrir l'emplacement des données. Quel système de fichiers offre les meilleures performances en termes de temps de recherche?

L’alternative consiste à configurer 2-4 Go "blob". fichiers et ont un système distinct de recherche d’un fichier contenu dans le logiciel. La "table d'inodes" du logiciel pourrait être optimisé pour la livraison en fonction de l'utilisateur actuellement connecté, etc ... Ces "tables d'inode" " serait probablement mis en cache dans la RAM et concernerait uniquement les utilisateurs actuellement connectés, de sorte à réduire le gaspillage de ressources.

Où se situent ces deux solutions en termes d'évolutivité et de maintenance? À quel type de gains de performance puis-je m'attendre en utilisant la deuxième solution?

Était-ce utile?

La solution

La technique d'atténuation la plus évidente et éprouvée consiste à utiliser une bonne conception hiérarchique des répertoires (et des stratégies de recherche de chemin d'accès), et à disposer de plus de répertoires avec moins de fichiers dans chacun.

Autres conseils

Pour les versions récentes de FreeBSD avec dirhash et des correctifs que j'ai vus pas de problèmes avec quelques dizaines de milliers de fichiers par répertoire. Vous ne voulez probablement pas aller au nord de 500 000 fichiers ou plus. Par exemple. la suppression d'un répertoire contenant 2.500.000 fichiers m'a pris trois jours.

Je ne suis pas sûr de bien comprendre votre question, mais si vous souhaitez chercher dans de nombreux fichiers, pourquoi ne pas utiliser une table partitionnée mysql présentée sur un système de fichiers RAID0 ou VFS?

Modifier: autant que je sache, de nombreux fichiers dans un seul dossier dégraderont la vitesse des FS, car il doit conserver de plus grandes listes de fichiers, autorisations et noms, une base de données est conçue pour conserver des listes. des données en mémoire et cherchez-y de manière très optimisée.

Plus de détails sur votre situation seraient utiles, les fichiers sont-ils existants ou seraient-ils créés par votre application? Si vous avez besoin d’un moyen de stocker des données arbitraires sans la structure d’une base de données relationnelle, avez-vous consulté les bases de données objet

Une autre option, si vos objets doivent ou peuvent être accessibles via HTTP, consiste à utiliser un vernis cache devant un petit serveur web. Initialement, les objets seraient stockés sur le disque, mais le vernis stockerait et servirait les objets de la mémoire après le premier accès à un objet donné.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top