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

Biblioteke libmdbx 0.10.4 (MDBX) su puštene u prodaju s implementacijom kompaktne ugrađene baze podataka ključ/vrijednost visokih performansi i pridružene biblioteke libfpta 0.3.9 (FPTA), koja implementira tabelarni prikaz podataka sa sekundarnim i kompozitnim indeksima na vrhu MDBX-a. Obje biblioteke se distribuiraju pod OSI odobrenim licencama. Podržani su svi aktuelni operativni sistemi i arhitekture, kao i ruski Elbrus 2000.

Istorijski gledano, libmdbx je duboka prerada LMDB DBMS-a i superiornija je u odnosu na svog pretka po pouzdanosti, skupu karakteristika i performansama. U poređenju sa LMDB, libmdbx stavlja veliki naglasak na kvalitet koda, stabilnost API-ja, testiranje i automatizovane provere. 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 neblokirajuće čitanje s linearnim skaliranjem kroz CPU jezgre. Podržana je automatska kompaktifikacija, automatsko upravljanje veličinom baze podataka i procjena opsega upita. Od 2016. godine projekte financira Positive Technologies i od 2017. godine se koriste u svojim proizvodima.

libmdbx nudi C++ API, kao i jezičke veze koje podržavaju entuzijasti za Rust, Haskell, Python, NodeJS, Ruby, Go i Nim. Za libfpta, samo opis API-ja je javno dostupan u obliku C/C++ datoteke zaglavlja.

Glavne inovacije, poboljšanja i ispravke dodane od prethodne vijesti 9. maja:

  • Omogućava reproducibilne gradnje.
  • Ispravljena greška zbog koje je, u vrlo rijetkim okolnostima, moglo doći do petlje/zamrzavanja tokom urezivanja transakcije. Problem su identifikovali stručnjaci Positive Tecnologies tokom internog testiranja sopstvenih proizvoda.
  • Testovi su poboljšani, a scenariji testiranja su prošireni kako bi se provjerila sva dostupna ne-izomorfna stanja stabla stranica i GC sadržaja unutar baze podataka.
  • U C++ API-ju je popravljen dodatni "noexcept", dodana su dodatna preopterećenja za metodu "cursor::erase()", implementacija bafera je pošteđena upotrebe "std::string" kako bi se osiguralo poravnanje (relevantno za CLANG libstdc++).
  • Uklonjena je regresija u algoritmu prelivanja prljavih stranica (selektivno izbacivanje promijenjenih stranica baze podataka) koja se manifestirala rijetkom neočekivanom greškom MDBX_PROBLEM prilikom promjene podataka u velikim transakcijama.
  • Proveden je fazni test uz dodatak brojnih provjera kako bi se osigurala stabilnost u slučaju namjernog oštećenja baze podataka.
  • Popravljena manja upozorenja UndefinedBehaviorSanitizer i problemi Coverity Scan.
  • Ispravljena je provjera zastarjele i više ne korištene interne zastavice “P_DIRTY” na ugniježđenim stranicama unutar slika baze podataka kreiranih od strane starijih verzija biblioteke.
  • U CMake skriptama je poboljšana pretraga komponenti kompajlera potrebnih za LTO (optimizacija vremena veze).
  • Maksimalan broj istovremenih čitača je povećan na 32767.
  • Poboljšane performanse kada koristite Valgrind i AddressSanitizer.
  • Na Windows-u je eliminisana rekurzivna upotreba SRW-lock-a pri radu u MDBX_NOTLS modu (bez korištenja lokalne memorije niti), popravljeno je pokretanje pokretanja sistema ako se promijenilo sistemsko vrijeme, poboljšana je detekcija WSL1 i WSL2 i mogućnost Dodano je otvaranje baze podataka na Plan 9 montiranoj preko DrvFS-a.
  • Ukupno je napravljeno više od 160 izmjena u 57 datoteka, ~5000 linija je dodano, ~2500 je obrisano.

Posebno bih želio da se zahvalim Erigon projektnom timu (Ethereum ekosistem) na njihovoj pomoći u testiranju u scenarijima ekstremne upotrebe. Značajno je da su u pet mjeseci od objavljivanja libmdbx v0.10.0, sa zapreminom baze podataka od 1-2 TB u svakoj Erigon instalaciji (koristi se na 7% Ethereum čvorova), primljena samo tri izvještaja o korupciji baze podataka, sve od koji je nastao zbog eksternih razloga, a ne softverskih grešaka: u dva slučaja uzrok su bili kvarovi RAM-a, u trećem greška u resetovanju podataka u specifičnoj konfiguraciji podsistema za skladištenje koristeći BTRFS.

izvor: opennet.ru

Dodajte komentar