Випуск вбудованої СУБД libmdbx 0.13.2

Опубліковано випуск бібліотеки libmdbx 0.13.2 (MDBX) з реалізацією високопродуктивної компактної бази даних класу ключ-значення. Код libmdbx розповсюджується під ліцензією Apache 2.0. Підтримуються всі актуальні операційні системи та архітектури, а також російський Ельбрус 2000. Для libmdbx пропонується розвинене API для C++, а також прив'язки, що підтримуються ентузіастами до мов Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.

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

Основні зміни:

  • Прискорено оновлення GC під час повернення/приміщення списків сторінок у складних сценаріях. Доопрацьовано та активовано раніше відключений експериментальний режим коригувального зворотного зв'язку. Цим принципово покращилася збіжність (зменшилася кількість повторних спроб), а також усунений дефект, що призводить до «зациклювання» при фіксації транзакцій (з поверненням помилки MDBX_PROBLEM) у рідкісних специфічних умовах.
  • У складальних скриптах CMake включений стандарт C23.
  • Додані T-макроси для парних функцій char/wchar_t.
  • У C++ API додано підтримку вкладених пишучих транзакцій.
  • Виконано перехід на другу редакцію специфікації семантичного версіонування («Semantic Versioning 2») та забезпечено експорт інформації про версію до VERSION.json.
  • Для відтворення збірок додано підтримку змінної оточення SOURCE_DATE_EPOCH. Підтримка MDBX_BUILD_TIMESTAMP збережена і ця змінна має пріоритет.
  • Додано можливість вказувати додаткову інформацію про складання libmdbx через опцію MDBX_BUILD_METADATA. Зараз інформація, що задається просто включається всередину бібліотеки як значення mdbx_build.metadata, а надалі також буде використовуватися при формуванні пакетів і т.п.
  • Додано логування помилок, що повертаються з API. Тепер для цього достатньо встановити рівень логування MDBX_LOG_DEBUG (для логування помилок за вирахуванням MDBX_NOTFOUND) або MDBX_LOG_TRACE (для логування всіх помилок, а також MDBX_RESULT_TRUE).
  • Зміна поведінки:
    • Доданий метод mdbx::cursor::get_multiple_samelength() та перейменований mdbx::txn::put_multiple_samelength().
    • Для одноманітності C++ API під час операції MDBX_GET_MULTIPLE тепер також повертається значення самого ключа.
    • Для розмірних констант mdbx::env::geometry базовий тип змінено з беззнакового size_t на знаковий intptr_t.
    • Вибір на користь використання ntdll замість CRT тепер робиться тільки за умови явного відключення C++ API.
    • Забезпечено звільнення пам'яті скинутих/перерваних транзакцій, що читають, що передаються в mdbx_txn_commit(). Угода API вимагає, щоб такі транзакції звільнялися за допомогою mdbx_txn_abort(), через що функція mdbx_txn_commit() повертала помилку в таких випадках, не руйнуючи самі транзакції. Це призводило до витоків пам'яті через помилки у додатках, що спонукало змінити поведінку.
    • Використання макросу __deprecated_enum, якщо його визначено.
    • Під час складання за допомогою CMake вибір стандарту мови C тепер виконується з урахуванням CMAKE_C_STANDARD.

Джерело: opennet.ru

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