libmdbx 0.13.1 (РДС-1)

Леонид Юрьев обновлён 6 месяцев назад v0.13.1 5fc7a6b Релиз
0
Описание

Выпуск со сменой лицензии на Apache 2.0, существенным расширением API, добавлением функционала и внутренними переработками. В том числе, с незначительным нарушением обратной совместимости API библиотеки.

For translation to other languages please try Yandex or liar Google.

git diff' stat: 157 files changed, 41949 insertions(+), 33741 deletions(-)  
Signed-off-by: Леонид Юрьев (Leonid Yuriev) <leo@yuriev.ru>

Главное из нового:

  • Изменение лицензии на Apache 2.0, пояснения и подробности в файле COPYRIGHT.
  • Переработка курсоров для унификации поведения, более регулярного кода, уменьшения количества ветвлений и машинных операций.
  • Расширение 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().
  • Расширение и доработка C++ API (подробности в ChangeLog).
  • Реструктуризация исходного кода с рефакторингом.

Нарушение совместимости:

  • Использование термина “таблица” вместо “subDb”.
  • Опция MDBX_COALESCE объявлена устаревшей, так как соответствующий функционал всегда включен начиная с предыдущей версии 0.12.
  • Опция MDBX_NOTLS объявлена устаревшей и заменена на MDBX_NOSTICKYTHREADS.
  • Опция сборки MDBX_USE_VALGRIND заменена на общепринятую ENABLE_MEMCHECK.
  • В структуре MDBX_envinfo серии полей вида meta1, meta2 и meta3 заменены на массивы вида meta[3].
  • В шаблонных классах и функциях С++ API по-умолчанию вместо mdbx::legacy_buffer использован тип mdbx::default_buffer использующий полиморфные аллокаторы С++ 17.
  • Удаление DEFAULT_MAPSIZE и изменение геометрии по-умолчанию при создании БД.
  • Возвращение MDBX_TXN_INVALID (INT32_MIN) вместо -1 из mdbx_txn_flags() при передаче невалидной транзакции.

Исправления:

  • Исправление упущенного TXN_END_EOTDONE при сбое старта читающей транзакции. Упомянутый флажок отсутствовал в пути разрушения транзакции при ошибке её запуска. Из-за чего делалась попытка разрушить курсоры, что приводило к падению отладочных сборок, так как в них соответствующий массив намеренно заполнен некорректными указателями.
  • Устранение возможности SIGSEGV внутри coherency_check() после изменения геометрии другим процессом с увеличением верхнего размера БД и увеличением БД больше предыдущего лимита.
  • Исправление assert-проверки при попытке создания таблицы с другими флагами/опциями.

Загрузки:


За информацией о предыдущих версиях обращайтесь к тегам git и ChangeLog.

Файлы
  • Нет файлов