Другий кандидат у релізи libmdbx v1.0 після п'яти років розробки.

Бібліотека libmdbx є істотно переробленим нащадком LMDB — гранично високопродуктивною, компактною базою даних класу ключ-значення, що вбудовується.
Поточна версія v0.5 є технічним релізом, що відзначає завершення будь-яких доопрацювань і перехід до фази публічного фінального тестування та стабілізації, з подальшим формуванням першого повноцінного релізу бібліотеки.

LMDB є досить відомою транзакційною вбудовуваною СУБД класу «ключ-значення» на основі дерева B+ без попереджувальної журналізації, Що дозволяє рою багатопоточних процесів конкурентно і гранично ефективно працювати з локально-розділюваною (не мережевою) БД. У свою чергу MDBX швидше і надійніше LMDB, при цьому libmdbx зберігає всі ключові можливості свого прабатька, такі як ACID та неблокуюче читання з лінійним масштабуванням по ядрах CPU, а також додає кілька нових.

Опис відмінностей та удосконалень libmdbx щодо LMDB заслуговує на окрему статтю (планується публікації на «Хабрі» та «Medium»). Тут же доречно згадати найважливіші та помітні:

  • Принципово більше уваги приділяється якості коду, тестуванню та автоматичним перевіркам.
  • Значно більше контролю під час роботи, починаючи з перевірки параметрів, до внутрішнього аудиту структур бази даних.
  • Авто-компактифікація та автоматичне керування розміром БД.
  • Єдиний формат БД для 32-бітових та 64-бітних збірок.
  • Оцінка обсягу вибірок за діапазонами (range query estimation).
  • Підтримка ключів вдвічі більшої млинці і розмір сторінки БД, що вибирається користувачем.

Випущений реліз-кандидат libmdbx є результатом рішення (див. далі) про поділ проектів MDBX та MithrilDB у серпні 2019. При цьому в libmdbx було вирішено усунути (раціональний) максимум технічного боргу та стабілізувати бібліотеку. По факту в зазначеному напрямку зроблено в 2-3 рази більше, ніж оцінювалося і планувалося вихідно:

  • Реалізовано підтримку Mac OS та платформ «другого ешелону»: FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. Підтримка AIX та HP -UX може бути додана за потреби.
  • Проведено санацію коду за допомогою Undefined Behavior Sanitizer та Address Sanitizer, усунуто всі попередження при складанні з -Wpedantic, всі попередження Coverity Static Analyzer і т.д.
  • Актуалізація опис API.
  • Амальгамація вихідного коду для зручності вбудовування.
  • Підтримка CMake.
  • Підтримка вкладених транзакцій.
  • Використання bootid визначення факту перезавантаження ОС (брудної зупинки БД).
  • Наскрізний підрахунок оновлених/старих сторінок та розширена інформація про транзакції.
  • Опція MDBX_ACCEDE для підключення до вже відкритої бази даних у сумісному режимі.
  • Використання OFD-блокувань за їх доступності.
  • Гаряча резервна копія в pipe.
  • Спеціалізований оптимізований алгоритм внутрішнього сортування (до 2-3 разів швидше за qsort() і до 30% швидше за std::sort()).
  • Збільшено максимальну довжину ключа.
  • Автоматичне керування read ahead (стратегією кешування файлу БД у пам'яті).
  • Більш агресивна та швидка автокомпактифікація.
  • Більше оптимальна стратегія злиття сторінок B+ дерева.
  • Контролює нелокальні файлові системи (NFS, Samba тощо) для запобігання пошкодженню БД при неправильному використанні.
  • Розширено набір тестів.

Розробка «наступної» версії libmdbx буде продовжена в рамках окремого проекту MithrilDBУ той час як вектор розробки «поточної» версії MDBX спрямований на заморожування набору можливостей і стабілізацію. Таке рішення ухвалено з трьох причин:

  • Повна несумісність: для реалізації всіх запланованих можливостей MithrilDB потрібен інший (несумісний) формат файлів БД та інше (несумісне) API.
  • Новий вихідний код: для вихідного коду MithrilDB забезпечено ліцензійну незалежність від LMDB, а сам проект планується опублікувати під іншою ліцензією (схваленою) АБО ЯКЩО ліцензією Apache 2.0, А не OpenLDAP Foundation).
  • Поділ дозволяє уникнути потенційної плутанини, внести більше визначеності та забезпечити незалежність шляху розвитку проектів.

MithrilDB як і MDBX, також ґрунтується на дереві B+ і також буде відрізнятися гранично високою продуктивністю, при цьому усуваючи ряд важливих недоліків MDBX і LMDB. Зокрема, буде ліквідовано проблему «довгих читань», що виявляється як «розпухання» БД через те, що переробка сміття блокується довгими транзакціями, що читають. Серед нових можливостей MithrilDB слід зазначити:

  • підтримка розміщення БД на кількох різнорідних носіях: HDD, SSD та енергонезалежній пам'яті.
  • оптимальні стратегії для «цінних» та «малоцінних», для «гарячих», «теплих» та «холодних» даних.
  • використання Merkle tree контролю цілісності БД.
  • опціональне використання WAL та суттєво вища продуктивно у сценаріях з інтенсивним записом та гарантіями на цілісність даних.
  • лінива наздоганяюча фіксація даних на дисках.

Джерело: linux.org.ru

Додати коментар або відгук