Suure jõudlusega manustatud DBMS-i libmdbx 0.10.4 ja libfpta 0.3.9 väljalase

Libmdbx 0.10.4 (MDBX) teek lasti välja koos suure jõudlusega kompaktse manustatud võtmeväärtuste andmebaasi ja sellega seotud libfpta 0.3.9 (FPTA) teegiga, mis rakendab andmete tabelikujulist esitust sekundaarsete ja liitindeksitega MDBX peal. Mõlemaid teeke levitatakse OSI heakskiidetud litsentside alusel. Toetatud on kõik praegused operatsioonisüsteemid ja arhitektuurid, samuti Vene Elbrus 2000.

Ajalooliselt on libmdbx LMDB DBMS-i põhjalik ümbertöötlemine ja on töökindluse, funktsioonide komplekti ja jõudluse poolest oma esivanemast parem. Võrreldes LMDB-ga paneb libmdbx suurt rõhku koodi kvaliteedile, API stabiilsusele, testimisele ja automatiseeritud kontrollidele. Tarnitakse utiliit andmebaasi struktuuri terviklikkuse kontrollimiseks koos mõningate taastamisvõimalustega.

Tehnoloogiliselt pakub libmdbx ACID-i, tugevat muutuste serialiseerimist ja mitteblokeerivat lugemist koos lineaarse skaleerimisega protsessori tuumade lõikes. Toetatakse automaatset tihendamist, automaatset andmebaasi suuruse haldamist ja vahemiku päringu hindamist. Alates 2016. aastast on projekte rahastanud Positive Technologies ja alates 2017. aastast on neid kasutatud oma toodetes.

libmdbx pakub C++ API-d, aga ka entusiastide toetatud keelesidemeid Rusti, Haskelli, Pythoni, NodeJS-i, Ruby, Go ja Nimi jaoks. Libfpta puhul on C/C++ päisefailina avalikult saadaval ainult API kirjeldus.

Suuremad uuendused, täiustused ja parandused, mis on lisatud pärast eelmist uudist 9. mail:

  • Võimaldab reprodutseeritavaid järge.
  • Parandatud viga, mille tõttu võib väga harvadel juhtudel tehingu sooritamise ajal tekkida silmus/külmumine. Probleemi tuvastasid Positive Tecnologies spetsialistid oma toodete sisetestimise käigus.
  • Teste on täiustatud ja testimise stsenaariume on laiendatud, et kontrollida kõiki andmebaasis olevaid lehepuu ja GC sisu mitteisomorfseid olekuid.
  • C++ API-s on parandatud lisa "noexcept", lisatud on täiendavaid ülekoormusi meetodile "cursor::erase()", puhvrite juurutamisel on joondamise tagamiseks säästetud "std::string" kasutamisest. (asjakohane CLANG libstdc++ jaoks).
  • Kõrvaldatud on määrdunud lehtede levitamisalgoritmi regressioon (muutunud andmebaasi lehtede valikuline väljutamine), mis ilmnes harvaesinevas ootamatus veas MDBX_PROBLEM suurte tehingute andmete muutmisel.
  • Viidi läbi faasikatse, millele oli lisatud mitmeid kontrolle, et tagada stabiilsus andmebaasi tahtliku kahjustamise korral.
  • Parandatud väikesed hoiatused UndefinedBehaviorSanitizer ja Coverity Scan probleemid.
  • Parandatud on aegunud ja enam mittekasutatud sisemise lipu "P_DIRTY" kontrollimine teegi vanemate versioonide loodud andmebaasi kujutiste pesastatud lehtedel.
  • CMake skriptides on täiustatud LTO (link-time optimization) jaoks vajalike kompilaatori komponentide otsimist.
  • Maksimaalne samaaegsete lugejate arv on suurendatud 32767-ni.
  • Parem jõudlus Valgrindi ja AddressSanitizeri kasutamisel.
  • Windowsis on SRW-luku rekursiivne kasutamine MDBX_NOTLS-režiimis töötamisel (ilma lõime kohalikku salvestust kasutamata) kõrvaldatud, alglaadimise genereerimine on parandatud, kui süsteemi aeg on muutunud, WSL1 ja WSL2 tuvastamine on täiustatud ning võimalus DrvFS-i kaudu ühendatud plaani 9 andmebaasi avamine on lisatud.
  • Kokku tehti 160 failis üle 57 muudatuse, lisati ~5000 rida, kustutati ~2500.

Tahaksin eriti tänada Erigoni projektimeeskonda (Ethereumi ökosüsteem) abi eest äärmuslike kasutusstsenaariumide testimisel. On märkimisväärne, et viie kuu jooksul pärast libmdbx v0.10.0 väljalaskmist, mille andmebaasi maht on 1–2 TB igas Erigoni installis (kasutatakse 7% Ethereumi sõlmedest), saadi ainult kolm teadet andmebaasi riknemise kohta, kõik mis tekkis välistel põhjustel, mitte tarkvaratõrgetel: kahel juhul olid põhjuseks RAM-i tõrked, kolmandal juhul tõrge andmete lähtestamisel salvestuse alamsüsteemi konkreetses konfiguratsioonis BTRFS-i abil.

Allikas: opennet.ru

Lisa kommentaar