Skip to content

Latest commit

 

History

History
85 lines (49 loc) · 6.57 KB

Berkeley_DB.md

File metadata and controls

85 lines (49 loc) · 6.57 KB

Oracle Berkeley DB

Краткое описание

Berkeley DB — это встраиваемый движок базы данных с открытым исходным кодом, имеющий ряд преимуществ перед другими подобными программными продуктами. Berkeley DB проста в обращении, поддерживает возможность одновременного доступа нескольких пользователей, реализует поддержку транзакций на промышленном уровне и восстановление баз данных после системных и дисковых сбоев.

Berkeley DB является нереляционной базой данных (noSQL).

База спроектирована для работы в одном процессе с приложением. Если Berkeley DB развертывается в таком режиме, то никакого отдельного администрирования базы данных вообще не требуется. Потребляет очень мало ресурсов. Для работы может хватить всего 400 Кбайт.

Разработчики: Sleepycat Software, Oracle Corporation.

Oracle предлагает Berkeley DB в трёх вариантах:

  • Berkeley DB (C, C++ api);
  • Berkeley DB Java (Java);
  • Berkeley DB XML (C, C++, Java api).

Особенности Berkeley DB:

  • библиотека - 1 файл (ядро)
  • плюс набор конфигурационных файлов
  • подключается прямо в приложение
  • не сетевая
  • объектная
  • использует объектную модель приложения
  • отсутствует поддержка SQL
  • есть поддержка языка запросов (XQuery, XPath)

Характеристики Berkeley DB

  • максимальный размер базы данных, поддерживаемый Berkeley DB, составляет 2^48 байт или 256 Тбайт. Поскольку Berkeley DB использует в качестве основного хранилища базы данных файловую систему ОС, она должна поддерживать работу с файлами больших размеров.

  • приложения, не требующие долговременного хранения информации, могут создавать базы данных, размещаемые лишь в основной памяти. Таким базам данных в принципе не свойственны ограничения по производительности, налагаемые подсистемой ввода/вывода.

  • Berkeley DB может работать с ключами и значениями размером до 2^32 байт (4 Гбайт).

  • хранилище данных в виде пар ключ-значение (Key <-> Value). Value - данные (массив байт).

Методы доступа

Метод доступа — это совокупность размещаемой на диске структуры, используемой для хранения данных и операций над этой структурой. Например, многие системы баз данных поддерживают метод доступа B+tree. Он позволяет производить поиск по точному соответствию («найти ключи, равные некоторой константе»), поиск интервала («найти ключи, попадающие в интервал между двумя константами»), а также вставку и удаление записи.

Berkeley DB поддерживает четыре метода доступа:

  • B+tree;
  • Persistent Queues (Queue);
  • Extended Linear Hashing (Hash);
  • Fixed- or Variable-length Records (Recno).

В методах B+tree и Hash ключи могут иметь произвольную структуру.

В методах доступа Queue и Recno каждой записи присваивается номер, который и служит ключом.

Во всех методах доступа значение может иметь произвольную структуру. Если программист подставляет собственные функции сравнения или хэширования, Berkeley DB хранит и извлекает значения, не интерпретируя их. В качестве основного хранилища все методы доступа используют файловую систему ОС.

B+tree

B+деревья хранят пары ключ-значение в листовых страницах, а пары «ключ, адрес дочерней страницы» - на внутренних узлах. Ключи в дереве хранятся в отсортированном порядке, заданном функцией сравнения, указанной при создании базы данных. Для упрощения задачи обхода дерева страницы на листовом уровне содержат указатели на соседей. B+tree поддерживает поиск по точному соответствию (равенству) или интервалу (допустимы лишь интервалы «больше или равно»). Как и хэш-таблицы, B+деревья поддерживают вставку, удаление и повторение всех записей в дереве.

По мере заполнения записями страниц они разбиваются - примерно половина ключей уходит на новую страницу, находящуюся на том же уровне дерева. Большинство реализаций В+дерева после деления оставляют оба узла заполненными наполовину. В общем случае это приводит к снижению производительности, когда вызывающий вставляет ключи по порядку. Но Berkeley DB запоминает порядок вставки и разбивает страницы не поровну, а таким образом, чтобы они заполнялись более, чем наполовину. Благодаря этому уменьшается размер дерева и общий объем базы данных, повышается производительность поиска.

По удалении, пустые страницы воссоединяются посредством обратного разбиения. Данный метод доступа не принимает никаких дополнительных мер для балансировки страниц при удалении или вставке. Ключи при каждом обновлении не перемещаются от страницы к странице. Реализация такой возможности могла бы в отдельных случаях снизить время поиска, но дополнительная сложность кода привела бы к замедлению обновлений и частым взаимным блокированиям.

Queue

Это метод доступа, управляющий высокопроизводительными долговременными очередями. Он построен на базе метода доступа B+tree, но использует механизмы блокировки и протоколирования, необходимые для работы в условиях интенсивного многопользовательского доступа к голове и хвосту очереди. Процесс обновления головы или хвоста очереди блокирует другие потоки на протяжении не всей транзакции, а лишь на время своего выполнения. Благодаря этому качество поддержки параллельного выполнения транзакций значительно улучшается.

Hash

Это метод доступа реализует расширяемую линейную хэш-таблицу. Особенность такого хэширования в том, что хэш-функция адаптируется по мере роста таблицы, и все хэш-корзины в устойчивом состоянии по мере возможности остаются заполненными не до конца.

Метод доступа Hash поддерживает возможность вставки и удаления записей, а также поиска, но лишь по точному соответствию. Допускается повторение всех записей, хранимых в таблице, но порядок их возврата не определен.

Recno

Recno - метод доступа к записям фиксированной или переменной длины. Он присваивает каждой из записей логический номер, по которому может осуществляться поиск и обновление. Recno может, например, загрузить в базу данных текстовый файл, рассматривая каждую строку в качестве записи. Используя эту возможность, в текстовых редакторах можно производить быстрый поиск по номеру строки.

Recno построен на базе метода доступа В+tree и предоставляет простой интерфейс для хранения значений, упорядоченных по номеру. Recno генерирует номера записей самостоятельно. С точки зрения программиста значения нумеруются последовательно, начиная с единицы. Разработчик может указать системе, должны ли записи автоматически перенумеровываться после добавления или удаления записей с меньшими номерами. Если да, то новые ключи можно будет вставлять между существующими.

Ссылки

Документация

Описание библиотеки