U lançua bibliotekat libmdbx 0.10.4 (MDBX) me implementimin e një baze të dhënash të integruar të klasës çelës-vlerë me performancë të lartë dhe bibliotekën e lidhur libfpta 0.3.9 (FPTA), që realizon një paraqitje tabelare të të dhënave mbi MDBX me indekset dytësore dhe përbërëse. Të dy bibliotekat shpërndahen nën licencat e miratuara nga OSI. Mbështeten të gjitha sistemet operative dhe arkitekturave aktuale, si dhe Elbrusi rus 2000.
Historikisht, libmdbx është një rishikim i thellë i DBMS LMDB dhe tejkalon paraardhësin e tij në qëndrueshmëri, setin e mundësive dhe performancën. Në krahasim me LMDB, libmdbx i kushton një vëmendje të madhe cilësisë së kodit, funksionimit të qëndrueshëm të API-t, testimit dhe kontrollëve automatike. Ofron një mjet për kontrollin e integritetit të strukturës së DB me disa mundësi rikuperimi.
Teknikisht, libmdbx ofron ACID, serializimin rigoroz të ndryshimeve dhe leximin pa bllokim me shkallëzim linear sipas bërthamave të CPU-së. Mbështetet autokompkaktikimi, menaxhimi automatik i madhësisë së DB-së, vlerësimi i volumit të mostrave sipas intervaleve (vlerësimi i pyetjes së intervalit). Që nga viti 2016, projektet financohen nga kompania Positive Technologies dhe nga viti 2017 përdoren në produktet e saj.
Për libmdbx, ofrohet një API C++, si dhe lidhje të mbështetura nga entuziastët për gjuhët Rust, Haskell, Python, NodeJS, Ruby, Go, Nim. Për libfpta, përshkrimi i API-t është në dispozicion publik vetëm në formën e një skedari titulli C/C++.
Novitetet, përmirësimet dhe korrigjimet kryesore, të shtuar pas lajmeve të mëparshme nga 9 maji:
- Siguruar mundësia e ndërtimeve të riprodhueshme.
- Eliminimi i një gabimi, i cili në rrethana shumë të rralla gjatë regjistrimit të një transaksioni mund të shkaktonte ciklikë/ngatërrim. Problemi u identifikua nga specialistët e Positive Technologies gjatë testimit të brendshëm të produkteve të saj.
- Testet janë përmirësuar dhe skenarët e testimit janë zgjeruar për të kontrolluar të gjitha gjendjet e arritshme jo izomorfe të pemës së faqeve dhe përmbajtjes GC brenda DB-së.
- Në API-në C++, është korrigjuar një "noexcept" i tepërt, janë shtuar mbivendosje të tjera për metodën "cursor::erase()", realizimi i bufferave është çliruar nga përdorimi i "std::string" për të siguruar përputhshmëri (e rëndësishme për CLANG libstdc++).
- Решен регресс в алгоритме спиллинга грязных страниц (селективное вытеснение изменённых страниц БД), проявлявшийся редкой неожиданной ошибкой MDBX_PROBLEM при изменении данных в огромных транзакциях.
- Проведена проверка фазингом с добавлением ряда проверок для обеспечения стабильности при намеренном повреждении БД.
- Устранены незначительные предупреждения UndefinedBehaviorSanitizer и Coverity Scan issues.
- Исправлена проверка устаревшего и уже неиспользуемого внутреннего флага «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.
Burimi: opennet.ru
