Թողարկվել է libmdbx 0.11.3 (MDBX) գրադարանը, որն իրականացնում է բարձր արդյունավետությամբ կոմպակտ ներդրված բանալի-արժեք տվյալների բազա։ Libmdbx կոդը տարածվում է OpenLDAP Public License-ի ներքո։ Աջակցվում են բոլոր ներկայիս օպերացիոն համակարգերն ու ճարտարապետությունները, ինչպես նաև ռուսական Elbrus 2000-ը։ 2021 թվականի վերջին libmdbx-ը օգտագործվում է որպես պահեստային համակարգ Ethereum-ի երկու ամենաարագ հաճախորդներում՝ Erigon-ում և նոր «Shark»-ում, որը, ըստ առկա տեղեկությունների, ամենաբարձր արդյունավետությամբ Ethereum հաճախորդն է։
Պատմականորեն, libmdbx-ը LMDB DBMS-ի խորը վերամշակում է և գերազանցում է իր նախորդին հուսալիությամբ, հնարավորություններով և կատարողականությամբ։ LMDB-ի համեմատ, libmdbx-ը մեծ շեշտադրում է կատարում կոդի որակի, API-ի կայունության, թեստավորման և ավտոմատացված ստուգումների վրա։ Մատակարարվում է տվյալների բազայի կառուցվածքի ամբողջականությունը ստուգելու գործիք՝ որոշ վերականգնման հնարավորություններով։
Տեխնոլոգիապես, libmdbx-ը առաջարկում է ACID, փոփոխությունների խիստ սերիականացում և չարգելափակող ընթերցում՝ CPU միջուկների միջև գծային մասշտաբավորմամբ: Աջակցվում են ավտոմատ կոմպակտացումը, տվյալների բազայի չափի ավտոմատ կառավարումը և միջակայքի հարցումների գնահատումը: 2016 թվականից ի վեր նախագիծը ֆինանսավորվել է Positive Technologies-ի կողմից և օգտագործվել է դրա արտադրանքներում 2017 թվականից:
libmdbx-ը առաջարկում է C++ API, ինչպես նաև համայնքի կողմից աջակցվող կապեր Rust, Haskell, Python, NodeJS, Ruby, Go, Nim լեզուների հետ։
Հոկտեմբերի 11-ի նախորդ նորություններից հետո ավելացված հիմնական նորությունները, բարելավումները և ուղղումները.
- C++ API-ը համարվում է օգտագործման համար պատրաստ։
- Մեծ գործարքներ կատարելիս GC տվյալների թարմացումը զգալիորեն արագացել է, ինչը հատկապես կարևոր է Ethereum էկոհամակարգում libmdbx-ն օգտագործելիս։
- Տվյալների բազայի ձևաչափի ներքին ստորագրությունը փոխվել է՝ ավտոմատ թարմացումը ապահովելու համար, որը լիովին թափանցիկ է օգտատերերի համար: Սա վերացնում է տվյալների բազայի վնասման մասին կեղծ դրական հաղորդագրությունները, երբ գրադարանի հնացած տարբերակներն օգտագործվում են ընթացիկ տարբերակների կողմից կատարված գործարքները կարդալու համար:
- Ավելացվել են mdbx_env_get_syncbytes(), mdbx_env_get_syncperiod() և mdbx_env_get_syncbytes() ֆունկցիաները։ Ավելացվել է MDBX_SET_UPPERBOUND գործողության աջակցությունը։
- Բոլոր նախազգուշացումները վերացվել են C++ 11/14/17/20 ռեժիմներում բոլոր աջակցվող կոմպիլյատորներով կառուցելիս։ Ապահովվել է համատեղելիություն հնացած կոմպիլյատորների հետ՝ clang 3.9-ից, gcc 4.8-ից, ներառյալ cdevtoolset-9-ով կառուցելը։ CentOS/RHEL 7.
- Ուղղվել է մետա էջի կոնֆլիկտի հնարավորությունը mdbx_chk օգտակար ծրագրի միջոցով որոշակի մետա էջին ձեռքով անցնելուց հետո։
- Ուղղվել է MDBX_PROBLEM անսպասելի սխալը, որը վերադարձվում էր հնացած մետա էջերը վերաշարադրելիս։
- Ուղղվել է MDBX_GET_BOTH հարցումը մշակելիս անճշգրիտ համընկնման դեպքում MDBX_NOTFOUND վերադարձնելու խնդիրը։
- Ուղղվել է կոմպիլյացիայի սխալը Linux միջուկի հետ ինտերֆեյսները նկարագրող վերնագրային ֆայլերի բացակայության դեպքում։
- Ուղղվել է ներքին MDBX_SHRINK_ALLOWED դրոշի և MDBX_ACCEDE տարբերակի միջև բախումը։
- Մի քանի ավելորդ հաստատման ստուգումներ հեռացվել են։
- Ուղղվել է mdbx_env_set_option() ֆունկցիայից MDBX_RESULT_TRUE-ի անսպասելի վերադարձը։
- Ընդհանուր առմամբ 90 ֆայլում կատարվել է ավելի քան 25 փոփոխություն, ավելացվել է ~1300 տող, ~600-ը ջնջվել է։
Source: opennet.ru
