Välja anti libmdbx 0.10.4 (MDBX) raamatukogud, mis pakuvad kõrge jõudlusega kompaktset sisseehitatud võtme-väärtuse andmebaasi, samuti seotud raamatukogu libfpta 0.3.9 (FPTA), mis rakendab MDBX-i peal andmete tabelit koos sekundaarsete ja koostatud indeksitega. Mõlemad raamatukogud levitatakse OSI heakskiidetud litsentside alusel. Toetatakse kõiki kaasaegseid operatsioonisüsteeme ja arhitektuure, sealhulgas Venemaa Elbrus 2000.
Ajalooliselt on libmdbx sügava töötlemise tulemus andmebaasihaldussüsteemist LMDB ja ületab oma eelkäijat usaldusväärsuse, funktsionaalsuse ja jõudluse osas. Libmdbxis on võrreldes LMDB-ga suurt rõhku pandud koodi kvaliteedile, API stabiilsusele, testimisele ja automaatsetele kontrollidele. Pakkuda on andmebaasi struktuuri terviklikkuse kontrollimise utiliit, millel on mõned taastamisvõimalused.
Libmdbx pakub ACID-i, ranget muudatuste serialiseerimist ja mittesükklaatavat lugemist, mis skaleerub lineaarsetes CPU tuumade järgi. Toetatakse automaatset kompakteerimist, automaatset andmebaasi suuruse haldamist ja sorteeringu ulatuse (range query estimation) hindamist. Alates 2016. aastast rahastab projekte Positive Technologies ja alates 2017. aastast on seda kasutatud nende toodetes.
Libmdbx pakub C++ API-d, samuti entusiastide toetatud sidemeid keeltega Rust, Haskell, Python, NodeJS, Ruby, Go, Nim. Libfpta jaoks on avalikult kergesti saadaval ainult API kirjeldus C/C++ päisefailina.
Olulised uuendused, täiustused ja parandused, mis on lisatud pärast eelmist teadet 9. maist:
- Tagatud on võimalikud reprodutseeritavad koosted.
- Parandati viga, mille tõttu väga harvadel juhtudel võis tehingu fikseerimise käigus esineda tsükli tekkimine/häire. Probleemi avastasid Positive Technologies'i spetsialistid oma toodete sisetestsimisel.
- Parandati testid ja laiendati teste stsenaariume, et kontrollida kõiki kergesti saavutatavaid isomorfseid olekute puude lehtede ja GC sisu sees andmebaasis.
- C++ API-s on parandatud üleliigne „noexcept“, lisatud täiendavad ülekloaded meetodile „cursor::erase()“ ning puhverrakenduste teostamine on vabastatud „std::stringi“ kasutamisest, et tagada joondamine (kehtib CLANG libstdc++ puhul).
- Eemaldatud regressioon määrimistaktika algoritmis (valikuline asendamine muudetud andmete lehtedest), mis avaldus harva esineva ootamatu veana MDBX_PROBLEM suurte tehingute andmete muutmisel.
- Viidud läbi faasi kontroll, lisades rea kontrolle, et tagada stabiilsus andmebaasi tahtliku rikkumise korral.
- Eemaldatud väiksed hoiatused UndefinedBehaviorSanitizer ja Coverity Scan probleemid.
- Parandatud vananenud ja enam mitte kasutusel oleva sisemise lipu „P_DIRTY“ kontrolli alumiste lehtede osas andmebaasi piltides, mis on loodud vanade versioonide abil.
- CMake skriptides on täiustatud kompilatsiooni komponentide otsingut, mis on vajalik LTO (link-time optimization) jaoks.
- Maksimaalne sünkroonsete lugejate arv on suurendatud 32767-ni.
- Kiirendatud töö kasutades Valgrind ja AddressSanitizer.
- Windowsi süsteemis on kõrvaldatud SRW-locki rekurssi kasutamine MDBX_NOTLS režiimis (ilma thread local storage'ita), parandatud bootid'i genereerimist süsteemi aja muutumise korral, täiustatud WSL1 ja WSL2 tuvastamist, lisatud võimalus avada andmebaas Plan 9 all, mis on mountitud DrvFS kaudu.
- Kokku on tehtud rohkem kui 160 muudatust 57 failis, lisatud ~5000 rida, eemaldatud ~2500.
Erilise tänu tasub edastada Erigon projekti meeskonnale (Ethereum ökosüsteem) äärmuslike kasutusstsenaariumide testimise abi eest. Näitlik on see, et viie kuu jooksul pärast libmdbx v0.10.0 väljalaskmist, kus iga Erigon'i installatsiooni andmebaasi maht on 1-2 Tb (kasutatakse 7% Ethereum sõlmedest), on saadud ainult kolm andmebaasi kahjustuse teadet, kõik juhtusid väliste põhjuste tõttu, mitte tarkvara viga tõttu: kahes juhul olid põhjuseks RAM-i tõrked, kolmandas andmete nullimise viga spetsiifilises salvestussüsteemi konfiguratsioonis, mis kasutab BTRFS.
Allikas: opennet.ru
