Question

En termes de performance et d'efficacité, est-il préférable d'utiliser beaucoup de petits fichiers (par beaucoup, je veux dire, autant que quelques millions) ou deux (une dizaine) de gros fichiers (plusieurs giga-octets)? Disons que je construis une base de données (pas tout à fait vrai, mais tout ce qui compte est qu'il va y accéder beaucoup).

Je suis surtout préoccupé par les performances de lecture. Mon système de fichiers est actuellement ext3 sous Linux (Ubuntu Server Edition si elle importe), même si je suis dans une position où je peux encore passer, les comparaisons entre les différents systèmes de fichiers serait fabuleux. Pour des raisons techniques, je ne peux pas utiliser un SGBD réel pour cela (d'où la question), donc « il suffit d'utiliser MySQL » n'est pas une bonne réponse.

Merci à l'avance, et laissez-moi savoir si je dois être plus précis.


EDIT: Je vais être stocker beaucoup de morceaux de données relativement faibles, ce qui explique pourquoi en utilisant beaucoup de petits fichiers serait plus facile pour moi. Donc, si je suis allé avec l'aide de quelques gros fichiers, je ne serai en train de récupérer quelques KB sur eux à la fois. Je voudrais aussi utiliserai un indice, de sorte que ce n'est pas vraiment un problème. En outre, certains des points de données à d'autres éléments de données (il citerais le fichier dans les lots-de-petits-fichiers cas et pointez sur l'emplacement des données dans le fichier dans le grand-fichiers cas).

Était-ce utile?

La solution

Il y a beaucoup d'hypothèses, mais ici, à toutes fins utiles, la recherche par un grand fichier sera beaucoup plus rapide que la recherche par un tas de petits fichiers.

Disons que vous êtes recherche d'une chaîne de texte contenu dans un fichier texte. La recherche d'un fichier 1TB sera beaucoup plus rapide que l'ouverture 1000000 fichiers MB et la recherche à travers ceux-ci.

Chaque fichier ouvert opération prend du temps . Un grand fichier ne doit être ouvert une fois.

Et, en considérant les performances du disque , un seul fichier est beaucoup plus susceptible d'être stocké contigously d'une grande série de fichiers.

... Encore une fois, ce sont des généralisations sans en savoir plus sur votre application.

Profitez,

Robert C. Cartaino

Autres conseils

Cela dépend. vraiment. Les différents systèmes de fichiers sont optimisés de manière différente, mais en général, de petits fichiers sont emballés efficacement. L'avantage d'avoir des fichiers volumineux est que vous ne devez pas ouvrir et fermer beaucoup de choses. ouvrir et fermer sont des opérations qui prennent du temps. Si vous avez un gros fichier, vous normalement ouvrir et fermer une seule fois et que vous utilisez opérations de recherche

Si vous optez pour la solution beaucoup-de-fichiers, je vous suggère une structure comme

b/a/bar
b/a/baz
f/o/foo

parce que vous avez des limites sur le nombre de fichiers dans un répertoire.

La question principale ici est TMO sur l'indexation. Si vous allez rechercher des informations dans un fichier énorme sans un bon index, vous devrez analyser le fichier entier pour l'information correcte qui peut être longue. Si vous pensez que vous pouvez construire des mécanismes solides d'indexation alors tout va bien, vous devriez aller avec le fichier énorme.

Je préfère déléguer cette tâche à ext3 qui devrait être assez bon.

edit:

Une chose à considérer selon cette wikipedia article sur ext3 est que la fragmentation ne se produit plus temps. Donc, si vous avez un grand nombre de petits fichiers qui prennent un pourcentage important du système de fichiers, vous perdrez des performances au fil du temps.

L'article valident également la demande sur les fichiers 32k par limite de répertoire (en supposant un article de wikipedia peut rien valider)

Je crois que Ext3 a une limite d'environ 32000 fichiers / répertoires par répertoire. Si vous allez les millions d'itinéraire de fichiers, vous aurez besoin de les répandre dans de nombreux répertoires. Je ne sais pas ce que cela ferait à la performance.

Ma préférence serait pour plusieurs fichiers volumineux. En fait, pourquoi avoir plusieurs du tout, à moins qu'ils sont une sorte d'unités logiquement séparées? Si vous partagez toujours juste pour le plaisir de le diviser, dis-je ne fais pas ça. Ext3 peut gérer de très gros fichiers très bien.

Je travaille avec un système qui stocke jusqu'à environ 5 millions de fichiers sur un système de fichiers XFS sous Linux et n'ont pas eu de problèmes de performance. Nous utilisons uniquement les fichiers pour stocker les données, nous ne les analyse complète, nous avons une base de données pour la recherche et l'un des champs dans une table contient une guid que nous utilisons pour récupérer. Nous utilisons exactement deux niveaux de répertoires comme ci-dessus avec les noms de fichiers étant le guid, bien que plus pourrait être utilisé si le nombre de fichiers a encore plus grand. Nous avons choisi cette approche pour éviter de stocker quelques téraoctets supplémentaires dans la base de données qui ne devait être stocké / retour et jamais cherché à travers et il a bien fonctionné pour nous. Nos fichiers vont de 1k à environ 500K.

Nous l'avons utilisé le système sur ext3, et il fonctionnait très bien, mais je ne suis pas sûr si jamais on a poussé passé environ un million de fichiers. Nous aurions probablement besoin d'aller à un système 3 répertoire en raison de fichiers maximum par les limites de répertoire.

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