Biblioteka libmdbx je značajno prerađeni potomak LMDB - izuzetno visokoučinkovite, kompaktne ugrađene baze podataka klase ključ-vrijednost.
Trenutna verzija v0.5 je tehnička verzija koja označava završetak bilo kakvih dorada i prelazak na fazu javnog finalnog testiranja i stabilizacije, s naknadnim oblikovanjem prvog punog izdanja biblioteke.
LMDB je dovoljno poznata transakciona ugrađena DBMS klase "ključ-vrijednost" koja se temelji na B+ stablu bez prednostne evidencije, koja omogućava velikom broju višestrukih procesa da konkurentno i izuzetno efikasno rade s lokalno dijeljenom (ne mrežnom) bazom podataka. S druge strane, MDBX je brži i pouzdaniji od LMDB, dok libmdbx zadržava sve ključne mogućnosti svog predaka, kao što su ACID i neblokirajuće čitanje s linearnim skaliranjem kroz CPU jezgre, a također dodaje nekoliko novih.
Opis razlika i poboljšanja libmdbx u odnosu na LMDB zaslužuje posebnu temu (planira se objaviti na "Habre" i "Medium"). Ovdje je prikladno spomenuti najvažnije i najočitije:
- Osnovno veća pažnja posvećuje se kvaliteti koda, testiranju i automatskim provjerama.
- Značajno više kontrole tijekom rada, od provjere parametara, do interne revizije struktura baze podataka.
- Automatska kompakcija i automatsko upravljanje veličinom DB.
- Jedinstveni format DB za 32-bitne i 64-bitne izrade.
- Procjena volumena uzoraka prema rasponima (range query estimation).
- Podrška za ključeve dvostruko veće veličine i veličinu stranice DB koju korisnik bira.
Objavljen kandidatski izdanak libmdbx rezultat je odluke (vidi dalje) o odvojenju projekata MDBX i MithrilDB u kolovozu 2019. U libmdbx-u je odlučeno ukloniti (racionalni) maksimum tehničkog duga i stabilizirati biblioteku. U stvari, u tom smjeru učinjeno je 2-3 puta više nego što je prvotno procijenjeno i planirano:
- Implementirana je podrška za Mac OS i platforme "drugog nivoa": FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. Podrška za AIX i HP-UX može biti dodana po potrebi.
- Provedena je sanacija koda pomoću Undefined Behavior Sanitizer i Address Sanitizer, uklonjena su sva upozorenja pri gradnji s -Wpedantic, sva upozorenja Coverity Static Analyzer itd.
- Ažuriranje opisivanja API.
- Amalgamacija izvorne koda radi lakšeg ugrađivanja.
- Podrška za CMake.
- Podrška za ugniježdene transakcije.
- Korištenje bootid-a za utvrđivanje ponovnog pokretanja OS-a (prljavo zaustavljanje Baze podataka).
- Sveobuhvatno brojanje ažuriranih/old stranica i proširene informacije o transakcijama.
- Opcija MDBX_ACCEDE za povezivanje s već otvorenom Bazom podataka u kompatibilnom režimu.
- Korištenje OFD zaključavanja po njihovoj dostupnosti.
- Vruće sigurnosno kopiranje u pipe.
- Specijalizirani optimizirani algoritam unutarnjeg sortiranja (do 2-3 puta brži od qsort() i do 30% brži od std::sort()).
- Povećana maksimalna duljina ključa.
- Automatsko upravljanje read ahead (strategijom keširanja datoteke Baze podataka u memoriji).
- Agresivnija i brža auto-kompaktizacija.
- Optimalnija strategija spajanja stranica B+ stabla.
- Kontrola ne-lokalnih datotečnih sustava (NFS, Samba itd.) za sprečavanje oštećenja baze podataka pri pogrešnoj upotrebi.
- Proširen skup testova.
Razvoj «sljedeće» verzije libmdbx bit će nastavljen u okviru posebnog projekta MithrilDB, dok je pravac razvoja «trenutne» verzije MDBX usmjeren na zamrzavanje skupa mogućnosti i stabilizaciju. Ova odluka donesena je iz tri razloga:
- Potpuna nespojivost: za implementaciju svih planiranih mogućnosti u MithrilDB potrebni su drugi (nespojivi) formati datoteka Baze podataka i drugo (nespojivo) API.
- Novi izvorni kod: za izvorni kod MithrilDB osigurana je licencijska neovisnost od LMDB-a, a sam projekt planira se objaviti pod drugom licencom (odobrenom OSI licencom Apache 2.0, a ne OpenLDAP Foundation).
- Podjela omogućava izbjegavanje potencijalne zbrke, donosi veću jasnoću i osigurava neovisnost putanja razvoja projekata.
MithrilDB, kao i MDBX, također se temelji na B+ stablu i također će se odlikovati izuzetno visokom učinkovitošću, pri čemu će otkloniti niz principijelnih nedostataka MDBX-a i LMDB-a. Konkretno, bit će uklonjen problem «dugih čitanja», koji se manifestira kao «naduvavanje» Baze podataka zbog toga što obrada smeća zadržava duga čitajuća transakcije. Među novim mogućnostima MithrilDB-a valja istaknuti:
- podrška za pohranu baze podataka na različitim medijima: HDD, SSD i nevoljivoj memoriji.
- optimalne strategije za "vrijedne" i "malo vrijedne", za "vruće", "tople" i "hladne" podatke.
- korištenje Merkle stabla za nadzor integriteta baze podataka.
- opcionalna upotreba WAL i značajno viša produktivnost u scenarijima s intenzivnim zapisivanjem i jamstvima integriteta podataka.
- lenjivno dostizanje pohrane podataka na diskovima.
Izvor: linux.org.ru
