Berkeley DB ( BDB ) — это встроенная библиотека программного обеспечения баз данных для данных «ключ-значение» , исторически значимая для программного обеспечения с открытым исходным кодом . Berkeley DB написана на языке C с привязкой API ко многим другим языкам программирования . BDB хранит произвольные пары ключ/данные в виде байтовых массивов и поддерживает несколько элементов данных для одного ключа. Berkeley DB не является реляционной базой данных [2] , хотя у нее есть функции базы данных, включая транзакции базы данных , управление многоверсионным параллелизмом и ведение журнала с упреждающей записью . BDB работает в самых разных операционных системах , включая большинство Unix-подобных и Windows- систем, а также операционных систем реального времени .
BDB коммерчески поддерживалась и разрабатывалась компанией Sleepycat Software с 1996 по 2006 год. Sleepycat Software была приобретена корпорацией Oracle в феврале 2006 года, которая продолжала разрабатывать и продавать библиотеку C Berkeley DB. В 2013 году Oracle повторно лицензировала BDB по лицензии AGPL , [3] [4] и выпускала новые версии до мая 2020 года . Bloomberg LP продолжает разрабатывать ответвление версии BDB 2013 года в своей базе данных Comdb2 под исходной разрешительной лицензией Sleepycat. .
Berkeley DB возникла в Калифорнийском университете в Беркли как часть BSD , версии операционной системы Unix , разработанной Беркли . После версии 4.3BSD (1986 г.) разработчики BSD попытались удалить или заменить весь код, происходящий из исходной версии Unix AT&T, на основе которой была создана BSD. При этом им пришлось переписать пакет базы данных Unix. [5] Зельцер и Йигит [6] создали новую базу данных, не обремененную никакими патентами AT&T: хэш-таблицу на диске , которая превзошла по производительности существующие библиотеки dbm . Сама Berkeley DB была впервые выпущена в 1991 году и позже включена в состав 4.4BSD. [5] В 1996 году Netscape обратилась к авторам Berkeley DB с просьбой улучшить и расширить библиотеку, затем версию 1.86, чтобы она соответствовала требованиям Netscape к серверу LDAP [7] и для использования в браузере Netscape . Этот запрос привел к созданию Sleepycat Software . Эта компания была приобретена корпорацией Oracle в феврале 2006 года.
Выпуски Berkeley DB 1.x ориентированы на управление хранилищем данных «ключ-значение» и называются «Хранилищем данных» (DS). В версиях 2.x добавлена система блокировки, обеспечивающая одновременный доступ к данным. Это так называемое «параллельное хранилище данных» (CDS). В версиях 3.x добавлена система регистрации транзакций и восстановления, называемая «Хранилище транзакционных данных» (TDS). В версиях 4.x добавлена возможность реплицировать записи журналов и создавать распределенную высокодоступную базу данных с одним главным сервером и несколькими репликами. Это называется набором функций «Высокая доступность» (HA). Эволюция Berkeley DB иногда приводила к незначительным изменениям API или форматам журналов, но форматы баз данных менялись очень редко. Berkeley DB HA поддерживает онлайн-обновления с одной версии на другую, сохраняя возможность чтения и применения записей журнала предыдущей версии.
Начиная с версии 6.0.21 (Oracle 12c), все продукты Berkeley DB лицензируются по лицензии GNU AGPL . [8] [9] Ранее Berkeley DB распространялась под лицензией BSD из 4 пунктов (до версии 2.0) и публичной лицензией Sleepycat, которая представляет собой одобренную OSI лицензию на открытый исходный код, а также бесплатное программное обеспечение, одобренное FSF . лицензия . [10] [11] Продукт поставляется с полным исходным кодом, сценарием сборки, набором тестов и документацией. Комплексная функция вместе с условиями лицензирования привели к его использованию во множестве бесплатного программного обеспечения с открытым исходным кодом . Те, кто не желает соблюдать условия GNU AGPL или использовать более старую версию с публичной лицензией Sleepycat, имеют возможность приобрести другую проприетарную лицензию для распространения у Oracle Corporation . Этот метод называется двойным лицензированием .
Berkeley DB включает интерфейсы совместимости с некоторыми историческими библиотеками баз данных Unix: dbm , ndbm и hsearch ( библиотека System V и POSIX для создания хеш-таблиц в памяти ). [12]
Berkeley DB имеет архитектуру значительно проще, чем системы управления реляционными базами данных . Подобно SQLite и LMDB , он не основан на модели сервер/клиент и не обеспечивает поддержку доступа к сети — программы обращаются к базе данных, используя внутрипроцессные вызовы API . Oracle добавила поддержку SQL в выпуске 11g R2 на основе популярного API SQLite, включив версию SQLite в Berkeley DB (она использует Berkeley DB для хранения). [13]
Программа, обращающаяся к базе данных, может свободно решать, как данные будут храниться в записи. Berkeley DB не накладывает никаких ограничений на данные записи. Запись и ее ключ могут иметь длину до четырех гигабайт.
Berkeley DB поддерживает такие функции базы данных, как транзакции ACID , детальную блокировку , горячее резервное копирование и репликацию .
Название «Berkeley DB» используется корпорацией Oracle для трех разных продуктов, только один из которых — BDB: [14]
BDB когда-то был очень широко распространен, но с 2013 года его использование резко упало (см. раздел лицензирования). Известное программное обеспечение, которое до сих пор использует Berkeley DB для хранения данных, включает:
Операционные системы с открытым исходным кодом и такие языки, как Perl и Python, по-прежнему поддерживают старые интерфейсы BerkelyDB. Операционные системы FreeBSD и OpenBSD поставляются с Berkeley DB 1.8x для поддержки вызова операционной системы dbopen() [18] [19] , используемого программами паролей, такими как . [20] Операционные системы Linux, в том числе основанные на Debian [21] и Fedora [22], поставляются с библиотеками Berkeley DB 5.3.pwb_mkdb
Berkeley DB версии 2.0 и выше доступна по двойной лицензии :
Переход с лицензии с открытым исходным кодом в 2013 году с лицензии Sleepycat на AGPL оказал серьезное влияние на программное обеспечение с открытым исходным кодом. Поскольку BDB — это библиотека, любое приложение, ссылающееся на нее, должно находиться под лицензией, совместимой с AGPL. Многие приложения с открытым исходным кодом и все приложения с закрытым исходным кодом необходимо будет повторно лицензировать, чтобы они стали совместимыми с AGPL, что было неприемлемо для многих разработчиков и операционных систем с открытым исходным кодом. К 2013 году существовало много альтернатив BDB, и Debian Linux был типичным в своем решении полностью отказаться от Berkeley DB, отдав предпочтение базе данных Lightning Memory-Mapped Database (LMDB). [25]