web-dev-qa-db-fra.com

Placer plusieurs fichiers (10 millions) dans un dossier

Je viens d'ajouter une fonctionnalité de recherche prédictive (voir exemple ci-dessous) à mon site fonctionnant sur un serveur Ubuntu. Cela fonctionne directement à partir d'une base de données. Je veux mettre en cache le résultat de chaque recherche et l'utiliser s'il existe, sinon le créer.

Y aurait-il un problème à ce que je sauvegarde les 10 000 Cira potentiels dans des fichiers séparés dans un seul répertoire? Ou est-il conseillé de les scinder en dossiers?

Exemple:

17
Kohjah Breese

Pourrais-je enregistrer les 10 millions de résultats potentiels dans des fichiers séparés dans un répertoire?

Oui. Il y a probablement plus de raisons, mais je peux les publier par coeur:

  • tune2fs a une option appelée dir_index qui a tendance à être activée par défaut (sous Ubuntu), ce qui vous permet de stocker environ 100 000 fichiers dans un répertoire avant que vous ne voyiez un impact négatif sur les performances. Ce n’est même pas proche des 10 millions de fichiers auxquels vous songez.

  • ext Les systèmes de fichiers ont un nombre maximum d'inodes fixe. Chaque fichier et répertoire utilise 1 inode. Utilisez df -i pour avoir une vue de vos partitions et de vos inodes libres. Lorsque vous êtes à court d'inodes, vous ne pouvez pas créer de nouveaux fichiers ou dossiers.

  • des commandes telles que rm et ls lors de l'utilisation de caractères génériques développent la commande et aboutissent à une "liste d'arguments trop longue". Vous devrez utiliser find pour supprimer ou répertorier les fichiers. Et find a tendance à être lent.

Ou est-il conseillé de les scinder en dossiers?

Oui. Très certainement. En gros, vous ne pouvez même pas stocker 10 millions de fichiers dans un seul répertoire.

Je voudrais utiliser la base de données. Si vous souhaitez le mettre en cache pour un site Web, consultez " solution " ("fournissant une indexation distribuée, une réplication et une interrogation équilibrée de la charge").

25
Rinzwind

Fini avec le même problème. Exécuter mes propres tests pour savoir si vous pouvez tout placer dans le même dossier plutôt que plusieurs dossiers. Il semble que vous pouvez et c'est plus rapide!

Benchmark

Réf.: https://medium.com/@hartator/benchmark-deep-directory-structure-vs-flat-directory-structure-to-store-millions-of-files-on-ext4-cac1000ca28 =

7
Hartator

Une recherche binaire peut facilement gérer des millions d’enregistrements afin que la recherche dans un seul répertoire ne soit pas un problème. Ça va le faire très vite.

Fondamentalement, si vous utilisez un système 32 bits, la recherche binaire jusqu’à 2 Go d’enregistrements est simple et efficace.

Berekely DB, un logiciel open source, vous permettrait facilement de stocker le résultat complet sous une seule entrée et d’effectuer la recherche de manière intégrée.

0
Ashok Chand Mathur