Випуск високопродуктивної СУБД, що вбудовується libmdbx 0.11.3

Відбувся випуск бібліотеки libmdbx 0.11.3 (MDBX) з реалізацією високопродуктивної компактної бази даних класу ключ-значення. Код libmdbx розповсюджується під ліцензією OpenLDAP Public License. Підтримуються всі актуальні операційні системи та архітектури, а також російський Ельбрус 2000. На кінець 2021 року libmdbx використовується як бекенд зберігання в двох найшвидших клієнтах Ethereum — Erigon і новій «Акулі», яка за доступною інформацією є найпродуктивнішим клієнтом Ethereum.

Історично libmdbx є глибокою переробкою СУБД LMDB і перевершує свого прабатька за надійністю, набором можливостей та продуктивністю. У порівнянні з LMDB, у libmdbx велика увага приділяється якості коду, стабільній роботі API, тестуванню та автоматичним перевіркам. Постачається утиліта перевірки цілісності структури БД із деякими можливостями відновлення.

Технологічно libmdbx пропонує ACID, строгу серіалізацію змін та неблокуюче читання з лінійним масштабуванням по ядрах ЦПУ. Підтримується автокомпактифікація, автоматичне керування розміром БД, оцінка обсягу вибірок діапазонів (range query estimation). З 2016 року проект фінансується компанією Positive Technologies і з 2017 року використовується у її продуктах.

Для libmdbx пропонується C++ API, а також підтримувані ентузіастами прив'язки до мов Rust, Haskell, Python, NodeJS, Ruby, Go, Nim.

Основні нововведення, доопрацювання та виправлення, додані після попередньої новини від 11 жовтня:

  • C++ API вважається готовим до застосування.
  • Істотно прискорено оновлення даних GC при фіксації великих транзакцій, що особливо актуально при використанні libmdbx в екосистемі Ethereum.
  • Змінено внутрішню сигнатуру формату БД з підтримкою автоматичного оновлення, яке повністю прозоре для користувачів. Це дозволяє виключити помилково-позитивні повідомлення про пошкодження БД, коли застарілі версії бібліотеки використовуються для читання транзакцій, зафіксованих актуальними версіями.
  • Додані функції mdbx_env_get_syncbytes(), mdbx_env_get_syncperiod() та mdbx_env_get_syncbytes(). Додано підтримку операції MDBX_SET_UPPERBOUND.
  • Усунені всі попередження при складанні всіма компіляторами, що підтримуються в режимах С++ 11/14/17/20. Забезпечена сумісність із застарілими компіляторами: clang починаючи з 3.9, gcc починаючи з 4.8, включаючи складання за допомогою сdevtoolset-9 для CentOS/RHEL 7.
  • Усунуто можливість конфлікту мета-сторінок після ручного перемикання на певну мета-сторінку за допомогою утиліти mdbx_chk.
  • Виправлено повернення несподіваної помилки MDBX_PROBLEM під час перезапису застарілих мета-сторінок.
  • Виправлено повернення MDBX_NOTFOUND у разі неточного збігу під час обробки запиту MDBX_GET_BOTH.
  • Усунуто помилку компіляції на Linux за відсутності заголовних файлів з описами інтерфейсів з ядром.
  • Виправлена ​​колізія між внутрішнім прапором MDBX_SHRINK_ALLOWED та опцією MDBX_ACCEDE.
  • Усунуто кілька зайвих assert-перевірок.
  • Виправлено несподіване повернення MDBX_RESULT_TRUE з функції mdbx_env_set_option().
  • Сумарно внесено понад 90 змін до 25 файлів, додано ~1300 рядків, видалено ~600.

Джерело: opennet.ru

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