Biblioteke libmdbx 0.10.4 (MDBX) izdane su s implementacijom kompaktne ugrađene baze podataka ključ-vrijednosti visokih performansi i pridružene biblioteke libfpta 0.3.9 (FPTA), koja implementira tablični prikaz podataka sa sekundarnim i kompozitnim indeksima na vrhu MDBX. Obje biblioteke se distribuiraju pod licencama koje je odobrio OSI. Podržani su svi aktualni operativni sustavi i arhitekture, kao i ruski Elbrus 2000.
Povijesno gledano, libmdbx je duboka prerada LMDB DBMS-a i superiorniji je od svog pretka u pouzdanosti, skupu značajki i performansama. U usporedbi s LMDB-om, libmdbx stavlja veliki naglasak na kvalitetu koda, stabilnost API-ja, testiranje i automatizirane provjere. Isporučuje se uslužni program za provjeru integriteta strukture baze podataka s nekim mogućnostima oporavka.
Tehnološki gledano, libmdbx nudi ACID, snažnu serijalizaciju promjena i čitanje bez blokiranja s linearnim skaliranjem preko CPU jezgri. Podržani su automatsko sažimanje, automatsko upravljanje veličinom baze podataka i procjena upita raspona. Od 2016. godine projekte financira Positive Technologies, a od 2017. koriste se u svojim proizvodima.
libmdbx nudi C++ API, kao i jezična povezivanja podržana od strane entuzijasta za Rust, Haskell, Python, NodeJS, Ruby, Go i Nim. Za libfpta, samo je API opis javno dostupan u obliku C/C++ datoteke zaglavlja.
Glavne inovacije, poboljšanja i ispravci dodani od prethodne vijesti 9. svibnja:
- Omogućuje reproducibilne građevine.
- Ispravljena je pogreška zbog koje je, u vrlo rijetkim okolnostima, moglo doći do petlje/zamrzavanja tijekom izvršenja transakcije. Problem su identificirali stručnjaci Positive Tecnologies tijekom internog testiranja vlastitih proizvoda.
- Testovi su poboljšani, a testni scenariji prošireni za provjeru svih dostupnih neizomorfnih stanja stabla stranice i GC sadržaja unutar baze podataka.
- U C++ API-ju popravljen je dodatni "noexcept", dodana su dodatna preopterećenja za metodu "cursor::erase()", implementacija međuspremnika pošteđena je upotrebe "std::string" kako bi se osiguralo poravnanje (relevantno za CLANG libstdc++).
- Eliminirana je regresija u algoritmu dirty page spilling (selektivno izbacivanje promijenjenih stranica baze podataka) koja se manifestirala rijetkom neočekivanom pogreškom MDBX_PROBLEM prilikom mijenjanja podataka u velikim transakcijama.
- Proveden je fazni test s dodatkom niza provjera kako bi se osigurala stabilnost u slučaju namjernog oštećenja baze podataka.
- Ispravljena manja upozorenja UndefinedBehaviorSanitizer i problemi s Coverity Scanom.
- Ispravljena je provjera zastarjele i više nekorištene interne oznake "P_DIRTY" u ugniježđenim stranicama unutar slika baze podataka koje su stvorile starije verzije biblioteke.
- U CMake skriptama poboljšana je pretraga komponenti prevoditelja potrebnih za LTO (optimizacija vremena povezivanja).
- Maksimalan broj istovremenih čitača povećan je na 32767.
- Poboljšana izvedba pri korištenju Valgrinda i AddressSanitizera.
- U sustavu Windows, eliminirana je rekurzivna upotreba SRW-lock-a pri radu u MDBX_NOTLS modu (bez korištenja lokalne pohrane niti), generiranje bootid-a je popravljeno ako se sistemsko vrijeme promijenilo, WSL1 i WSL2 otkrivanje je poboljšano, a mogućnost dodano je otvaranje baze podataka na Planu 9 montiranom putem DrvFS-a.
- Ukupno je napravljeno više od 160 izmjena u 57 datoteka, dodano je ~5000 redaka, ~2500 je izbrisano.
Posebno bih želio zahvaliti Erigon projektnom timu (Ethereum ekosustav) na njihovoj pomoći u testiranju u scenarijima ekstremne upotrebe. Značajno je da su u pet mjeseci od izdanja libmdbx v0.10.0, s volumenom baze podataka od 1-2 TB u svakoj Erigon instalaciji (korištenoj na 7% Ethereum čvorova), primljena samo tri izvješća o oštećenju baze podataka, sve koji se dogodio zbog vanjskih razloga, a ne softverskih pogrešaka: u dva slučaja uzrok su kvarovi RAM-a, u trećem pogreška pri resetiranju podataka u određenoj konfiguraciji podsustava za pohranu pomoću BTRFS-a.
Izvor: opennet.ru