locate
Program findutils
skanowania jednego lub więcej baz danych zawierających nazwy plików i wyświetla żadnych meczów. Można tego użyć jako bardzo szybkiego find
polecenia, jeśli plik był obecny podczas ostatniej aktualizacji bazy danych nazw plików.
Obecnie istnieje wiele rodzajów baz danych,
- relacyjne bazy danych (z językiem zapytań np. SQL),
-
zorientowane na dokumenty bazy danych (np. MongoDB)
Baza danych kluczowych wartości (np. Redis)
Zorientowane na kolumny bazy danych (np. Cassandra)
Jakiej bazy danych updatedb
aktualizuje i locate
używa?
Dzięki.
Odpowiedzi:
Implementacje
locate
/updatedb
zazwyczaj wykorzystują określone bazy danych dostosowane do ich wymagań, a nie ogólny silnik bazy danych. Znajdziesz te konkretne bazy danych udokumentowane przez każde wdrożenie; na przykład:findutils
'jest udokumentowanelocatedb(5)
i jest właściwie tylko listą plików (z określonym algorytmem kompresji);mlocate
jest udokumentowanymlocate.db(5)
i może być również uważany za listę katalogów i plików (z metadanymi).źródło
locate
to tylko struktury danych przechowywane na dysku, więc przejście od struktur danych do odpowiednich baz danych jest stosunkowo proste. Przejście do baz danych w odpowiedzi na pytanie jest zupełnie inną sprawą; istnieją książki i kursy poświęcone tym tematom. Projektowanie i rozwijanie systemu zarządzania bazami danych, takiego jak MongoDB lub PostgreSQL, jest obecnie jednym z trudniejszych problemów w informatyce i inżynierii oprogramowania, zwłaszcza gdy rzucasz rozproszoną stronę rzeczy.dlocate
programu w Debianie . W końcu odkryłem, że samo grepowanie pliku tekstowego było wiele razy szybsze niż wyszukiwanie umiejscowionego dysku, a biorąc pod uwagę rozmiar dysków w dzisiejszych czasach oszczędności rozmiaru pliku były niewielkie. Więc przełączyłem się na grep. Mam także lokalne zadanie cron, które zrzuca mlocate.db do zwykłego tekstu po uruchomieniu zadania cron mlocate, które wyszukuję za pomocą lokalnegoqlocate
skryptu powłoki .... znacznie szybciej niż uruchamianie,mlocate
a także ma kilka przydatnych dodatkowych opcji.Wygląda na płaski plik struktur C napisany / odczytany za pomocą makr Gnu LibC OBSTACKS
Zobacz źródła
https://github.com/msekletar/mlocate/blob/master/src/updatedb.c#L720
https://github.com/msekletar/mlocate/blob/master/src/locate.c#L413
Możesz uzyskać coś podobnego
źródło
find
) z katalogu root (/
), bez schodzenia do katalogów w innych systemach plików (-xdev
), zwykłych plikach (-type f
), a nie w*.git
katalogach (-not -path \*\.git\/\*
). Kompresuje dane wyjściowe (| gzip -9
) i zapisuje je w pliku/tmp/files.gz
(> /tmp/files.gz
). Następna linia szukazgrep
plikufile_i_want
wewnątrz skompresowanego pliku/tmp/files.gz
O ile mi wiadomo, to Berkeley DB, która jest bazą danych demona klucza / wartości. Kliknij link, aby uzyskać więcej informacji. Wyciąg z Wikipedii:
Lokalizacja bazy danych w RHEL / CentOS jest
/var/lib/mlocate/mlocate.db
(niepewna co do innych dystrybucji). Polecenielocate --statistics
poda informacje o lokalizacji i niektóre statystyki bazy danych (przykład):Dla formatu mlocate tutaj jest strona man:
źródło
locate
/updatedb
...mlocate
zdecydowanie nie używa Berkeley DB.