web-dev-qa-db-fra.com

Pourquoi localiser est plus rapide que trouver?

Je cherchais un fichier dans ma source et j'ai essayé à la fois de localiser et de trouver. Étonnamment, localiser était une recherche dans la machine entière et était plus rapide que find, qui recherchait uniquement dans le répertoire en cours et les sous-répertoires.

Voici mes commandes Shell pour les deux:

find . -name vendorsetup.sh # takes 50 seconds to search all files in curren -sub directories.

locate vendorsetup.sh # takes 20 seconds to search file in whole machine.

Pourquoi ça?

7
Sunil Shahu

locate utilise une base de données et fait périodiquement un inventaire de votre système de fichiers. La base de données est optimisée pour la recherche. find doit parcourir tout le sous-répertoire, ce qui est assez rapide, mais pas aussi rapide que localiser.

12
Jos

A propos de Locate:

Locate utilise un index stocké dans /var/lib/slocate/, qui est mis à jour par un travail Cron nocturne. Ce travail nocturne s'exécute généralement à environ 1h00 ou 2h00 du matin et analyse complètement votre système (y compris tous les lecteurs connectés). L'index résultant est simplement une liste de noms de fichiers. La recherche sera tellement rapide en raison de l'indexation déjà faite sur chaque élément du système de fichiers.

Mais find n'est pas comme ça,

chaque fois, la recherche sera considérée comme une recherche récente et aucun stockage de cache de l'emplacement du fichier.

il faudra donc du temps pour le trouver.

j'espère que ça t'as aidé.

3
rɑːdʒɑ