Je viens d'ajouter une fonction de recherche prédictive (voir l'exemple ci-dessous) à mon site qui s'exécute sur un serveur Ubuntu. Cela s'exécute directement à partir d'une base de données. Je veux mettre en cache le résultat pour chaque recherche et l'utiliser s'il existe, sinon le créer.
Y aurait-il un problème avec moi à enregistrer les résultats potentiels de 10 millions de cira dans des fichiers séparés dans un répertoire? Ou est-il conseillé de les diviser en dossiers?
Exemple:
os.listdir
en python a été catégoriquement refusée pour cette raison.Réponses:
Oui. Il y a probablement plus de raisons, mais je peux les afficher du haut de ma tête:
tune2fs
a une option appeléedir_index
qui a tendance à être activée par défaut (sur Ubuntu, c'est le cas) qui vous permet de stocker environ 100 000 fichiers dans un répertoire avant de voir un impact sur les performances. Ce n'est même pas proche des fichiers de 10 millions auxquels vous pensez.ext
les systèmes de fichiers ont un nombre maximal fixe d'inodes. Chaque fichier et répertoire utilise 1 inode. Utilisezdf -i
pour une vue de vos partitions et inodes gratuitement. Lorsque vous manquez d'inodes, vous ne pouvez pas créer de nouveaux fichiers ou dossiers.les commandes comme
rm
etls
lorsque vous utilisez des caractères génériques développent la commande et se retrouveront avec une "liste d'arguments trop longue". Vous devrez utiliserfind
pour supprimer ou répertorier les fichiers. Et afind
tendance à être lent.Oui. Très certainement. Fondamentalement, vous ne pouvez même pas stocker des fichiers de 10 m dans 1 répertoire.
J'utiliserais la base de données. Si vous souhaitez le mettre en cache pour un site Web, jetez un œil à " solr " ("fournissant une indexation distribuée, une réplication et des requêtes à charge équilibrée").
la source
A fini avec le même problème. Exécutez mes propres tests de performances pour savoir si vous pouvez tout placer dans le même dossier par rapport à plusieurs dossiers. Il semble que vous le puissiez et c'est plus rapide!
Réf: https://medium.com/@hartator/benchmark-deep-directory-structure-vs-flat-directory-structure-to-store-millions-of-files-on-ext4-cac1000ca28
la source
Une recherche binaire peut facilement gérer des millions d'enregistrements, donc la recherche dans le répertoire unique ne serait pas un problème. Il le fera très rapidement.
Fondamentalement, si vous utilisez un système 32 bits, la recherche binaire jusqu'à 2 Go d'enregistrements est facile et bonne.
Berekely DB, un logiciel open source, vous permettrait facilement de stocker le résultat complet sous une seule entrée et aurait la recherche intégrée.
la source