ĂshtĂ« publikuar botimi i bibliothekĂ«s libmdbx 0.13.1 (MDBX) me implementimin e njĂ« baze tĂ« dhĂ«nash tĂ« integruar tĂ« klasĂ«s çelĂ«s-vlerĂ« me performancĂ« tĂ« lartĂ«. Kodi libmdbx shpĂ«rndahet nĂ«n licencĂ«n Apache 2.0. PĂ«rkrahĂ«n tĂ« gjitha sistemet operative dhe arkitekturat aktuale, si dhe Elbrus 2000 nga Rusia. PĂ«r libmdbx ofrohet njĂ« API i zhvilluar pĂ«r C++, si dhe lidhje tĂ« mbĂ«shtetura nga entuziastĂ« 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:
- Ndryshimi i licencës për kodin nga OpenLDAP Public License në Apache 2.0.
- Zgjerimi i API-së së kursoreve me operacione më të reja dhe të qarta për pozicionimin sipas kushteve <, =, > për të dyja çelësat dhe çiftet çelës-vlerë. Funksionet e reja mdbx_cursor_unbind() dhe mdbx_txn_release_all_cursors() janë shtuar për menaxhim të fleksibël të kursoreve në skenarët e riutilizimit për të reduktuar shpenzimet. Funksionet mdbx_cursor_scan() dhe mdbx_cursor_scan_from() për skanimin e tabelave duke përdorur predikat funksional dhe reduktimin e shpenzimeve të shoqëruara.
- Ristrukturimi i kursoreve për unifikimin e sjelljes, kod më të rregullt, dhe reduktimin e degëzimeve dhe operacioneve të makinerisë.
- Transferimi i funksionalitetit të utilitarit mdbx_chk brenda bibliotekës në formën e funksionit mdbx_env_chk() për kontrollin e integritetit të strukturës së DB, duke përfshirë logjikën e aplikacionit.
- Opsioni MDBX_opt_gc_time_limit për kontroll më fleksibël të kohës së shpenzuar për gjetjen e sekuencave të fqinjësisë së faqeve të lira në GC.
- Reduktim të konsiderueshëm të shpenzimeve për nisjen e transaksioneve në skenarët me një numër të madh DBI-hendësh, falë inicializimit të vonuar/përgjumur të elementeve të tabelave ndihmëse. Përfshirë, mekanizmi i mbështetjes së grupeve të hollë të DBI-hendëve, i menaxhuar nga opsioni MDBX_ENABLE_DBI_SPARSE, i cili është aktivizuar si parazgjedhje.
- Reduktim të shpenzimeve për hapjen e DBI-hendëve. Përfshirë, mekanizmi i lëshimit të vonuar dhe mbështetjes së rrugës së shpejtë për hapjen pa përdorimin e bllokimeve, i menaxhuar nga opsioni MDBX_ENABLE_DBI_LOCKFREE, i cili është aktivizuar si parazgjedhje.
- Mbështetje për "parkimin" e transaksioneve të leximit me përjashtimin e tyre për riprodhimin e MVCC-momenteve të vjetra dhe parandalimin e problemeve që shkaktohen nga ndalimi i procesimit të mbeturinave. Mekanizmi i parkimit dhe përjashtimit të transaksioneve të parkura është si një shtesë, ashtu edhe një alternativë më të lehtë për përdorim në krahasim me thirrjen Handle-Slow-Readers. Për lehtësi, funksionet mdbx_txn_park() dhe mdbx_txn_unpark() kanë argumetn shtesë që lejojnë kërkesën për "shkërdhimin" automatik të transaksioneve të parkura dhe rinisjen e atyre të përjashtuara. Opcione të përkatshme -d dhe -p janë shtuar në utilitarin mdbx_copy.
- Mbështetje për rivendosjen e një ambienti të hapur të punës me DB në një proces dytësor pas degëzimit/ndarjes së procesit përmes mdbx_env_resurrect_after_fork().
- Mbështetje për rinamingun e tabelave përmes mdbx_dbi_rename() dhe mdbx_dbi_rename2(). Funksioni mdbx_enumerate_tables() është shtuar për të marrë informacion rreth tabelave të emëruara nga përdoruesit.
- Mënyra e funksionimit MDBX_NOSTICKYTHREADS në vend të MDBX_NOTLS për të thjeshtësuar integrimin me flokët e lehta/nitë dhe për multitasking me transaksionet sipas sistemeve operative.
- PĂ«r identifikimin e DB Ă«shtĂ« shtuar UUID i disponueshĂ«m nĂ« fushĂ«n mi_dxbid tĂ« strukturĂ«s MDBX_envinfo, e cila Ă«shtĂ« marrĂ« pĂ«rmes mdbx_env_info_ex(). ĂshtĂ« implementuar marrja e informacionit mbi DB pa e hapur atĂ« falĂ« mdbx_preopen_snapinfo().
- Mbështetje për funksionet e regjistrimit të thirrjeve pa funksionalitetin vprintf(), që e bën disi më të lehtë përdorimin e regjistrimit në lidhjet me gjuhë të tjera programimi.
- Shtimi në API të funksioneve mdbx_txn_copy2pathname() dhe mdbx_txn_copy2fd().
- Ristrukturimi i kodit burimor me refaktorizim.
- Përdorimi i termit "tabelë" në vend të "subDb".
- Deklarimi i opsioneve MDBX_COALESCE dhe MDBX_NOTLS si të vjetra. Zëvendësimi i opsionit të ndërtimit MDBX_USE_VALGRIND me opsionin e pranuar ENABLE_MEMCHECK.
Burimi: opennet.ru
