Drugi kandidat za izdanje libmdbx v1.0 nakon pet godina razvoja.

biblioteka libmdbx je značajno redizajniran potomak LMDB-a - izuzetno visoke performanse, kompaktne ugrađene baze podataka ključ/vrijednost.
Trenutna verzija v0.5 je tehničko izdanje, označava završetak svih poboljšanja i prelazak na fazu javnog konačnog testiranja i stabilizacije, uz naknadno formiranje prvog potpunog izdanja biblioteke.

LMDB je prilično poznat transakcijski ugrađen ključ-vrijednost DBMS zasnovan na stablo B+ bez proaktivno evidentiranje, koji omogućava roju višenitnih procesa da radi konkurentno i izuzetno efikasno sa lokalno deljenom (ne mrežnom) bazom podataka. Zauzvrat, MDBX je brži i pouzdaniji od LMDB, dok libmdbx zadržava sve ključne karakteristike svog pretka, kao npr. ACID i neblokirajuće čitanje s linearnim skaliranjem preko CPU jezgara, a također dodaje nekoliko novih.

Opis razlika i poboljšanja libmdbx-a u odnosu na LMDB zaslužuje poseban članak (planirano da bude objavljen na Habré-u i Medium-u). Ovdje je prikladno spomenuti najvažnije i uočljivije:

  • U osnovi, više pažnje se poklanja kvalitetu koda, testiranju i automatskim provjerama.
  • Značajno veća kontrola tokom rada, od provjere parametara do interne revizije struktura baze podataka.
  • Automatsko zbijanje i automatsko upravljanje veličinom baze podataka.
  • Jedinstveni format baze podataka za 32-bitne i 64-bitne sklopove.
  • Procjena veličine uzorka po rasponima (procjena upita raspona).
  • Podrška za ključeve dvostruko veće od palačinki i veličinu stranice baze podataka koju bira korisnik.

Kandidat za izdanje libmdbx-a rezultat je odluke (vidi dolje) da se odvoje projekti MDBX i MithrilDB u avgustu 2019. U isto vrijeme, libmdbx je odlučio eliminirati (racionalni) maksimalni tehnički dug i stabilizirati biblioteku. Naime, urađeno je 2-3 puta više u zacrtanom pravcu nego što je prvobitno procijenjeno i planirano:

  • Implementirana je podrška za Mac OS i platforme drugog nivoa: FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. AIX i HP-UX podrška se može dodati po potrebi.
  • Sanitirao kod koristeći Undefined Behavior Sanitizer i Address Sanitizer, eliminisao sva upozorenja prilikom izgradnje sa -Wpedantic, sva upozorenja Coverity Static Analyzer, itd.
  • Ažuriranje API opisi.
  • Spajanje izvornog koda radi lakšeg ugrađivanja.
  • CMake podrška.
  • Podrška za ugniježđene transakcije.
  • Korištenje bootid-a za određivanje da li se OS ponovo pokrenuo (zaustavljanje prljave baze podataka).
  • Prebrojavanje ažuriranih/starih stranica i proširenih informacija o transakcijama od kraja do kraja.
  • Opcija MDBX_ACCEDE za povezivanje na već otvorenu bazu podataka u kompatibilnom načinu rada.
  • Koristite OFD blokiranje kada je dostupno.
  • Vruća rezerva u cijevi.
  • Specijalizovani optimizovani interni algoritam za sortiranje (do 2-3 puta brži od qsort() i do 30% brži od std::sort()).
  • Maksimalna dužina ključa je povećana.
  • Automatska kontrola čitanja unaprijed (strategija keširanja datoteka baze podataka u memoriji).
  • Agresivnija i brža auto-kompaktacija.
  • Optimalnija strategija za spajanje stranica B+ stabla.
  • Kontrola ne-lokalnih sistema datoteka (NFS, Samba, itd.) kako bi se spriječilo oštećenje baze podataka ako se koristi nepravilno.
  • Proširen je set testova.

Razvoj "sljedeće" verzije libmdbx-a će se nastaviti kao poseban projekat MithrilDB, dok je razvojni vektor “trenutne” verzije MDBX-a usmjeren na zamrzavanje skupa funkcija i njegovu stabilizaciju. Ova odluka je doneta iz tri razloga:

  • Potpuno nekompatibilno: MithrilDB zahtijeva drugačiji (nekompatibilan) format datoteke baze podataka i drugačiji (nekompatibilan) API za implementaciju svih planiranih funkcija.
  • Novi izvorni kod: MithrilDB izvorni kod je licenciran neovisnim od LMDB-a, a planira se objavljivanje samog projekta pod drugom licencom (odobreno od strane ILI AKO licenca Apache 2.0, a ne OpenLDAP fondacija).
  • Razdvajanjem se izbjegava potencijalna zabuna, pruža više sigurnosti i osigurava da projekti imaju nezavisan put naprijed.

MithrilDB je, kao i MDBX, također zasnovan na stablo B+ i takođe će imati izuzetno visoke performanse, dok će eliminisati brojne fundamentalne nedostatke MDBX i LMDB. Konkretno, bit će eliminisan problem “dugog čitanja”, koji se manifestira kao “nabujanje” baze podataka zbog činjenice da je obrada smeća blokirana dugim transakcijama čitanja. Nove MithrilDB karakteristike uključuju:

  • podrška za postavljanje baze podataka na nekoliko heterogenih medija: HDD, SSD i stalnu memoriju.
  • optimalne strategije za “vrijedne” i “niske vrijednosti”, za “vruće”, “tople” i “hladne” podatke.
  • korištenjem Merkleovog stabla za praćenje integriteta baze podataka.
  • opciona upotreba WAL-a i značajno veće performanse u scenarijima sa intenzivnim pisanjem i garancija integriteta podataka.
  • Lijeno fiksiranje podataka na diskovima.

izvor: linux.org.ru

Dodajte komentar