Випуск компактної СУБД, що вбудовується libmdbx 0.9.1
Випущена версія 0.9.1 бібліотеки libmdbx (MDBX) з реалізацією високопродуктивної, компактної бази даних класу ключ-значення. Код libmdbx розповсюджується під ліцензією OpenLDAP Public License.
Поточна версія є компромісом між наміром випустити довготривалу стабільну версію 1.0 з повноцінною підтримкою C++ та небажанням відкладати релізи через неготовність до заморожування нового C++ API. Представлений реліз є результатом 9 місяців роботи спрямованої на стабілізацію бібліотеки та підвищення зручності її використання, а також включає попередню версію API C++.
Бібліотека libmdbx є не просто «форком», а кардинально переробленим нащадком LMDB - транзакційної вбудовуваної СУБД класу «ключ-значення» на основі дерева B+ без попереджувальної журналізації, яка дозволяє багатопотоковим процесам конкурентно і ефективно працювати з локально-розділюваною (не мережевою) БД без виділеного серверного процесу. Libmdbx принципово розширює можливості свого прабатька, одночасно усуваючи або пом'якшуючи недоліки. При цьому, на переконання розробників, libmdbx трохи швидше і суттєво надійніше за LMDB.
libmdbx пропонує ACID, Сувору серіалізацію змін і неблокуюче читання з лінійним масштабуванням по ядрах CPU. Результати тестування продуктивності (надсилання паралельних запитів на читання/пошук в 1-2-4-8 потоках на CPU i7-4600U з 2-ма фізичними ядрами в режимі 4-х потоків HyperThread):
Найважливіші відмінності MDBX щодо LMDB:
Принципово більше уваги приділяється якості коду, «непадучості» API, тестуванню та автоматичним перевіркам.
Значно більше контролю під час роботи, починаючи з перевірки параметрів, до внутрішнього аудиту структур бази даних.
Авто-компактифікація та автоматичне керування розміром БД.
Єдиний формат БД для 32-бітових та 64-бітних збірок.
Оцінка обсягу вибірок за діапазонами (range query estimation).
Підтримка ключів удвічі більшої довжини і розмір сторінки БД, що вибирається користувачем.
Утиліта перевірки цілісності структури БД із деякими можливостями відновлення.
Основні нововведення та доопрацювання після попередньої новини з поданням версії 0.5 у січні 2020:
Для оперативної підтримки та відповідей на запитання створено відкриту група в телеграм.
Усунено понад десяток помилок і недоліків (див. журнал змін).
Виправлена маса друкарських помилок та орфографічних помилок, множинні косметичні поліпшення.
Оформлено вбудовану документацію у форматі Doxygen та автоматичну генерацію. Online документації.
Забезпечено автоматичне формування архівів із амальгамованими вихідними текстами.
Додана підтримка підготовки транзакцій та курсорів, контекстів користувача для транзакцій та курсорів.
Реалізовано додаткові методи контролю цілісності посилання в MVCC-знімках B+tree.
Додано підтримку перевірки MVCC-знімка БД, доступного через будь-яку мета-сторінку з можливістю перемикання для відновлення.
Реалізовано підтримку повторного відкриття БД з одного процесу з метою тестування тощо.
Реалізовано автоматичну обробку опції MDBX_NOSUBDIR при відкритті БД.
Додані функції формування цілих ключів із значень плаваючої точки та «універсальних» чисел JavaScript.
Сумарно внесено 430 змін 93 файлів, що зачепили, додано більше 25 тисяч рядків, більше 8.5 тисяч рядків видалено.
Подальша розробка libmdbx буде зосереджена на формуванні фінального C++ API, подальшої стабілізації базового коду, підвищенні зручності використання бібліотеки, а також формування пакетів популярних дистрибутивів Linux. З передбачуваних доопрацювань варто відзначити підтримку ключів у форматі Пакет повідомлень.