Выпуск с расширением API и новым функционалом. Исправления и доработки в libfpta: ---------------------------------- - Изменение API с нарушением совместимости: * Использование `struct iovec` и/или `fptu::string_view` для имен fptu-символов вместо терминированных нулем C-строк; * Функции libfptu (кортежи) сериализации в JSON теперь принимают имена символов в `struct iovec`; * Функции libfpta возвращающие собственные/встроенные символы схемы БД для её экспорта в JSON теперь возвращают имена в `struct iovec`. В целом эти изменения не затрагивают основной функционал libfpta, но позволяют использовать API схемы fpta для экспорта данных БД в JSON. - Расширение API libfpta с сохранением устаревших функций для совместимости: * Использование `struct iovec` и/или `fptu::string_view` для имен fptа-символов вместо терминированных нулем C-строк; * Продублированы функции получающие терминированные нулем C-строки в качестве параметров связанных с именами в схеме данных, для всех таких функций добавлен вариант с суффиксом 2, который принимает `const struct iovec` вместо `const char*`; - Исправление неожиданной ошибки `FPTA_ENOSPACE` от `fpta_schema_render()` в редких случаях. - Обновление libmdbx до 0.12.2 (первый стабильный выпуск новой ветки 0.12), доработок очень много. - Совместимость с CMake 3.0.2 для возможности сборки (и прогона тестов) на старых системах и компиляторах. - Исправления для предотвращения таймаута тестов, в том числе при параллельном запуске, в том числе на Windows. - Удаление забытых упоминаний Github. Исправления и доработки в libmdbx: ---------------------------------- - Добавлена функция `mdbx_env_warmup()` для "прогрева" БД с возможностью закрепления страниц в памяти. В утилиты `mdbx_chk`, `mdbx_copy` и `mdbx_dump` добавлены опции `-u` и `-U` для активации соответствующего функционала. - Реализовано использование асинхронной (overlapped) записи в Windows, включая использования небуфферизированного ввода-вывода и `WriteGather()`. Это позволяет сократить накладные расходы и частично обойти проблемы Windows с низкой производительностью ввода-вывода, включая большие задержки `FlushFileBuffers()`. Новый код также обеспечивает консолидацию записываемых регионов на всех платформах, а на Windows использование событий (events) сведено к минимум, одновременно с автоматических использованием `WriteGather()`. Поэтому ожидается существенное снижение накладных расходов взаимодействия с ОС, а в Windows это ускорение, в некоторых сценариях, может быть кратным в сравнении с LMDB. - The `Big Foot` feature which significantly reduces GC overhead for processing large lists of retired pages from huge transactions. Now _libmdbx_ avoid creating large chunks of PNLs (page number lists) which required a long sequences of free pages, aka large/overflow pages. Thus avoiding searching, allocating and storing such sequences inside GC. - Improved hot/online validation and checking of database pages both for more robustness and performance. - New solid and fast method to latch meta-pages called `Troika`. The minimum of memory barriers, reads, comparisons and conditional transitions are used. - New `MDBX_VALIDATION` environment options to extra validation of DB structure and pages content for carefully/safe handling damaged or untrusted DB. - Accelerated ×16/×8/×4 by AVX512/AVX2/SSE2/Neon implementations of search page sequences. - The `C` and `C++` APIs has been extended and/or refined to simplify using `wchar_t` pathnames. On Windows the `mdbx_env_openW()`, ``mdbx_env_get_pathW()`()`, `mdbx_env_copyW()`, `mdbx_env_open_for_recoveryW()` are available for now, but the `mdbx_env_get_path()` has been replaced in favor of `mdbx_env_get_pathW()`. - Speed-up internal `bsearch`/`lower_bound` implementation using branchless tactic, including workaround for CLANG x86 optimiser bug. Более полная информация в [списке изменений libmdbx](https://github.com/erthink/libmdbx/blob/master/ChangeLog.md). 86 files changed, 18951 insertions(+), 12098 deletions(-) Signed-off-by: Леонид Юрьев (Leonid Yuriev) <leo@yuriev.ru>
Этот тег не содержит заметок к релизу