Lëshimi i DBMS i integruar me performancë të lartë libmdbx 0.10.4 dhe libfpta 0.3.9

Biblioteka libmdbx 0.10.4 (MDBX) u lëshua me implementimin e një baze të dhënash kompakte me vlera kyçe të ngulitura me performancë të lartë dhe bibliotekën e lidhur libfpta 0.3.9 (FPTA), e cila zbaton një paraqitje tabelare të të dhënave me indekse dytësore dhe të përbëra në krye të MDBX. Të dy bibliotekat shpërndahen sipas licencave të miratuara nga OSI. Mbështeten të gjitha sistemet operative dhe arkitekturat aktuale, si dhe Elbrus 2000 ruse.

Historikisht, libmdbx është një ripërpunim i thellë i LMDB DBMS dhe është superior ndaj paraardhësit të tij në besueshmërinë, grupin e veçorive dhe performancën. Krahasuar me LMDB, libmdbx i kushton shumë theks cilësisë së kodit, stabilitetit të API, testimit dhe kontrolleve të automatizuara. Ofrohet një mjet për kontrollimin e integritetit të strukturës së bazës së të dhënave me disa aftësi rikuperimi.

Për sa i përket teknologjisë, libmdbx ofron ACID, serializimin e fortë të ndryshimeve dhe lexime pa bllokim me shkallëzim linear nëpër bërthamat e CPU. Mbështetet kompaktimi automatik, menaxhimi automatik i madhësisë së bazës së të dhënave dhe vlerësimi i pyetjeve të gamës. Që nga viti 2016, projektet janë financuar nga Positive Technologies dhe që nga viti 2017 janë përdorur në produktet e saj.

libmdbx ofron një API C++, si dhe lidhje gjuhësore të mbështetura nga entuziastët për Rust, Haskell, Python, NodeJS, Ruby, Go dhe Nim. Për libfpta, vetëm përshkrimi i API-së është i disponueshëm publikisht në formën e një skedari të kokës C/C++.

Risitë, përmirësimet dhe korrigjimet kryesore të shtuara që nga lajmet e mëparshme më 9 maj:

  • Mundëson ndërtime të riprodhueshme.
  • Rregulloi një gabim për shkak të të cilit, në rrethana shumë të rralla, mund të ndodhte një lak/ngrirje gjatë kryerjes së një transaksioni. Problemi u identifikua nga specialistët e Positive Tecnologies gjatë testimit të brendshëm të produkteve të tyre.
  • Testet janë përmirësuar dhe skenarët e testimit janë zgjeruar për të kontrolluar të gjitha gjendjet jo-izomorfike të arritshme të pemës së faqes dhe përmbajtjes GC brenda bazës së të dhënave.
  • Në API-në C++, është fiksuar një "noexcept" shtesë, janë shtuar mbingarkesa shtesë për metodën "cursor::erase()", zbatimi i buffer-ave është kursyer nga përdorimi i "std::string" për të siguruar shtrirjen. (e rëndësishme për CLANG libstdc++).
  • Është eliminuar një regresion në algoritmin e derdhjes së faqeve të pista (heqja selektive e faqeve të ndryshuara të bazës së të dhënave) që u manifestua nga një gabim i rrallë i papritur MDBX_PROBLEM kur ndryshoni të dhënat në transaksione të mëdha.
  • Një test fazash u krye me shtimin e një numri kontrollesh për të siguruar stabilitet në rast dëmtimi të qëllimshëm të bazës së të dhënave.
  • Paralajmërimet e vogla ndreqën çështjet e Undefined BehaviorSanitizer dhe Coverity Scan.
  • Është rregulluar kontrollimi i flamurit të brendshëm të vjetëruar dhe jo më të përdorur "P_DIRTY" në faqet e ndërlidhura brenda imazheve të bazës së të dhënave të krijuara nga versionet më të vjetra të bibliotekës.
  • Në skriptet CMake, kërkimi për komponentët e përpiluesit të kërkuar për LTO (optimizimi në kohë të lidhjes) është përmirësuar.
  • Numri maksimal i lexuesve të njëkohshëm është rritur në 32767.
  • Performanca e përmirësuar kur përdorni Valgrind dhe AddressSanitizer.
  • Në Windows, përdorimi rekurziv i SRW-lock kur punoni në modalitetin MDBX_NOTLS (pa përdorur hapësirën e ruajtjes lokale të thread) është eliminuar, gjenerimi i bootid është rregulluar nëse koha e sistemit ka ndryshuar, zbulimi WSL1 dhe WSL2 është përmirësuar dhe aftësia për të hapja e një baze të dhënash në Planin 9 të montuar nëpërmjet DrvFS është shtuar.
  • Në total, u bënë më shumë se 160 ndryshime në 57 skedarë, u shtuan ~ 5000 rreshta, ~ 2500 u fshinë.

Unë do të doja të falënderoja veçanërisht ekipin e projektit Erigon (ekosistem Ethereum) për ndihmën e tyre në testimin në skenarë të përdorimit ekstrem. Është domethënëse që në pesë muaj që nga lëshimi i libmdbx v0.10.0, me një vëllim të bazës së të dhënave 1-2 TB në çdo instalim Erigon (përdorur në 7% të nyjeve Ethereum), u morën vetëm tre raporte për prishjen e bazës së të dhënave, të gjitha që ndodhi për arsye të jashtme dhe jo për gabime softuerike: në dy raste shkaku ishte dështimi i RAM-it, në të tretën një gabim në rivendosjen e të dhënave në një konfigurim specifik të nënsistemit të ruajtjes duke përdorur BTRFS.

Burimi: opennet.ru

Shto një koment