к базам данных   к 4GL - визуальным средам

Berkeley DB - высокопроизводительный движок для СУБД

  1. История СУБД-невидимки
  2. libdb.*
  3. Архитектура Berkeley DB
  4. Программы, в которых используется Berkeley DB

Berkeley DB (BDB) — высокопроизводительная встраиваемая база данных, реализованная в виде библиотеки. BDB является нереляционной базой данных, то есть она хранит пары ключ / значение как массивы байтов и поддерживает множество значений для одного ключа. BDB может обслуживать тысячи процессов или потоков, одновременно манипулирующих базами данных размером в 256 терабайт, на разнообразном оборудовании под различными операционными системами, включая большинство UNIX-подобных систем и Windows, а также на операционных системах реального времени. Образно говоря, Berkeley DB – СУБД-невидимка, которой пользуются миллионы людей, не подозревая о ее существовании, так как она представляет собой “движок” - ядро СУБД, над которым программисты – разработчики создают свои СУБД, ОС и другие приложения, оперирующие большими массивами данных.

Первая версия Berkeley DB была разработана в Университете Беркли во время разработки BSD версии 4.3 (июнь 1986 года). Netscape попросила авторов Berkeley DB улучшить и расширить библиотеку — в то время версию 1.85, — чтобы она удовлетворяла их требованиям к использованию в сервере LDAP и в браузере Netscape. Этот запрос привёл к созданию Sleepycat Software (купленной корпорацией Oracle в феврале 2006 года). Berkeley DB распространяется под лицензией Sleepycat Public License (англ.), которая была одобрена OSI и FSF. Программа поставляется с полным исходным кодом, средствами сборки, инструментами тестирования и документацией. Качество кода и практичность вместе со свободной лицензией привело к использованию Berkeley DB во многих свободных и открытых программах. В рамках техники двойного лицензирования Oracle также распространяет проприетарную лицензию на использование библиотеки в закрытых проектах.

История СУБД-невидимки

Среди программ с большой историей есть по-настоящему удивительные артефакты. Численность армий их пользователей измеряется даже не десятками, а сотнями миллионов. Правда, речь идет о косвенных пользователях, в основном и не подозревающих о существовании замечательных программ-невидимок.

В 1991 г., когда в Университете Беркли велись работы над проектом свободного от лицензионных ограничений клона ОС UNIX, перед разработчиками встала задача реализовать аналог одной из многочисленных библиотек – dbm. В те времена широко распространенная и востребованная dbm реализовывала относительно несложные механизмы однопользовательского хранилища данных. Востребованность же библиотеки объяснялась просто – она освобождала программистов от повторного решения в какой-то мере тривиальных задач накопления и хранения данных. Один из будущих авторов знаменитой книги “Дизайн и реализация ОС 4.4BSD” (“The Design and Implementation of the 4.4BSD Operating System” и исходные тексты BSD UNIX стали учебной партой для нескольких поколений программных архитекторов и системных программистов), ведущий архитектор 4.4BSD Кейт Бостик (Keith Bostic), предложил разработать свободный от лицензионного кода AT&T аналог dbm участникам проекта Марго Зельцер и Михаэлю Олсону. C этого момента началась история замечательного во всех отношениях программного продукта – Berkeley DB. Во-первых, он уникален тем, что объединил разработчиков на долгие годы, и это само по себе уже редкость – достаточно упомянуть тот факт, что Бостик и Зельцер стали счастливыми супругами, а в своем блоге Марго буквально пару месяцев назад набросала планы на ближайшие десять лет, и они полны оптимизма. Во-вторых, продукт, изначально создававшийся и распространявшийся на основе более чем либеральной BSD-лицензии, в конце концов позволил его разработчикам стать респектабельными бизнесменами, не изменяя приверженности свободным берклиевским традициям. В-третьих, респектабельность семейного бизнеса Бостика, Зельцер и “примкнувшего к ним” Олсона получила убедительное доказательство после приобретения его гигантом мира баз данных Oracle (сумма и условия сделки, происшедшей в феврале этого года, не афишировались). И наконец, в четвертых – Berkeley DB не повторила участи многих “прикупленных по случаю” программных проектов. Продукт развивается, и в последней, вышедшей недавно версии, предлагает пользователям совершенно новую функциональность.

