Բարձր արդյունավետությամբ ներկառուցված 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թ.-ից նախագծերը ֆինանսավորվում են 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

Добавить комментарий