Після п'яти років розробки опубліковано другого кандидата в релізи libmdbx 1.0

доступний для тестування другий кандидат у релізи бібліотеки libmdbx з реалізацією високопродуктивної, компактної бази даних класу, що вбудовується, ключ-значення. Поточна версія (0.5) є технічним релізом, відзначає завершення будь-яких доопрацювань та перехід до фази публічного фінального тестування та стабілізації, з подальшим формуванням першого повноцінного релізу бібліотеки. Код libmdbx поширюється під ліцензією OpenLDAP Public License.

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

Найважливіші відмінності MDBX щодо LMDB:

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

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

  • Реалізовано підтримку macOS та платформ «другого ешелону»: 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 Public License).
  • Поділ дозволяє уникнути потенційної плутанини, внести більше певності та забезпечити незалежність шляху розвитку проектів.

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

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

Джерело: opennet.ru

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