К слову, личности разработчиков Berkeley DB весьма примечательны. И дело даже не в том, что не только женщин-программистов, а и “программистов вообще” класса Марго Зельцер не так уж и много. Хотя, если бы Марго Зельцер была только программисткой – автором Berkeley DB, этого было бы достаточно. Но она еще является одним из лучших профессоров Гарварда и отмечена престижной наградой за умение сочетать исследовательскую и преподавательскую работу (к сожалению, отдельной награды за умение сочетать работу с материнством не существует, в противном случае Марго Зельцер, забирающая в свой офис в Гарварде шестимесячную дочь, непременно эту награду получила бы). “По совместительству” Зельцер является основательницей компании Sleepycat (той самой, которую приобрела Oracle), матерью двоих детей, спортсменкой, обладательницей черного пояса карате и... известным заводчиком кошек. Согласитесь, весьма непривычный портрет коммерчески успешного разработчика открытого ПО (особенно на фоне тучных бородатых мужчин, явно не злоупотребляющих спортом). Впрочем, необычность здесь начинается даже с учебного заведения, которое закончила Зельцер – в отличие от традиционных MIT, UCSD и UC Berkeley будущая программистка поступила в Гарвард, и ее выбором была математика. Впоследствии Марго Зельцер перевелась на так называемый факультет прикладных наук – именно там в конце 70-х годов в Гарварде изучали компьютерные науки. Интересно, что впоследствии, уже после работы в нескольких компьютерных компаниях и успешной докторантуры, Зельцер отклонила предложение, поступившее ей из знаменитого MIT, по причине, амбициозность которой способна вызвать зависть у многих мужчин: “Я не думала, что если я выберу MIT, то смогу что-либо фундаментально изменить на его факультете компьютерных наук. А Гарвард тогда только создавал такой факультет и не имел ни одного курса по операционным системам...”. При этом Марго Зельцер не стесняется говорить и о своих слабостях: “Когда муж предлагает мне оставить академическую работу и полностью переключиться на бизнес, я говорю, что бизнес – это риск, а я не люблю проигрывать. Вообще, академическая деятельность привлекает именно тех, кто не любит проигрывать”.

Муж Зельцер, ранее кратко представленный как Кейт Бостик, также личность весьма незаурядная. По крайней мере, бизнес-опыта в области работы со свободным программным обеспечением ему не занимать – он был одним из основателей компании Berkeley Software Design Inc. (BSDi), которая задолго до нынешних фирм, производящих дистрибутивы Linux, выводила в коммерческое плавание собственный вариант операционной системы, основанной на кодах BSD. BSDi стала и первой жертвой “битвы с клонами” – в 1992 г. USL (Unix System Laboratories), тогда правообладатель UNIX, подала в суд на BSDi за нарушение прав собственности (многие считают недавний иск SCO к IBM полным аналогом этой истории).

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

libdb.*

Собственно говоря, с программистской точки зрения героиня этой статьи имеет весьма заурядное имя – оно использовано в качестве заголовка данного раздела (обозначенное звездочкой расширение в нем зависит от целевой платформы). Для высокоуровневого описания ее функциональности лучше всего воспользоваться методом аналогий. Современные СУБД, использующие языки запросов (например, SQL), во многом похожи на систему, образованную компилятором с языка высокого уровня и аппаратными средствами целевой для этого компилятора машины. В данной системе высокоуровневый язык транслируется в некоторый промежуточный код, преобразуемый в бинарный код целевой машины. И наконец, бинарный код выполняется аппаратными средствами. В принципе, современные СУБД на уровне макроархитектуры отличаются от этой модели разве что спецификой промежуточного кода и системой команд аппаратных средств (к слову, “машины баз данных” в аппаратном смысле – не такая уж и редкость). Berkeley DB в подобной макроархитектуре занимает уровни от промежуточного кода (иначе говоря – среднеуровневого) до аппаратных средств. Естественно, Berkeley DB скрывает от программиста нюансы и сложности аппаратного уровня, предоставляя в распоряжение несоизмеримо более высокоуровневые возможности. Важно только не забывать, что все познается в сравнении, и макроассемблер сам является низкоуровневым средством по сравнению с современным объектно-ориентированным языком.

