Botimi i bibliotekës libmdbx 0.13.3 (MDBX) me implementimin e një baze të dhënash të integruar, me performancë të lartë dhe kompakte, është publikuar. Kodi i libmdbx shpërndahet nën licencën Apache 2.0. Përkrah të gjitha sistemet operative dhe arkitekturën aktuale, si dhe Elbrus 2000 rus. Libmdbx ofron një API të avancuar për C++, si dhe lidhje të mbështetura nga entuziastët për gjuhët Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno dhe Scala.
Historikisht, libmdbx është një ripunim i thellë i DBMS LMDB dhe tejkalon paraardhësin e tij në besueshmëri, gamën e mundësive dhe performancën. Krahasuar me LMDB, libmdbx i kushton vëmendje të madhe cilësisë së kodit, qëndrueshmërisë së API, testimit dhe verifikimeve automatike. Ofron një mjet për verifikimin e integritetit të strukturës së DB me disa mundësi rikuperimi. Teknologjikisht, libmdbx ofron ACID, serializim të rreptë të ndryshimeve dhe lexim jo bllokues me shkallëzim linear sipas njësive CPU. Mbështetet auto-kompaktifikimi, menaxhimi automatik i madhësisë së DB, dhe vlerësimi i volumit të kërkesave në intervale (range query estimation).
Ndryshimet kryesore:
- Dega 0.13.x mori statusin e qëndrueshëm. Ka filluar zhvillimi i degës 0.14.x.
- Në API-në C është shtuar funksioni mdbx_cursor_count_ex(), i cili lejon marrjen e numrit të shumë-vlerave përkatëse me çelësin aktual, si dhe informacionin mbi pemën e brendshme që ruan këto vlera.
- Në API-në C++ është shtuar metoda mdbx::txn::make_broken(), e ngjashme me mdbx_txn_break().
- Në mjetet mdbx_copy, mdbx_drop, mdbx_dump, mdbx_load, mdbx_stat është implementuar regjistrimi i gabimeve, paralajmërimeve dhe mesazheve të rëndësishme nga libmdbx.
- Ndryshimi i sjelljes:
- Kur aktivizohet profilizimi i mbledhësit të mbetjeve (mbledhje me opsionin MDBX_ENABLE_PROFGC=ON), tani llogariten kostot e kohës së CPU për shkrirjen e listave të faqeve, dmth për funksionin pnl_merge().
- Në mjetin e testimit, vlera e modit të të dhënave është rinovuar nga data.dups në data.multi.
- ĂshtĂ« pĂ«rmirĂ«suar kontrolli i gjatĂ«sisĂ« sĂ« çelĂ«sit brenda cursor_seek().
- Nëse përdoruesi nuk caktuar vetë një vlerë përmes mdbx_env_set_option(MDBX_opt_txn_dp_limit), ekzekutohet rregullimi i dirty-pages-limit me nisjen e çdo transaksioni shkruese të pa integruar, duke u bazuar në volumet e RAM të disponueshëm dhe madhësinë e DB.
- Në modin MDBX_NOSTICKYTHREADS, lejohet commit/abort i transaksioneve të integrate nga çdo thread/rrjedhë.
- Kur gjatë përpjekjes për të nisur transaksione të ndërlidhura në mënyrën MDBX_WRITEMAP, regjistrohet një log dhe kthehet një gabim MDBX_INCOMPATIBLE.
- Në API-në C++, në konstruktoret/inicializuesit dhe metodat e lidhura me formimin e gjeometrisë së DB-së, përdoren për default vetëm vlerat standarde.
- Brenda mdbx_env_set_geometry() janĂ« pĂ«rmirĂ«suar heuristikat pĂ«r pĂ«rcaktimin e parametrave tĂ« gjeometrisĂ« sĂ« DB-sĂ« qĂ« kĂ«rkohen nga pĂ«rdoruesi âpĂ«r defaultâ.
- Rregullime:
- ĂshtĂ« eliminuar regresi i mosçlirimit tĂ« mutex-it gjatĂ« pĂ«rpjekjes pĂ«r tĂ« mbyllur pĂ«rsĂ«ri dbi-deskriptorin, duke pĂ«rfshirĂ« pĂ«rpjekjen pĂ«r tĂ« mbyllur nĂ« mĂ«nyrĂ« eksplicite deskriptorin pas fshirjes sĂ« tabelĂ«s sĂ« lidhur me tĂ«.
- ĂshtĂ« eliminuar regresi i qĂ«ndrimit tĂ« kursorit tĂ« ndĂ«rlidhur/dupsort pas futjes sĂ« tĂ« dhĂ«nave nĂ« mĂ«nyrĂ«n MDBX_APPEND.
- Përkrahja e marrjes së boot_id gjatë punës brenda një kontejneri LXC.
- ĂshtĂ« eliminuar gabimi i pĂ«rpunimit tĂ« gabuar tĂ« pĂ«rpjekjes pĂ«r tĂ« nisur njĂ« transaksion lexues tĂ« ndĂ«rlidhur. Tani nĂ« situata tĂ« tilla kthehet njĂ« gabim MDBX_EINVAL, pasi ndĂ«rlidhja mbĂ«shtetet vetĂ«m pĂ«r transaksionet e leximit-shkrimit.
- ĂshtĂ« eliminuar regresi SIGSEGV i qasjes nĂ« adresĂ«n zero gjatĂ« punĂ«s nĂ« mĂ«nyrĂ«n e vetĂ«m-pĂ«r-lexim pa pĂ«rdorimin e skedarit LCK, pĂ«r shembull, kur vendosni DB-nĂ« nĂ« njĂ« mbajtĂ«s qĂ« Ă«shtĂ« vetĂ«m pĂ«r lexim.
Burimi: opennet.ru
