Библиотеката libmdbx 0.11.3 (MDBX) беше објавена со имплементација на компактна вградена база на податоци со вредности на клучеви со високи перформанси. Кодот libmdbx е лиценциран под јавна лиценца OpenLDAP. Поддржани се сите тековни оперативни системи и архитектури, како и рускиот Elbrus 2000. На крајот на 2021 година, libmdbx се користи како заднина за складирање во двата најбрзи клиенти на Ethereum - Еригон и новиот „Ајкула“, кои, според достапните информации, е клиентот на Ethereum со највисоки перформанси.
Историски гледано, libmdbx е длабока преработка на LMDB DBMS и е супериорен во однос на неговиот предок по доверливост, сет на функции и перформанси. Во споредба со LMDB, libmdbx става голем акцент на квалитетот на кодот, стабилноста на API, тестирањето и автоматизираните проверки. Обезбедена е алатка за проверка на интегритетот на структурата на базата на податоци со некои можности за обновување.
Во однос на технологијата, libmdbx нуди ACID, серијализација на силни промени и читања без блокирање со линеарно скалирање низ јадрата на процесорот. Поддржани се автоматска компактификација, автоматско управување со големината на базата на податоци и проценка на барање за опсег. Од 2016 година, проектот е финансиран од Позитивни технологии и се користи во нејзините производи од 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.
- Сите предупредувања при градење со сите поддржани компајлери во режимите C++ 11/14/17/20 се елиминирани. Обезбедена е компатибилност со старите компајлери: ѕвонење почнувајќи од 3.9, gcc почнувајќи од 4.8, вклучувајќи склопување со користење на cdevtoolset-9 за CentOS/RHEL 7.
- Поправена е можноста за конфликт на мета-страница по рачно префрлување на одредена мета-страница користејќи ја алатката mdbx_chk.
- Поправена е вратена неочекувана грешка MDBX_PROBLEM при препишување на мета-страниците на старите.
- Поправено враќање на MDBX_NOTFOUND во случај на неточна совпаѓање при обработка на барање MDBX_GET_BOTH.
- Поправена грешка при компилација на Linux во отсуство на датотеки со заглавие со описи на интерфејси со кернелот.
- Поправен е конфликт помеѓу внатрешното знаменце MDBX_SHRINK_ALLOWED и опцијата MDBX_ACCEDE.
- Неколку непотребни проверки на тврдењата се елиминирани.
- Поправено неочекувано враќање на MDBX_RESULT_TRUE од функцијата mdbx_env_set_option().
- Севкупно, направени се повеќе од 90 промени на 25 датотеки, додадени се ~ 1300 линии, ~ 600 се избришани.
Извор: opennet.ru