Dbm

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 00:37, 27 февраля 2019.

DBM (DataBase Manager) - база данных для хранения индексных файлов, написанная Кеном Томпсоном и выпущенный AT&T в 1979 г. [Источник 1]

Описание

Каждая база данных DBM состоит из двух файлов, один файл имеет суффикс .dir и содержит индекс, другой содержит все данные и имеет суффикс .pag. Файлы данных разделены (существуют проблемы с размещением таких баз данных на файловых системах, которые не поддерживают разделенные файлы). При извлечении данных возвращается указатель на статическое хранилище, которое перезаписывается при каждом последующем вызове. Поля dptr в возвращаемых типах данных не обязательно указывают на выровненные по слову адреса, поэтому небезопасно приводить их к произвольным типам данных и разыменовывать их. Базу данных dbm лучше всего применять для данных, к которым часто обращаются, но которые редко обновляются, поскольку она довольно медленно создает элементы, но быстро извлекает их. [Источник 2]

Применение

Самое популярное ПО телеконференций Usenet использует DBM-базу данных для хранения информации о текущих и недавно просмотренных статьях. Главные файлы базы данных Sun NTS также хранятся в формате DBM. [Источник 3]

Наследники

Библиотека DBm имеет много последователей, таких как:

  • NDBM: В 1986 году в Беркли реализовали NDBM (что означает New Database Manager). Там была добавлена ​​поддержка несколько одновременно открытых баз данных.
  • SDBM: Некоторые версии Unix исключили NDBM из-за проблем с лицензированием, поэтому в 1987 году Озан Иджит выпустил клон - SDBM. [1]
  • GDBM (GNU DBm): Свободная версия, написанная Филипом Нельсоном для проекта GNU. Была добавлена ​​поддержка данных произвольной длины в базе данных. Ранее все данные имели фиксированную максимальную длину.
  • TDB (библиотека тривиальной базы данных): разработана и используется внутри пакета Samba, реализует API, вдохновленный GDBM, но также поддерживает несколько одновременных записей, выпущенна под LGPL лицензии. [2]
  • TDBM: версия NDBM с атомарными транзакциями, базой данных в оперативной памяти, а также другими расширениями, выпущенна под лицензией с открытым исходным.

GDBM

Библиотека GDBM (GNU) предоставляет собой исторический интерфейс, эмулирующий старую DBM. В ней исчезают старые ограничения на размер ключа и содержимого СУБД. Чтобы инициализировать базу данных, необходимо создать вручную .pag файл. Когда .pag файл открывается, он инициализируется, любой .dir файл удаляется, и создается новый .dir файл, который является простой ссылкой на .pag файл. Этот обман делает файлы похожими на диске и гарантирует, что временная метка на диске остается актуальной. [3]

NDBM

NDBM позволяет одновременно открывать несколько баз данных и обрабатывать очень большие файлы. Однако по-прежнему существует ограничение на общий размер пар ключ/содержимое, которые могут быть сохранены (это колеблется от 1018 байт до 4096 байт). Как и dbm, каждая база данных состоит из двух файлов с суффиксами .dir и .pag. Файлы данных разделены. [Источник 4]

Создание новой базы данных

Формат хранения для новой БД выбирается путем поиска подходящих версий каждого подмодуля по порядку.

  • dbm.gnu
  • dbm.ndbm
  • dbm.dumb

Функция open() принимает флаги для управления файлом базы данных (рисунок 1). Чтобы создать новую базу данных необходимо использовать 'c'. Использование 'n' всегда создает новую БД, перезаписывая существующий файл. [Источник 5]

Рисунок 1 - Пример использования функции open()

Функция whichdb() сообщает тип созданной базы данных. Вывод программы будет варьироваться в зависимости от того, какие модули установлены в системе.

Открытие существующей базы данных

Чтобы открыть существующую базу данных, необходимо использовать флаги 'r' только для чтения (рисунок 2) или 'w' только для чтения и записи. Существующие базы данных автоматически задаются, поэтому до тех пор, пока файл может быть идентифицирован, соответствующий модуль будет использоваться для его открытия.

Рисунок 2 - Пример использования флага 'r'

После открытия db является словарным объектом. Новые ключи всегда преобразуются в байтовые строки при добавлении в базу данных и возвращаются в виде байтовых строк.

Недостатки

dbm обладает следующими недостатками:

  • Возможно одновременно открывать только одну базу данных
  • Отсутствует автоматическая блокировка, по этому одновременные запись и обновление бд могут вызвать потерю данных
  • Существуют ограничения на общий размер пары ключ/содержимое (максимальный размер обычно составляет около 1018 байт, но колеблется от 512 до 4096 байт). Общий размер всех ключей, хэширующих одно и то же значение, также должен находиться в пределах от 512 до 4096 байт
  • Отсутствие автоматического создания БД. Если база данных отсутствует, ее необходимо заводить только вручную

Примечания

Источники

  1. dbm // База данных dbm [2016–2018]. Дата обновления: 20.07.2016. URL: https://wm-help.net/lib/b/book/1696396857/184 (дата обращения: 23.12.2018)
  2. dbm Описание // База данных dbm [2016–2018]. Дата обновления: 20.07.2016. URL: https://wm-help.net/lib/b/book/1696396857/184 (дата обращения: 23.12.2018)
  3. dbm Применение // Работа с пользовательскими базами данных [2001–2016]. Дата обновления: 10.05.2016. URL: http://linux.yaroslavl.ru/docs/www/perl/lama/g17.html (дата обращения: 23.12.2018)
  4. NDBM // Ndbm Unixpapa [2009–2018]. Дата обновления: 15.07.2009. URL: https://unixpapa.com/incnote/dbm.html (дата обращения: 23.12.2018)
  5. dbm Основные функции // Unix dbm [2018–2018]. Дата обновления: 12.08.2018. URL: https://pymotw.com/3/dbm/ (дата обращения: 23.12.2018)

Ссылки

1. Пакет хэширования для UNIX [Электронный ресурс]: Официальный сайт Гарвардского университета / Режим доступа: http://www.eecs.harvard.edu/margo/papers/usenix91/paper.pdf
2. GDBM [Электронный ресурс]: Официальный сайт бесплатных директорий / Режим доступа: https://directory.fsf.org/wiki/Gdbm
3. GNU [Электронный ресурс]: gnu-info / Режим доступа: http://lists.gnu.org/archive/html/info-gnu/2013-12/msg00012.html