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

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

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

  • Изменение лицензии на код с OpenLDAP Public License на Apache 2.0.

  • Расширение API курсоров более удобными и очевидными операциями позиционирования по аналогии условиям ‹, ‹=, ==, ›=, › как для ключей, так и для пар ключ-значение. Добавлены функции mdbx_cursor_unbind (), и mdbx_txn_release_all_cursors () для гибкого управления курсорами в сценариях повторного использования для уменьшения накладных расходов. Функции mdbx_cursor_scan () и mdbx_cursor_scan_from () для сканирования таблиц с использованием функционального предиката и уменьшением сопутствующих накладных расходов.
  • Переработка курсоров для унификации поведения, более регулярного кода, уменьшения количества ветвлений и машинных операций.

  • Перенос функциональности утилиты mdbx_chk внутрь библиотеки в виде функции mdbx_env_chk () для проверка целостности структуры БД, в том числе с вовлечением логики приложения.
  • Опция MDBX_opt_gc_time_limit для более гибкого контроля времени расходуемого на поиск последовательностей соседствующих свободных страниц в GC.
  • Существенное снижение накладных расходов на запуск транзакций в сценариях с большим количеством DBI-хендов, за счёт отложенной/ленивой инициализации элементов служебных таблиц. В том числе, механизм поддержки разрежённых наборов DBI-хендов, управляемый опцией сборки MDBX_ENABLE_DBI_SPARSE, которая включена по умолчанию.
  • Снижение накладных расходов на открытие DBI-хендов. В том числе, механизм отложенного освобождения и поддержки быстрого пути открытия без использования блокировок, управляемый опцией сборки MDBX_ENABLE_DBI_LOCKFREE, которая включена по-умолчанию.
  • Поддержка «парковки» читающих транзакций с их вытеснением ради переработки старых MVCC-снимков и предотвращения проблем вызываемых приостановкой переработки мусора. Механизм парковки и вытеснения припаркованных транзакций является как дополнением, так и более простой в использовании альтернативой обратному вызову Handle-Slow-Readers. Для удобства функции mdbx_txn_park () и mdbx_txn_unpark () имеют дополнительные аргументы, позволяющие запросить автоматическую «распарковку» припаркованных и перезапуск вытесненных транзакций. В утилиту mdbx_copy добавлены соответствующие опции -d и -p.
  • Поддержка восстановления открытой среды работы с БД в дочернем процессе после ветвления/расщепления процесса посредством mdbx_env_resurrect_after_fork ().
  • Поддержка переименования таблиц посредством mdbx_dbi_rename () и mdbx_dbi_rename2(). Добавлена функция mdbx_enumerate_tables () для получение информации об именованных пользовательских таблицах.
  • Режим работы MDBX_NOSTICKYTHREADS вместо MDBX_NOTLS для упрощения интеграции с легковесными потоками/нитями их мультиплексирования вместе с транзакциями по потокам операционной системы.
  • Для идентификации БД добавлен UUID доступный в поле mi_dxbid структуры MDBX_envinfo, получаемой посредством mdbx_env_info_ex (). Реализовано получение информации о БД без её открытия посредством mdbx_preopen_snapinfo ().
  • Поддержка функций логирования обратного вызова без функциональности vprintf (), что существенно облегчает использование логирования в привязках к другим языкам программирования.
  • Добавление в API функций mdbx_txn_copy2pathname () и mdbx_txn_copy2fd ().
  • Реструктуризация исходного кода с рефакторингом.

  • Использование термина «таблица» вместо «subDb».
  • Объявление устаревшими опций MDBX_COALESCE и MDBX_NOTLS. Замена сборочной опции MDBX_USE_VALGRIND на общепринятую ENABLE_MEMCHECK.



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

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