Състоя се пускането на библиотеките libmdbx 0.10.4 (MDBX) с реализиране на високо производителна компактна вградена база данни от клас ключ-стойност и свързаната библиотека libfpta 0.3.9 (FPTA), реализираща върху MDBX таблично представяне на данни с вторични и съставни индекси. И двете библиотеки се разпространяват под лицензи, одобрени от OSI. Поддържат се всички актуални операционни системи и архитектури, включително руската Елбрус 2000.
Исторически, libmdbx е дълбока преработка на СУБД LMDB и надминава своя предшественик по надеждност, набор от възможности и производителност. В сравнение с LMDB, в libmdbx голямо внимание се обръща на качеството на кода, стабилната работа на API, тестването и автоматичните проверки. Предлага се инструмент за проверка на целостта на структурата на БД с някои възможности за възстановяване.
Технологически, libmdbx предлага ACID, строга сериализация на промените и неблокиращо четене с линейно мащабиране по ядра на ЦПУ. Поддържа се авто-компактиране, автоматично управление на размера на БД и оценка на обема на селекциите по диапазони (range query estimation). От 2016 г. проектите се финансират от компанията Positive Technologies и от 2017 г. се използват в нейни продукти.
За libmdbx се предлага C++ API, а също така поддържани ентусиасти привързки към езици като Rust, Haskell, Python, NodeJS, Ruby, Go, Nim. За libfpta публично е достъпно само описанието на API под формата на заглавен файл C/C++.
Основни нововъведения, доработки и поправки, добавени след предходната новина от 9 май:
- Осигурена е възможност за възпроизводими сборки.
- Отстранена е грешка, при която в много редки случаи по време на фиксацията на транзакция можеше да се получи зацикляне/зависване. Проблемът бе установен от специалистите на Positive Technologies по време на вътрешното тестване на собствените им продукти.
- Разширени са тестовете и разширени са тестовите сценарии за проверка на всички достижими неизоморфни състояния на дървото на страниците и съдържанието на GC в рамките на БД.
- В C++ API е коригиран излишният «noexcept», добавени са допълнителни претоварвания за метода «cursor::erase()», реализирането на буферите е освободено от използването на «std::string» за осигуряване на подравняване (актуално за CLANG libstdc++).
- Отстранен регрес в алгоритме спилинга грязных страниц (избирательное вытеснение измененных страниц БД), проявлявшийся редкой неожиданной ошибкой MDBX_PROBLEM при изменении данных в огромных транзакциях.
- Проведена проверка с фазингом с добавлением ряда проверок для обеспечения стабильности при намеренном повреждении БД.
- Устранены незначительные предупреждения UndefinedBehaviorSanitizer и обнаруженные проблемы Coverity Scan.
- Исправлена проверка устаревшего и уже неиспользуемого внутреннего флага «P_DIRTY» во вложенных страницах внутри образов БД, созданных старыми версиями библиотеки.
- В скриптах CMake доработан поиск компонентов компилятора, необходимых для LTO (оптимизация во время компиляции).
- Максимальное количество одновременных читателей увеличено до 32767.
- Ускорена работа при использовании Valgrind и AddressSanitizer.
- На Windows устранено рекурсивное использование SRW-lock при работе в режиме MDBX_NOTLS (без использования хранилища потоков), исправлена генерация bootid в случае изменения системного времени, доработано детектирование WSL1 и WSL2, добавлена возможность открытия БД на Plan 9, смонтированной посредством DrvFS.
- Суммарно внесено более 160 изменений в 57 файлов, добавлено около 5000 строк, удалено около 2500.
Отдельно хочется поблагодарить команду проекта Erigon (экосистема Ethereum) за помощь в тестировании в экстремальных сценариях использования. Показательно, что за пять месяцев с момента выхода libmdbx v0.10.0, при объеме БД 1-2 Тб в каждой инсталляции Erigon (используется на 7% узлов Ethereum), поступило только три сообщения о повреждении БД, все произошли из-за внешних причин, а не ошибок ПО: в двух случаях причиной были сбои ОЗУ, в третьем - ошибка обнуления данных в специфической конфигурации подсистемы хранения с использованием BTRFS.
Източник: opennet.ru
