libmdbx 0.10.4 (MDBX) գրադարանները թողարկվել են բարձր արդյունավետության կոմպակտ ներկառուցված բանալի-արժեքի տվյալների բազայի ներդրմամբ և հարակից libfpta 0.3.9 (FPTA) գրադարանով, որն իրականացնում է տվյալների աղյուսակային ներկայացում երկրորդական և կոմպոզիտային ինդեքսներով: MDBX-ի վերևում: Երկու գրադարաններն էլ բաշխվում են OSI-ի կողմից հաստատված լիցենզիաների ներքո: Աջակցվում են բոլոր ընթացիկ օպերացիոն համակարգերը և ճարտարապետությունը, ինչպես նաև ռուսական Elbrus 2000-ը:
Պատմականորեն, libmdbx-ը LMDB DBMS-ի խորը վերամշակումն է և հուսալիությամբ, առանձնահատկությունների հավաքածուով և կատարողականությամբ գերազանցում է իր նախնին: LMDB-ի համեմատ, libmdbx-ը մեծ ուշադրություն է դարձնում կոդի որակի, API-ի կայունության, փորձարկման և ավտոմատացված ստուգումների վրա: Տրամադրվում է տվյալների բազայի կառուցվածքի ամբողջականությունը որոշ վերականգնման հնարավորություններով ստուգելու օգտակար ծրագիր:
Տեխնոլոգիայի առումով libmdbx-ն առաջարկում է ACID, ուժեղ փոփոխությունների սերիալացում և չարգելափակող ընթերցումներ՝ գծային մասշտաբով պրոցեսորի միջուկներում: Աջակցվում է ավտոմատ կոմպակտացում, տվյալների բազայի չափի ավտոմատ կառավարում և տիրույթի հարցումների գնահատում: 2016թ.-ից նախագծերը ֆինանսավորվում են Positive Technologies-ի կողմից և 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-ի համար անհրաժեշտ կոմպիլյատորի բաղադրիչների որոնումը (link-time optimization):
- Միաժամանակյա ընթերցողների առավելագույն թիվը հասցվել է 32767-ի։
- Բարելավված կատարողականություն Valgrind և AddressSanitizer-ի օգտագործման ժամանակ:
- Windows-ում SRW կողպեքի ռեկուրսիվ օգտագործումը MDBX_NOTLS ռեժիմում աշխատելիս (առանց թելերի տեղային պահեստավորման օգտագործման) վերացվել է, bootid-ի ստեղծումը շտկվել է, եթե համակարգի ժամանակը փոխվել է, WSL1 և WSL2 հայտնաբերումը բարելավվել է, և հնարավորությունը Ավելացվել է DrvFS-ի միջոցով տեղադրված պլան 9-ի տվյալների բազա բացել:
- Ընդհանուր առմամբ 160 ֆայլում կատարվել է ավելի քան 57 փոփոխություն, ավելացվել է ~5000 տող, ~2500-ը ջնջվել է։
Հատկապես կցանկանայի շնորհակալություն հայտնել Էրիգոնի նախագծի թիմին (Ethereum ecosystem) ծայրահեղ օգտագործման սցենարներում փորձարկման հարցում նրանց աջակցության համար: Հատկանշական է, որ libmdbx v0.10.0-ի թողարկումից ի վեր հինգ ամսվա ընթացքում, որի տվյալների բազայի ծավալը կազմում է 1-2 TB յուրաքանչյուր Erigon տեղադրման մեջ (օգտագործվում է Ethereum հանգույցների 7%-ի վրա), ստացվել է տվյալների բազայի կոռուպցիայի միայն երեք զեկույց, բոլորը: որը տեղի է ունեցել արտաքին պատճառներով, այլ ոչ թե ծրագրային սխալներով. երկու դեպքում պատճառը եղել է RAM-ի խափանումները, երրորդում՝ BTRFS-ի միջոցով պահեստավորման ենթահամակարգի հատուկ կոնֆիգուրացիայի տվյալների վերակայման սխալ:
Source: opennet.ru