Објавување на вградени DBMS libmdbx 0.10.4 и libfpta 0.3.9 со високи перформанси

Библиотеката libmdbx 0.10.4 (MDBX) беше објавена со имплементација на компактна вградена база на податоци со клучни вредности со високи перформанси и поврзаната библиотека libfpta 0.3.9 (FPTA), која имплементира табеларна репрезентација на податоци со секундарни и композитни индекси на врвот на MDBX. Двете библиотеки се дистрибуираат под лиценци одобрени од OSI. Поддржани се сите сегашни оперативни системи и архитектури, како и рускиот Elbrus 2000.

Историски гледано, libmdbx е длабока преработка на LMDB DBMS и е супериорен во однос на неговиот предок по доверливост, сет на функции и перформанси. Во споредба со LMDB, libmdbx става голем акцент на квалитетот на кодот, стабилноста на API, тестирањето и автоматизираните проверки. Обезбедена е алатка за проверка на интегритетот на структурата на базата на податоци со некои можности за обновување.

Во однос на технологијата, libmdbx нуди ACID, серијализација на силни промени и читања без блокирање со линеарно скалирање низ јадрата на процесорот. Поддржани се автоматска компактификација, автоматско управување со големината на базата на податоци и проценка на барање за опсег. Од 2016 година, проектите се финансирани од Позитивни технологии и од 2017 година се користат во нејзините производи.

libmdbx нуди C++ API, како и јазични врски поддржани од ентузијасти за Rust, Haskell, Python, NodeJS, Ruby, Go и Nim. За libfpta, само описот на API е јавно достапен во форма на датотека за заглавие C/C++.

Главните иновации, подобрувања и корекции додадени од претходните вести на 9 мај:

  • Овозможува репродуктивни градби.
  • Поправена грешка поради која, во многу ретки околности, може да дојде до јамка/замрзнување при извршување на трансакцијата. Проблемот беше идентификуван од специјалисти на Позитивни технологии при интерното тестирање на нивните сопствени производи.
  • Тестовите се подобрени и тест сценаријата се проширени за да се проверат сите достапни неизоморфни состојби на дрвото на страници и содржината на 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 е подобрено и можноста за Додадена е отворена база на податоци за План 9, монтирана преку DrvFS.
  • Севкупно, направени се повеќе од 160 промени на 57 датотеки, додадени се ~ 5000 линии, ~ 2500 се избришани.

Посебно би сакал да му се заблагодарам на проектниот тим на Еригон (екосистем на Ethereum) за нивната помош во тестирањето во сценарија за екстремна употреба. Значајно е што за пет месеци од објавувањето на libmdbx v0.10.0, со волумен на базата на податоци од 1-2 TB во секоја инсталација на Erigon (се користи на 7% од Ethereum јазлите), беа примени само три извештаи за корупција на базата на податоци, сите што се случи поради надворешни причини, а не грешки на софтверот: во два случаи причината беше неуспех на RAM меморијата, во третиот грешка при ресетирање на податоците во специфична конфигурација на потсистемот за складирање користејќи BTRFS.

Извор: opennet.ru

Додадете коментар