Berkeley DB позволяет использующему библиотеку программисту удобно оперировать базами данных и записями в них. В трактовании некоторых терминов Berkeley DB отличается от высокоуровневых СУБД, в большинстве же случаев терминология аналогична. Так, запись Berkeley DB, являющаяся парой, образованной ключом-идентификатором записи и данными записи, в некотором смысле идентична записи в двухколоночной таблице в терминах реляционных БД. Но так как и данные, и даже ключ в Berkeley DB могут сами быть наборами данных (например, структурами языка C), то вполне допустимы аналогии и с многоколоночными таблицами. Понятие базы данных в Berkeley DB, напротив, радикально отличается от так же звучащего термина высокоуровневых аналогов – здесь это множество записей с одинаковыми типами ключа и данных, формируемое на основании выбранного программистом механизма доступа (в высокоуровневых СУБД, в свою очередь, последний обычно полностью скрыт). В Berkeley DB существуют и уникальные конструкции, и, естественно, уникальные термины для их обозначения. Так, окружение (environment) Berkeley DB – это конструкция, позволяющая оперировать множеством БД с записями разных типов (здесь и далее под типом записи понимается пара типов ключа и данных) как единым целым. К специфическим понятиям Berkeley DB следует также отнести вторичные БД, позволяющие устранить важное и очевидное ограничение Berkeley DB, суть которого в неявной форме была только что указана. Речь, естественно, идет о единственности понятия ключа в записи Berkeley DB. А как быть, если данные записи представляют собой наборы данных, и программисту нужен, например, быстрый поиск в базе не только по ключам, но и по значениям определенных полей в этих наборах данных? Без вторичных баз для решения подобной задачи было бы необходимо последовательно просматривать записи базы до выполнения условия поиска, что крайне неэффективно. Вторичные же базы данных хранят индексы полей наборов данных записей и позволяют использовать механизмы быстрого поиска. Следует заметить, что создание вторичной БД инициируется программистом, а ведение поддерживается Berkeley DB в полностью автоматическом режиме (вторичная БД недоступна по записи). Впрочем, упомянутый как неэффективный механизм последовательного просмотра (иначе говоря – доступа) к записям базы данных часто бывает необходим. В Berkeley DB он реализован с помощью курсоров (cursor), для которых существует более распространенное название итераторов.

Методы доступа Berkeley DB – это механизмы, позволяющие эффективно решать задачи поиска записи по ключу, добавления и удаления записей. В зависимости от характера (типа) ключей можно выделить два класса методов доступа. Так, для ключей, характеризующих содержимое записи, применяются методы доступа с помощью сбалансированных деревьев (BTree) и хэш-функций (Hash). Для тех баз данных, в которых ключи характеризуют уникальный логический номер записи, используются методы доступа на основе очереди (Queue) и “номера записи” (Recno).

Упомянутый ранее язык Berkeley DB (аналогичный по уровню макроассемблеру) – это, естественно, раз мы ведем речь о библиотеке, – интерфейс прикладного программирования (API). Следует отметить, что, несмотря на язык разработки (ANSI C), Berkeley DB – красиво написанная объектно-ориентированная программа, и об этом надо знать для того, чтобы изучать ее отлично документированный API. Ключевая структура данных в Berkeley DB – дескриптор базы (C-структура __db, декларацию которой можно найти в файле db.in, находящемся в подкаталоге dbinc дистрибутива Berkeley DB), содержит указатели на функции API – методы, и поэтому во многом аналогична классу, например, в С++. Поэтому в документации Berkeley DB принят следующий шаблон описания многих функций:

DB->имя_функции()

Эта запись означает, что подобные функции допустимо использовать только после создания базы данных (результатом которого является в том числе и формирование структуры дескриптора, для него в документации принято имя типа DB) и только посредством вызова функции разыменованием указателя на нее в созданном дескрипторе:

#include <db.h>
typedef struct __db DB;
/* резервируем место под указатель на дескриптор базы */
DB db0_handle ;
/* создаем базу и дескриптор базы, инициируем указатель на него */
db_create(*db0_handle ...);
/* удаляем базу, вызывая метод DB->close разыменованием указателя в дескрипторе */
db0_handle->close( db0_handle...);

На самом деле после подобного краткого описания Berkeley DB можно было бы и остановиться, потому что программа сопровождается великолепной документацией, которую следовало бы брать за образец всем разработчикам ПО (и не только распространяемого с открытыми исходными текстами). И все же следует сказать несколько слов о том, что Berkeley DB позволяет получить использующему ее программисту.

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

