libmdbx 0.13.1 (РДС-1)
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-проверки при попытке создания таблицы с другими флагами/опциями.
Загрузки:
- 319K, libmdbx-amalgamated-0.13.1.zpaq, sha256sum:
14427ff9d87a38f26913b7e8cc95ca7ccdd2e3142d9abfb241288bc04b524336
- 430K, libmdbx-amalgamated-0.13.1.tar.xz, sha256sum:
aabb6bf34b8699b06de717a8facf8820a2fdd1bbe4ae0e90c9a2bbdb3880181d
За информацией о предыдущих версиях обращайтесь к тегам git и ChangeLog.
Файлы
Нет файлов