Lëshimi i bibliotekës libmdbx 0.13.3 (MDBX) me implementimin e një baze të dhënash të integruar, kompakte, me performancë të lartë dhe klasë çelës-vlerë. Kodi i libmdbx shpërndahet nën licencën Apache 2.0. Mbështeten të gjitha sistemet operative aktuale dhe arkitekturat, përfshirë edhe Elbrus 2000 nga Rusia. Për libmdbx ofrohet një API i zhvilluar për C++, si dhe lidhje të mbështetura nga entuziastët për gjuhët Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.
Historikisht, libmdbx është një rishikim i thellë i DBMS LMDB dhe tejkalon paraardhësin e tij në besueshmëri, gamën e mundësive dhe performancë. Në krahasim me LMDB, në libmdbx përkushtohet një vëmendje e madhe për cilësinë e kodit, funksionimin stabil të API, testimin dhe verifikimet automatike. Ofron një utilitar për verifikimin e integritetit të strukturës së DB me disa mundësi rikorrigjimi. Teknologjikisht, libmdbx ofron ACID, serializim të rreptë të ndryshimeve dhe lexim jo-bllokues me shkallëzim linear sipas bërthamave të CPU. Mbështetet kompaktifikimi automatik, menaxhimi automatik i madhësisë së DB-së, dhe vlerësimi i sasisë së mostrave sipas grupeve (range query estimation).
Ndryshimet kryesore:
- Dega 0.13.x fitoi statusin e stabilitetit. Ka filluar zhvillimi i deges 0.14.x.
- Në API-në C është shtuar funksioni mdbx_cursor_count_ex(), i cili lejon marrjen e numrit të shumë-vlerave që korrespondon me çelësin e tanishëm, si dhe informacionin mbi pemën në brendësi që ruan këto vlera.
- Në API-në C++ është shtuar metoda mdbx::txn::make_broken() e ngjashme me mdbx_txn_break().
- Në utilitetet mdbx_copy, mdbx_drop, mdbx_dump, mdbx_load, mdbx_stat është realizuar regjistrimi i gabimeve, paralajmërrimeve dhe mesazheve të rëndësishme nga libmdbx.
- Ndryshimi i sjelljes:
- Kur aktivizohet profilimi i mbledhësit të mbetjeve (ndërtime me opsionin MDBX_ENABLE_PROFGC=ON), tani llogariten shpenzimet e kohës CPU për bashkimin e listave të faqeve, dmth për funksionin pnl_merge().
- Në utilitetin e testimit, vlera e modit të të dhënave është ribërë me emrin nga data.dups në data.multi.
- Kontrolli i gjatësisë së çelësit është përmirësuar brenda cursor_seek().
- Nëse përdoruesi nuk ka caktuar një vlerë të saktë me mdbx_env_set_option(MDBX_opt_txn_dp_limit), bëhet një përshtatje e dirty-pages-limit gjatë fillimit të çdo transaksioni të shkruar që nuk është e brendshme, duke u bazuar në kapacitetin e RAM-it të disponueshëm dhe madhësinë e DB.
- Në modalitetin MDBX_NOSTICKYTHREADS lejohet commit/abort i transaksioneve të brendshme nga çdo thread/rrjedhë.
- Kur përpiqeni të nisni transaksione të ngulitura në modalitetin MDBX_WRITEMAP, kryhet regjistrimi dhe kthehet gabimi MDBX_INCOMPATIBLE.
- Në API-në C++, në konstruktorët/inicializuesit dhe metodat që lidhen me formimin e gjeometrisë së DB-së, përdoren vetëm vlerat default si parazgjedhje.
- Brenda mdbx_env_set_geometry() janë përmirësuar heuristikët për përcaktimin e parametrave të gjeometrisë së DB-së të kërkuara nga përdoruesi si "default".
- Rregullimet:
- ĂshtĂ« eliminuar regresi i mosçlirimit tĂ« mutex-it gjatĂ« pĂ«rpjekjes pĂ«r tĂ« mbyllur pĂ«rsĂ«ri njĂ« dbi-deskriptor, duke pĂ«rfshirĂ« pĂ«rpjekjet pĂ«r tĂ« mbyllur qartĂ« deskriptorin pas fshirjes sĂ« tabelĂ«s sĂ« lidhur me tĂ«.
- ĂshtĂ« eliminuar regresi i estado-s pĂ«r kursorin e ngulitur/dupsort pas futjes sĂ« tĂ« dhĂ«nave nĂ« modalitetin MDBX_APPEND.
- Mbështetje për marrjen e boot_id gjatë funksionimit brenda kontejnerit LXC.
- ĂshtĂ« eliminuar gabimi i trajtimit tĂ« gabuar tĂ« pĂ«rpjekjes pĂ«r tĂ« nisur njĂ« transaksion tĂ« leximit tĂ« ngulitur. Tani nĂ« kĂ«to situata kthehet gabimi MDBX_EINVAL, pasi ngulĂ«sia mbĂ«shtetet vetĂ«m pĂ«r transaksionet e leximit-shkrimit.
- ĂshtĂ« eliminuar regresi SIGSEGV i aksesit nĂ« adresĂ« tĂ« null gjatĂ« funksionimit nĂ« modalitetin vetĂ«m pĂ«r lexim pa pĂ«rdorimin e skedarit LCK, pĂ«r shembull kur vendosni DB-nĂ« nĂ« njĂ« medium qĂ« Ă«shtĂ« vetĂ«m pĂ«r lexim.
Burimi: opennet.ru
