knjižnica libmdbx je značajno redizajnirani potomak LMDB-a - izuzetno visoke performanse, kompaktna ugrađena baza podataka ključ-vrijednost.
Trenutna verzija v0.5 je tehničko izdanje, označava završetak svih poboljšanja i prijelaz u fazu javnog konačnog testiranja i stabilizacije, s naknadnim formiranjem prvog punog izdanja biblioteke.
LMDB je prilično dobro poznat transakcijski ugrađeni DBMS ključ-vrijednost temeljen na drvo B+ bez proaktivno bilježenje, koji omogućuje roju višenitnih procesa konkurentan i iznimno učinkovit rad s lokalno dijeljenom (ne mrežnom) bazom podataka. Zauzvrat, MDBX je brži i pouzdaniji od LMDB-a, dok libmdbx zadržava sve ključne značajke svog pretka, kao što je ACID i neblokirajuća čitanja s linearnim skaliranjem preko CPU jezgri, a također dodaje nekoliko novih.
Opis razlika i poboljšanja libmdbx-a u odnosu na LMDB zaslužuje poseban članak (planiran za objavu na Habré i Medium). Ovdje je prikladno spomenuti najvažnije i najzapaženije:
- U osnovi, više pažnje se posvećuje kvaliteti koda, testiranju i automatskim provjerama.
- Znatno više kontrole tijekom rada, od provjere parametara do interne revizije struktura baze podataka.
- Auto-kompaktifikacija 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 može odabrati korisnik.
Kandidat za izdanje libmdbx rezultat je odluke (vidi dolje) o odvajanju projekata MDBX i MithrilDB u kolovozu 2019. U isto vrijeme, libmdbx je odlučio eliminirati (racionalni) maksimalni tehnički dug i stabilizirati knjižnicu. Naime, u zadanom smjeru učinjeno je 2-3 puta više nego što je u početku procijenjeno i planirano:
- Implementirana je podrška za Mac OS i platforme drugog reda: FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. Po potrebi se može dodati podrška za AIX i HP-UX.
- Očistio je kod pomoću sredstva za čišćenje nedefiniranog ponašanja i sredstva za čišćenje adresa, eliminirao sva upozorenja prilikom izgradnje s -Wpedantic, sva upozorenja Coverity Static Analyzera itd.
- Ažuriraj API opisi.
- Spajanje izvornog koda radi lakšeg ugrađivanja.
- CMake podrška.
- Podrška za ugniježđene transakcije.
- Korištenje bootida za određivanje je li se OS ponovno pokrenuo (zaustavljanje prljave baze podataka).
- Brojenje ažuriranih/starih stranica od početka do kraja i proširene informacije o transakcijama.
- Opcija MDBX_ACCEDE za povezivanje s već otvorenom bazom podataka u kompatibilnom načinu rada.
- Koristiti OFD blokada kada je dostupno.
- Vruća sigurnosna kopija u cijevi.
- Specijalizirani optimizirani interni algoritam sortiranja (do 2-3 puta brži od qsort() i do 30% brži od std::sort()).
- Maksimalna duljina ključa je povećana.
- Automatska kontrola čitanja unaprijed (strategija predmemoriranja datoteke baze podataka u memoriji).
- Agresivnija i brža autokompaktifikacija.
- Optimalnija strategija za spajanje B+ stranica stabla.
- Kontrola ne-lokalnih datotečnih sustava (NFS, Samba, itd.) kako bi se spriječilo oštećenje baze podataka ako se neispravno koristi.
- Skup testova je proširen.
Razvoj "sljedeće" verzije libmdbx-a nastavit će se kao zaseban projekt MithrilDB, dok je razvojni vektor "trenutne" verzije MDBX-a usmjeren na zamrzavanje skupa značajki i njegovu stabilizaciju. Ova odluka je donesena iz tri razloga:
- Potpuno nekompatibilno: MithrilDB zahtijeva drugačiji (nekompatibilan) format datoteke baze podataka i drugačiji (nekompatibilan) API za implementaciju svih planiranih značajki.
- Novi izvorni kod: MithrilDB izvorni kod je licenciran neovisno o LMDB-u, a sam projekt planira se objaviti pod drugom licencom (odobrena od strane ILI AKO licenca Apache 2.0I ne Zaklada OpenLDAP).
- Odvajanjem se izbjegava potencijalna zabuna, pruža više sigurnosti i osigurava da projekti imaju neovisni put naprijed.
MithrilDB, kao i MDBX, također se temelji na drvo B+ i također će imati izuzetno visoke performanse, dok će eliminirati niz temeljnih nedostataka MDBX i LMDB. Konkretno, problem "dugih čitanja", koji se manifestira kao "bubrenje" baze podataka zbog činjenice da je obrada smeća blokirana transakcijama dugog čitanja, bit će eliminiran. Nove značajke MithrilDB uključuju:
- podrška za postavljanje baze podataka na nekoliko heterogenih medija: HDD, SSD i trajna memorija.
- optimalne strategije za "vrijedne" i "niskovrijedne", za "vruće", "tople" i "hladne" podatke.
- korištenje Merkle stabla za praćenje integriteta baze podataka.
- opcijska upotreba WAL-a i značajno bolje performanse u scenarijima intenzivnog pisanja i jamstva integriteta podataka.
- Lazy catch-up fiksacija podataka na diskovima.
Izvor: linux.org.ru