Objavljen je izdanak biblioteke libmdbx 0.13.6 (MDBX) s implementacijom visokoefikasne kompaktne ugrađene baze podataka klase ključ-vrijednost. Kod libmdbx distribuiran je pod Apache 2.0 licencom. Podržani su svi aktualni operacijski sustavi i arhitekture, uključujući ruski Elbrus 2000. Za libmdbx je dostupno razvijeno API za C++, kao i podržane vezice za jezike Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno i Scala. Među projektima koji koriste libmdbx možemo istaknuti Isar, Erigon i Reth, kao i razvojne projekte tvrtki StarkWare i Positive Technologies.
Povijesno, libmdbx je duboka prerada DBMS-a LMDB i nadmašuje svog predka po pouzdanosti, setu mogućnosti i performansama. U usporedbi s LMDB-om, libmdbx posvećuje veliku pažnju kvaliteti koda, stabilnom radu API-a, testiranju i automatskim provjerama. Uključena je i alat za provjeru cjelovitosti strukture baze podataka s određenim mogućnostima oporavka. Tehnološki, libmdbx nudi ACID, strogu serijalizaciju promjena i neblokirajuće čitanje s linearnim skaliranjem prema jezgrama CPU-a. Podržano je automatsko komprimiranje, automatsko upravljanje veličinom baze podataka i procjena volumena upita po rasponu (range query estimation).
Glavne promjene:
- Promjena ponašanja: Kada nije moguće odvojiti pokazivač od njegove trenutne transakcije, funkcija mdbx_cursor_bind() sada vraća MDBX_EINVAL umjesto MDBX_BAD_TXN.
- Kako bi se izbjegli potencijalni problemi, isključena je upotreba copy_file_range() na jezgrama Linux 5.3 — 5.18.
- Sada se ispaljuje std::invalid_argument s jasnom porukom MDBX_EINVAL.
- Uklonjen je regres prilikom korištenja pokazivača za DBI=0 (aka GC/FreeDB) u čitajućim transakcijama.
- Uklonjen je regres u obliku greške EAGAIN prilikom kopiranja baze podataka na NFS i CIFS/SMB.
- Prilikom dorade/razvoja API-a u funkciji kopiranja dodatno je uključeno preuzimanje datotečne blokade putem fcntl() i flock(). Međutim, ovisno o verziji lokalnog jezgra, verziji udaljenog poslužitelja NFS-a i opcijama montiranja, to je moglo dovesti do povratka POSIX greške EAGAIN (11 na većini platformi, uključujući Linux).
- Ispravljena greška merge/rebase unutar mdbx_txn_release_all_cursors_ex(), što je moglo dovesti do kasnijih neočekivanih grešaka MDBX_EBADSIGN i curenja memorije.
- Ispravljena je assert-provjera u putanji završetka ugniježdenih transakcija.
- Uklonjena mogućnost povratka neočekivane greške MDBX_BUSY iz mdbx_txn_lock(dont_wait=false).
- Za kompatibilnost s GCC 15.x u C23 modu promijenjen je redoslijed navođenja atributa funkcija.
Izvor: opennet.ru
