Izdanje ugrađenog DBMS-a visokih performansi libmdbx 0.10.4 i libfpta 0.3.9

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

Dodajte komentar