Давайте представим себе следующую ситуацию – вы разработали некий программный продукт с использованием библиотеки Berkeley DB и передали его на эксплуатацию заказчику. Но вот появились исходные коды новой версии библиотеки, устраняющие, например, только обнаруженную ошибку (даже очень хорошие программы не идеальны). Что вы должны сделать, чтобы обезопасить своего заказчика от потенциальных рисков, связанных с этой ошибкой? Естественно, пересобрать свою программу с новой версией libdb и переинсталлировать ее у заказчика. А если специфика его работы не допускает остановки исполнения вашей задачи? Именно для таких случаев Berkley DB предлагает механизм модернизации бинарного кода библиотеки без остановки сервиса базы данных.

Во-вторых, реализованный в Berkeley DB механизм транзакций (одновременных множественных операций с базами данных) полностью соответствует перечню свойств ACID (Atomicity, Consistency, Isolation, Durability). Это означает, что транзакции Berkeley DB действительно атомарны (т. е. неделимы и гарантированно приводят или к требуемым изменениям, или вообще не изменяют состояния базы данных), непротиворечивы (не приводят к запрещенным состояниям базы данных), изолированы (какое-либо взаимодействие одновременных транзакций, инициированных разными пользователями, невозможно) и наконец, надежны (сбои в работе системы после завершения транзакции не приводят к потере ее результатов).

В-третьих, последняя версия предлагает развитый набор средств репликации баз данных, что, учитывая неигрушечные “ограничения” (например, размер базы данных до 256 ТВ), позволяет создавать программы со “взрослыми” возможностями масштабирования.

В-четвертых, Berkeley DB очень хорошо и быстро делает то, что должна делать. При исполнении на современных ПК Berkeley DB позволяет выполнять примерно миллион операций чтения и более полумиллиона операций записи в секунду, а в зависимости от операционной среды количество полноценных ACID-транзакций в секунду колеблется от 30 до 90 тысяч. Качество реализации Berkeley DB подтверждают многочисленные факты. Например, во время бета-тестирования платформы для электронной коммерции Steam, основанной на Berkeley DB, за 20 месяцев без единого потерянного байта или сбоя было обработано более десяти миллионов транзакций, инициированных семью сотнями тысяч пользователей, при этом система умышленно оставлялась на несколько месяцев без какого-либо присмотра со стороны администраторов.

В-пятых, Berkeley DB – разработка, не страдающая манией гигантизма. Динамически загружаемая библиотека, собранная в ОС Windows XP, занимает немногим больше 500 KB.

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

Архитектура Berkeley DB

Berkeley DB примечательна своей простой архитектурой в сравнении с другими системами баз данных, такими как, например Microsoft SQL Server и Oracle Database. Например, в ней отсутствует сетевой доступ — программы используют базу данных через вызовы внутрипроцессного API. Она поддерживает SQL в качестве одного из интерфейсов, начиная с версии 5.0, хотя и не поддерживает столбцы в таблицах в традиционном понимании на уровне внутренней архитектуры. Berkeley DB предполагает работу с парами ключ-значение, где ключ и значение могут иметь фиксированную или переменную длину, а функция сравнения ключей может быть написана и назначена прикладным программистом. Программа, которая использует БД, сама решает, как данные сохраняются в записи; БД не налагает ограничений на данные, хранимые в записях. Запись и её ключ оба могут иметь размер до четырёх гигабайт.

Berkeley DB поддерживает необходимые возможности баз данных, такие как ACID-транзакции, детальные блокировки, интерфейс распределённых транзакций XA, горячее резервное копирование и репликацию. Berkeley DB может использоваться как средство для построения хранимых индексов, так и в качестве хранилища данных.

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

Berkeley DB входит в состав большинства дистрибутивов Linux. Существуют интерфейсные средства для работы с Berkeley DB на Perl, Python и других языках.

Программы, в которых используется Berkeley DB

Berkeley DB является хранилищем данных для серверов LDAP, СУБД и множества других проприентарных и свободных программ. Ниже приведён список программ, в которых для хранения данных используется Berkeley DB:

к базам данных   к 4GL - визуальным средам


Знаете ли Вы, что, как не тужатся релятивисты, CMB (космическое микроволновое излучение) - прямое доказательство существования эфира, системы абсолютного отсчета в космосе, и, следовательно, опровержение Пуанкаре-эйнштейновского релятивизма, утверждающего, что все ИСО равноправны, а эфира нет. Это фоновое излучение пространства имеет свою абсолютную систему отсчета, а значит никакого релятивизма быть не может. Подробнее читайте в FAQ по эфирной физике.

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution