locate
Программа findutils
сканирования одного или нескольких баз данных имен файлов и отображает любые совпадения. Это можно использовать как очень быструю find
команду, если файл присутствовал во время последнего обновления базы данных имен файлов.
В настоящее время существует много видов баз данных,
- реляционные базы данных (с языком запросов, например, SQL),
-
документно-ориентированные базы данных (например, MongoDB)
База данных ключ-значение (например, Redis)
Колонно-ориентированные базы данных (например, Кассандра)
Так какую базу данных updatedb
обновлять и locate
использовать?
Спасибо.
Ответы:
Реализации
locate
/updatedb
обычно используют конкретные базы данных, адаптированные к их требованиям, а не универсальный механизм баз данных. Вы найдете эти конкретные базы данных, документированные каждой реализацией; например:findutils
'задокументированlocatedb(5)
и представляет собой просто список файлов (с определенным алгоритмом сжатия);mlocate
Это задокументированоmlocate.db(5)
и может также рассматриваться как список каталогов и файлов (с метаданными).источник
locate
это просто структуры данных, хранящиеся на диске, поэтому переход от структур данных к соответствующим базам данных относительно прост. Переход к базам данных, когда ваш вопрос представляет их, - это совсем другое; Есть книги и курсы, посвященные этим темам. Проектирование и разработка системы управления базами данных, такой как MongoDB или PostgreSQL, является сегодня одной из наиболее сложных проблем в области компьютерных наук и разработки программного обеспечения, особенно когда вы добавляете распределенную сторону вещей.dlocate
программы в Debian. В итоге я обнаружил, что простой поиск текстового файла был во много раз быстрее, чем поиск в расположенном б, и с учетом размера дисков в наши дни экономия размера файла была незначительной. Так что я переключился на просто grep. У меня также есть локальное задание cron, которое выводит файл mlocate.db в виде обычного текста после выполнения задания mlocate cron, которое я ищу с помощьюqlocate
сценария локальной оболочки… гораздо быстрее, чем выполняемый,mlocate
а также имеет некоторые полезные дополнительные параметры.Кажется, что это простой файл структур C, написанный / прочитанный с использованием макросов Gnu LibC OBSTACKS
Посмотреть источники
https://github.com/msekletar/mlocate/blob/master/src/updatedb.c#L720
https://github.com/msekletar/mlocate/blob/master/src/locate.c#L413
Вы можете получить что-то подобное с
источник
find
) из/
каталога root ( ), не спускаясь в каталоги других файловых систем (-xdev
), обычные файлы (-type f
), а не в*.git
каталоги (-not -path \*\.git\/\*
). Он сжимает вывод (| gzip -9
) и сохраняет его в файл/tmp/files.gz
(> /tmp/files.gz
). Следующая строка ищетzgrep
файлfile_i_want
внутри сжатого файла/tmp/files.gz
Насколько я знаю, за ними стоит Berkeley DB, которая является базой данных без ключей и значений. Перейдите по ссылке для получения дополнительной информации. Выдержка из Википедии:
Расположение базы данных в RHEL / CentOS
/var/lib/mlocate/mlocate.db
(не уверен насчет других дистрибутивов). Командаlocate --statistics
даст вам информацию о местоположении и некоторую статистику базы данных (пример):Для формата mlocate вот глава man-страницы:
источник
locate
/updatedb
...mlocate
совершенно определенно не использует Berkeley DB.