Выпуск встраиваемой СУБД libmdbx 0.13.3

Опубликован выпуск библиотеки libmdbx 0.13.3 (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).

Основные изменения:

  • Ветка 0.13.x получила статус стабильной. Началась разработка ветки 0.14.x.

  • В C API добавлена функция mdbx_cursor_count_ex (), позволяющая получить как количество мульти-значений соответствующих текущему ключу, так и информацию о вложенном дереве, хранящем эти значения.

  • В C++ API добавлен метод mdbx: txn: make_broken () аналогичный mdbx_txn_break ().
  • В утилитах mdbx_copy, mdbx_drop, mdbx_dump, mdbx_load, mdbx_stat реализовано логирование ошибок, предупреждений и важных сообщений от libmdbx.

  • Изменение поведения:
    • При включении профилирования сборщика мусора (сборка с опцией MDBX_ENABLE_PROFGC=ON) теперь подсчитываются затраты времени CPU на слияние списков страниц, т.е. на работу функции pnl_merge ().

    • В утилите тестирования значение режима данных переименовано из data.dups в data.multi.
    • Доработан контроль длины ключа внутри cursor_seek ().
    • Если посредством mdbx_env_set_option (MDBX_opt_txn_dp_limit) пользователем не задано собственно значение, то выполняется подстройка dirty-pages-limit при старте каждой не вложенной пишущей транзакций, исходя из объёма доступного ОЗУ и размера БД.
    • В режиме MDBX_NOSTICKYTHREADS допускается commit/abort вложенных транзакций из любого треда/потока.
    • При попытке запуска вложенных транзакций в режиме MDBX_WRITEMAP производится логирование и возврат ошибки MDBX_INCOMPATIBLE.
    • В C++ API в конструкторах/инициализаторах и методах, связанных с формированием геометрии БД, по умолчанию используются только default-значения.
    • Внутри mdbx_env_set_geometry () доработаны эвристики для подбора параметров геометрии БД запрошенных пользователем «по умолчанию».
  • Исправления:
    • Устранён регресс неразблокировки мьютекса при попытки повторного закрытия dbi-дескриптора, в том числе при попытке явно закрыть дескриптор после удаления связанной с ним таблицы.
    • Устранён регресс состояния вложенного/dupsort курсора после вставки данных в MDBX_APPEND-режиме.
    • Поддержка получения boot_id при работе внутри LXC-контейнера.
    • Устранёна ошибка неверной обработки попытки запуска вложенной читающей транзакции. Теперь в таких ситуациях возвращается ошибка MDBX_EINVAL, так как вложенность поддерживается только для транзакций чтения-записи.
    • Устранён SIGSEGV-регресс обращения к нулевому адресу при работе в режиме только-чтение без использования LCK-файла, например при размещении БД на носителе доступном только для чтения.



Источник: http://www.opennet.ru/opennews/art.shtml? num=62554

OpenNet прочитано 2381 раз