Яку базу даних використовують `updatedb` та` locate`?


25

locateПрограма findutilsсканування одного або декількох баз даних імен файлів і відображає будь-які збіги. Це можна використовувати як дуже швидку findкоманду, якщо файл був присутній під час оновлення бази даних останніх імен файлів.

На сьогоднішній день існує багато видів баз даних,

То яка база даних робить updatedb оновлює та locateвикористовує?

Спасибі.


Незалежно від того, чи locate використовує BerkelyDB, це варто розібратися - це дуже стара, проста, ефективна дискова система зберігання ключів.
pjc50

@ pjc50 Я б хотів. Де знаходяться файли для бази даних? Як я переглядаю їхній вміст?
Тім


"Сторінку не знайдено", посилання має бути на сервісі defaultfault.com/questions/454127/…
Тим

Отже, що "ключі" та "значення" представляють у базі даних? Якщо я правильно розумію коментар Стівена Кітта unix.stackexchange.com/questions/379725/… , база даних не є ключовою цінністю.
Тім

Відповіді:


29

Впровадження locate/ updatedbзазвичай використовують конкретні бази даних з урахуванням їхніх вимог, а не загальну систему баз даних. Ви знайдете ці конкретні бази даних, задокументовані кожною реалізацією; наприклад:

  • GNU findutils'зафіксовано в Росіїlocatedb(5) , і це майже лише список файлів (із певним алгоритмом стиснення);
  • mlocateРосійська Федерація задокументована в Росії mlocate.db(5) , а також може вважатися переліком каталогів і файлів (з метаданими).

Спасибі. Де і як я можу дізнатись принципи розробки та впровадження конкретних баз даних з урахуванням конкретних вимог? Буду вдячний за будь-які посилання на читання.
Тім

11
Проектування баз даних зводиться до проектування структур даних, тому дізнатися про тих, а потім про розмірно-проти-Конструкційна швидкість компроміси ... Я не знаю конкретного ресурсу , який би добре, можливо , що - щось на зразок програмування Pearls буде приємний вступ до способу мислення на ці теми (а також не надмірно обдумуючи їх).
Стівен Кітт

Спасибі. Я дізнався щось про структури даних, і наступним питанням буде пошук посилань та шляхів переходу від структур даних до баз даних.
Тім

2
Бази даних, якими вони користуються, - locateце просто структури даних, що зберігаються на диску, тому перехід від структур даних до відповідних баз даних є досить простим. Переміщення до баз даних, коли ваше запитання представляє їх - цілком інша справа; Є книги та курси, присвячені цим темам. Проектування та розробка системи управління базами даних, таких як MongoDB або PostgreSQL, є однією з найскладніших проблем у галузі інформатики та інженерії програмного забезпечення сьогодні, особливо коли ви кидаєте в розподілену сторону речі.
Стівен Кітт

2
Я зробив неабиякий біт з locb & mlocate.db протягом багатьох років. Спочатку у мене був код perl, щоб створити розміщенийb для моєї dlocateпрограми в debian. Нарешті я виявив, що просто стиснення текстового файлу було набагато швидше, ніж пошук у розміщеному файлі, і враховуючи розмір дисків у ці дні, економія розміру файлу була незначною. Тому я перейшов на просто греп. У мене також є місцева робота з cron, яка скидає mlocate.db до простого тексту після запуску завдання mlocate cron, який я шукаю за допомогою локального qlocateсценарію оболонки .... набагато швидше, ніж працює, mlocateа також має деякі корисні додаткові параметри.
cas

13

Здається, це плоский файл C структур, записаний / прочитаний за допомогою Gnu LibC макросів OBSTACKS

Дивіться джерела

https://github.com/msekletar/mlocate/blob/master/src/updateb.c#L720

https://github.com/msekletar/mlocate/blob/master/src/locate.c#L413

Ви могли б отримати щось подібне

find / -xdev -type f -not -path \*\.git\/\* | gzip -9 > /tmp/files.gz
zgrep file_i_want /tmp/files.gz

2
Спасибі. Які дві команди виконуються в кінці?
Тім

2
Команда @Tim First - це пошук файлової системи ( find) з каталогу root ( /), не спускаючись до каталогів інших файлових систем ( -xdev), звичайних файлів ( -type f), а не в *.gitкаталогах ( -not -path \*\.git\/\*). Він стискає вихід ( | gzip -9) і зберігає його у файл /tmp/files.gz( > /tmp/files.gz). Наступний рядок шукає zgrepфайл file_i_wantу стисненому файлі/tmp/files.gz
piotrekkr

2

Наскільки я знаю позаду - Берклі БД, що є ключовою / цінністю бездемонтової бази даних. Перейдіть за посиланням для отримання додаткової інформації. Витяг з Вікіпедії:

Berkeley DB (BDB) - бібліотека програмного забезпечення, призначена для забезпечення високоефективної вбудованої бази даних для ключових / значущих даних. Berkeley DB написаний на C з прив'язкою API для C ++, C #, Java, Perl, PHP, Python, Ruby, Smalltalk, Tcl та багатьох інших мов програмування. BDB зберігає довільні пари ключів / даних у вигляді байтових масивів та підтримує декілька елементів даних для одного ключа. Берклі БД не є реляційною базою даних.

Розташування бази даних у RHEL / CentOS /var/lib/mlocate/mlocate.db(не впевнене в інших дистрибутивах). Команда locate --statisticsдасть вам інформацію про місцеположення та деяку статистику бази даних (приклад):

Database /var/lib/mlocate/mlocate.db:
        16,375 directories
        242,457 files
        11,280,301 bytes in file names
        4,526,116 bytes used to store database

Формат mlocate тут - сторінка керівника man:

База даних mlocate починається із заголовка файлу: 8 байт для магічного числа ("\ 0mlocate", як буква C), 4 байти для розміру блоку конфігурації у великому ендіані, 1 байт для версії формату файлу (0), 1 байт для прапора «вимагає видимості» (0 або 1), 2 байтів, а також ім'я шляху кореня бази даних, що закінчується NUL.

Заголовок супроводжується блоком конфігурації, включеним для запобігання повторному використанню баз даних, якщо деякі зміни конфігурації можуть вплинути на їх вміст. Розмір конфігураційного блоку в байтах зберігається у заголовку файлу. Блок конфігурації - це послідовність змінних призначень, упорядкованих іменем змінної. Кожне змінне призначення складається з імені змінної, що закінчується NUL, і впорядкованого списку значень, що закінчуються NUL. Список значень закінчується ще одним символом NUL. Використовуване впорядкування визначається функцією strcmp ().


2
Це залежить від реалізації locate/ updatedb...
Стівен Кітт

2
mlocateОднозначно не використовує Берклі БД.
Стівен Кітт

1
Чи є у вас якесь джерело, яке підтверджує вашу заяву на BerkeleyDB? Друга частина вашої відповіді суперечить їй.
Мат
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.