Le locate
programme findutils
scanne une ou plusieurs bases de données de noms de fichiers et affiche toutes les correspondances. Cela peut être utilisé comme une find
commande très rapide si le fichier était présent lors de la dernière mise à jour de la base de données de noms de fichiers.
Il existe de nombreux types de bases de données de nos jours,
- bases de données relationnelles (avec langage de requête par exemple SQL),
-
bases de données orientées document (par exemple MongoDB)
Base de données de valeurs-clés (par exemple Redis)
Bases de données orientées colonnes (par exemple Cassandra)
Alors, quel type de base de données est mis à updatedb
jour et locate
utilisé?
Merci.
Réponses:
Les implémentations de
locate
/updatedb
utilisent généralement des bases de données spécifiques adaptées à leurs besoins, plutôt qu'un moteur de base de données générique. Vous trouverez ces bases de données spécifiques documentées par chaque implémentation; par exemple:findutils
'est documenté danslocatedb(5)
, et est à peu près juste une liste de fichiers (avec un algorithme de compression spécifique);mlocate
est documenté dansmlocate.db(5)
, et peut également être considéré comme une liste de répertoires et de fichiers (avec métadonnées).la source
locate
sont que des structures de données stockées sur le disque, il est donc relativement simple de passer des structures de données aux bases de données correspondantes. Passer aux bases de données au fur et à mesure que votre question les présente est une tout autre chose; il existe des livres et des cours consacrés à ces sujets. Concevoir et développer un système de gestion de base de données tel que MongoDB ou PostgreSQL est l'un des problèmes les plus difficiles en informatique et en génie logiciel aujourd'hui, en particulier lorsque vous mettez le côté distribué des choses.dlocate
programme dans debian. J'ai fini par découvrir que le simple fait d'appréhender un fichier texte était beaucoup plus rapide que de rechercher un localiséb, et étant donné la taille des disques de nos jours, les économies de taille de fichier étaient insignifiantes. Je suis donc passé à juste grep. J'ai également un travail cron local qui transfère mlocate.db en texte brut après l'exécution du travail cron mlocate, que je recherche avec unqlocate
script shell local .... beaucoup plus rapide que l'exécutionmlocate
et a également quelques options supplémentaires utiles.Semble être un fichier plat de structures C, écrit / lu à l'aide des macros Gnu LibC OBSTACKS
Voir les sources
https://github.com/msekletar/mlocate/blob/master/src/updatedb.c#L720
https://github.com/msekletar/mlocate/blob/master/src/locate.c#L413
Vous pourriez obtenir quelque chose de similaire avec
la source
find
) à partir du/
répertoire racine ( ), sans descendre dans les répertoires des autres systèmes de fichiers (-xdev
), les fichiers normaux (-type f
), pas dans les*.git
répertoires (-not -path \*\.git\/\*
). Il compresse output (| gzip -9
) et l'enregistre dans file/tmp/files.gz
(> /tmp/files.gz
). La ligne suivante recherche unzgrep
fichierfile_i_want
dans un fichier compressé/tmp/files.gz
Pour autant que je sache, Berkeley DB est une base de données sans démon clé / valeur. Suivez le lien pour plus d'informations. Extrait de Wikipedia:
L'emplacement de la base de données dans RHEL / CentOS est
/var/lib/mlocate/mlocate.db
(pas sûr des autres distributions). La commandelocate --statistics
vous donnera des informations sur l'emplacement et quelques statistiques de base de données (exemple):Pour le format mlocate, voici la tête de la page de manuel:
la source
locate
/updatedb
...mlocate
n'utilise certainement pas Berkeley DB.