Das locate
Programm findutils
durchsucht eine oder mehrere Datenbanken mit Dateinamen und zeigt Übereinstimmungen an. Dies kann als sehr schneller find
Befehl verwendet werden, wenn die Datei während der letzten Aktualisierung der Dateinamendatenbank vorhanden war.
Es gibt heutzutage viele Arten von Datenbanken,
- relationale Datenbanken (mit Abfragesprache zB SQL),
-
Dokumentenorientierte Datenbanken (zB MongoDB)
Schlüsselwertdatenbank (zB Redis)
Spaltenorientierte Datenbanken (zB Cassandra)
Welche Art von Datenbank wird updatedb
aktualisiert und locate
verwendet?
Vielen Dank.
Antworten:
Implementierungen von
locate
/ verwenden in derupdatedb
Regel spezifische Datenbanken, die auf ihre Anforderungen zugeschnitten sind, und keine generische Datenbank-Engine. Sie finden diese spezifischen Datenbanken in jeder Implementierung dokumentiert. beispielsweise:findutils
'ist in dokumentiertlocatedb(5)
und ist so ziemlich nur eine Liste von Dateien (mit einem bestimmten Komprimierungsalgorithmus);mlocate
ist in dokumentiertmlocate.db(5)
und kann auch als Liste von Verzeichnissen und Dateien (mit Metadaten) betrachtet werden.quelle
locate
sind nur Datenstrukturen, die auf der Festplatte gespeichert sind. Daher ist es relativ einfach, von den Datenstrukturen zu den entsprechenden Datenbanken zu gelangen. Das Verschieben in Datenbanken, während Ihre Frage sie präsentiert, ist eine ganz andere Sache; Es gibt Bücher und Kurse zu diesen Themen. Das Entwerfen und Entwickeln eines Datenbankverwaltungssystems wie MongoDB oder PostgreSQL ist heutzutage eines der schwierigeren Probleme in der Informatik und in der Softwareentwicklung, insbesondere wenn Sie die verteilten Aspekte berücksichtigen.dlocate
Programm zu generieren . Am Ende stellte ich fest, dass das einfache Durchsuchen einer Textdatei um ein Vielfaches schneller war als das Durchsuchen eines lokalisierten B, und angesichts der Größe der Festplatten waren die Einsparungen bei der Dateigröße heutzutage unbedeutend. Also habe ich einfach auf grep umgestellt. Ich habe auch einen lokalen Cron-Job, der mlocate.db nach der Ausführung des mlocate-Cron-Jobs als Klartext ausgibt, den ich mit einem lokalenqlocate
Shell-Skript suchemlocate
.Scheint eine flache Datei mit C-Strukturen zu sein, die mit den Gnu LibC OBSTACKS-Makros geschrieben / gelesen wurden
Siehe Quellen
https://github.com/msekletar/mlocate/blob/master/src/updatedb.c#L720
https://github.com/msekletar/mlocate/blob/master/src/locate.c#L413
Sie könnten etwas Ähnliches mit bekommen
quelle
find
) vom Stammverzeichnis (/
) aus, ohne in Verzeichnisse auf anderen Dateisystemen (-xdev
), reguläre Dateien (-type f
) und nicht in*.git
Verzeichnissen (-not -path \*\.git\/\*
) abzusteigen . Es komprimiert die Ausgabe (| gzip -9
) und speichert sie in einer Datei/tmp/files.gz
(> /tmp/files.gz
). Die nächste Zeile suchtzgrep
nach einer Dateifile_i_want
in einer komprimierten Datei/tmp/files.gz
Soweit ich weiß, steckt dahinter Berkeley DB , eine daemonlose Key / Value-Datenbank. Folgen Sie dem Link für weitere Informationen. Auszug aus Wikipedia:
Der Speicherort der Datenbank in RHEL / CentOS ist
/var/lib/mlocate/mlocate.db
(bei den anderen Distributionen nicht sicher). Der Befehllocate --statistics
gibt Ihnen Informationen über den Speicherort und einige Statistiken der Datenbank (Beispiel):Für das mlocate-Format ist hier der Kopf der Manpage:
quelle
locate
/updatedb
...mlocate
Berkeley DB wird definitiv nicht verwendet.