Состоялся выпуск библиотеки libmdbx 0.11.3 (MDBX) с реализацией высокопроизводительной компактной встраиваемой базы данных класса ключ-значение. Код libmdbx распространяется под лицензией OpenLDAP Public License. Поддерживаются все актуальные операционные системы и архитектуры, а также российский Эльбрус 2000. На конец уходящего 2021 года libmdbx используется как бэкенд хранения в двух самых быстрых клиентах Ethereum — Erigon и новой «Акуле», которая по доступной информации является самым высокопроизводительным клиентом Ethereum.
Исторически libmdbx является глубокой переработкой СУБД LMDB и превосходит своего прародителя по надёжности, набору возможностей и производительности. В сравнении с LMDB, в libmdbx большое внимание уделяется качеству кода, стабильной работе API, тестированию и автоматическим проверкам. Поставляется утилита проверки целостности структуры БД с некоторыми возможностями восстановления.
Технологически libmdbx предлагает ACID, строгую сериализацию изменений и неблокирующее чтение с линейным масштабированием по ядрам ЦПУ. Поддерживается автокомпактификация, автоматическое управление размером БД, оценка объёма выборок по диапазонам (range query estimation). С 2016 года проект финансируется компанией Positive Technologies и c 2017 года используется в её продуктах.
Для libmdbx предлагается C++ API, а также поддерживаемые энтузиастами привязки к языкам Rust, Haskell, Python, NodeJS, Ruby, Go, Nim.
Основные новшества, доработки и исправления, добавленные после предыдущей новости от 11 октября:
- C++ API считается готовым к применению.
- Существенно ускоренно обновление данных GC при фиксации огромных транзакций, что особенно актуально при использовании libmdbx в экосистеме Ethereum.
- Изменена внутренняя сигнатура формата БД с поддержкой автоматического обновления, которое полностью прозрачно для пользователей. Это позволяет исключить ложно-положительные сообщения о повреждении БД, когда устаревшие версии библиотеки использутся для чтения транзакций зафиксированных актуальными версиями.
- Добавлены функции mdbx_env_get_syncbytes(), mdbx_env_get_syncperiod() и mdbx_env_get_syncbytes(). Добавлена поддержка операции MDBX_SET_UPPERBOUND.
- Устранены все предупреждения при сборке всеми поддерживаемыми компиляторами в режимах С++ 11/14/17/20. Обеспечена совместимость с устаревшими компиляторами: clang начиная с 3.9, gcc начиная с 4.8, включая сборку посредством сdevtoolset-9 для CentOS/RHEL 7.
- Устранена возможность конфликта мета-страниц после ручного переключения на определенную мета-страницу с помощью утилиты mdbx_chk.
- Исправлен возврат неожиданной ошибки MDBX_PROBLEM при перезаписи устаревших мета-страниц.
- Исправлен возврат MDBX_NOTFOUND в случае неточного совпадения при обработке запроса MDBX_GET_BOTH.
- Устранена ошибка компиляции на Linux при отсутствии заголовочных файлов с описаниями интерфейсов с ядром.
- Исправлена коллизия между внутренним флагом MDBX_SHRINK_ALLOWED и опцией MDBX_ACCEDE.
- Устранено несколько излишних assert-проверок.
- Исправлена неожиданный возврат MDBX_RESULT_TRUE из функции mdbx_env_set_option().
- Суммарно внесено более 90 изменений в 25 файлов, добавлено ~1300 строк, удалено ~600.