Didelio našumo įterptųjų DBVS libmdbx 0.10.4 ir libfpta 0.3.9 išleidimas

Libmdbx 0.10.4 (MDBX) bibliotekos buvo išleistos įdiegus didelio našumo kompaktišką įterptąją raktų reikšmių duomenų bazę ir susijusią libfpta 0.3.9 (FPTA) biblioteką, kuri įgyvendina duomenų lentelę su antriniais ir sudėtiniais indeksais. MDBX viršuje. Abi bibliotekos platinamos pagal OSI patvirtintas licencijas. Palaikomos visos dabartinės operacinės sistemos ir architektūros, taip pat rusiška Elbrus 2000.

Istoriškai libmdbx yra gilus LMDB DBVS perdirbimas ir pranašesnis už savo pirmtaką savo patikimumu, funkcijų rinkiniu ir našumu. Palyginti su LMDB, libmdbx daug dėmesio skiria kodo kokybei, API stabilumui, testavimui ir automatiniams patikrinimams. Pateikiama duomenų bazės struktūros vientisumo tikrinimo programa su kai kuriomis atkūrimo galimybėmis.

Technologiškai libmdbx siūlo ACID, stiprią pakeitimų serializaciją ir neblokuojančius skaitymus su tiesiniu mastelio keitimu procesoriaus branduoliuose. Palaikomas automatinis suglaudinimas, automatinis duomenų bazės dydžio valdymas ir diapazono užklausos įvertinimas. Nuo 2016 m. projektus finansuoja „Positive Technologies“, o nuo 2017 m.

libmdbx siūlo C++ API, taip pat entuziastų palaikomus Rust, Haskell, Python, NodeJS, Ruby, Go ir Nim kalbų įrišimus. Libfpta atveju viešai pasiekiamas tik API aprašas C/C++ antraštės failo pavidalu.

Pagrindinės naujovės, patobulinimai ir pataisymai, pridėti nuo ankstesnių naujienų gegužės 9 d.:

  • Įgalina atkuriamus kūrinius.
  • Ištaisyta klaida, dėl kurios labai retomis aplinkybėmis operacijos įvykdymo metu gali įvykti kilpa / užstrigimas. Problemą nustatė „Positive Tecnologies“ specialistai, atlikdami vidinius savo gaminių testavimus.
  • Testai buvo patobulinti, o bandymų scenarijai buvo išplėsti, kad būtų galima patikrinti visas pasiekiamas neišomorfines puslapio medžio ir GC turinio būsenas duomenų bazėje.
  • C++ API buvo ištaisytas papildomas „noexcept“, pridėta papildomų perkrovų „cursor::erase()“ metodui, buferių diegimui nenaudojama „std::string“, kad būtų užtikrintas lygiavimas. (tinka CLANG libstdc++).
  • Pašalinta nešvarių puslapių išsiliejimo algoritmo regresija (atrankinis pakeistų duomenų bazės puslapių išstūmimas), kuri pasireiškė reta netikėta klaida MDBX_PROBLEM keičiant duomenis didelėse operacijose.
  • Buvo atliktas etapų testas, pridėjus keletą patikrų, siekiant užtikrinti stabilumą tyčinio duomenų bazės sugadinimo atveju.
  • Ištaisyti nedideli įspėjimai UndefinedBehaviorSanitizer ir Coverity Scan problemos.
  • Ištaisyta pasenusios ir nebenaudojamos vidinės vėliavėlės „P_DIRTY“ tikrinimas įdėtuose puslapiuose duomenų bazės vaizduose, sukurtuose senesnėse bibliotekos versijose.
  • CMake scenarijuose patobulinta LTO (link-time optimization) reikalingų kompiliatoriaus komponentų paieška.
  • Maksimalus vienu metu skaitomų skaitytojų skaičius padidintas iki 32767.
  • Patobulintas našumas naudojant Valgrind ir AddressSanitizer.
  • Sistemoje Windows pašalintas rekursinis SRW užrakto naudojimas dirbant MDBX_NOTLS režimu (nenaudojant gijų vietinės saugyklos), sutvarkytas įkrovos generavimas, jei pasikeitė sistemos laikas, patobulintas WSL1 ir WSL2 aptikimas ir galimybė buvo pridėta atidaryti 9 plano duomenų bazę, prijungtą per DrvFS.
  • Iš viso 160 failuose atlikta daugiau nei 57 pakeitimų, pridėta ~5000 eilučių, ištrinta ~2500.

Ypač norėčiau padėkoti Erigon projekto komandai (Ethereum ekosistemai) už pagalbą atliekant bandymus ekstremaliais naudojimo atvejais. Svarbu tai, kad per penkis mėnesius nuo libmdbx v0.10.0 išleidimo, kai duomenų bazės apimtis yra 1–2 TB kiekviename Erigon diegime (naudojama 7 % Ethereum mazgų), buvo gauti tik trys pranešimai apie duomenų bazės sugadinimą, visi iš kurių įvyko dėl išorinių priežasčių, o ne dėl programinės įrangos klaidų: dviem atvejais priežastis buvo RAM gedimai, trečiuoju – klaida iš naujo nustatant duomenis konkrečioje saugojimo posistemio konfigūracijoje naudojant BTRFS.

Šaltinis: opennet.ru

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