ĂshtĂ« publikuar lĂ«shimi i bibliotekĂ«s libmdbx 0.13.1 (MDBX) me implementimin e njĂ« baze tĂ« dhĂ«nash tĂ« integruar, kompakte dhe me performancĂ« tĂ« lartĂ« nga klasa çelĂ«s-vlerĂ«. Kodi i libmdbx shpĂ«rndahet nĂ«n licencĂ«n Apache 2.0. MbĂ«shteten tĂ« gjitha sistemet operative dhe arkitekturave aktuale, si dhe Elbrusi 2000 i RusisĂ«. PĂ«r libmdbx ofrohet njĂ« API e 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ë 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:
- Ndryshimi i licencës së kodit nga OpenLDAP Public License në Apache 2.0.
- Zgjerimi i API-ve të kursorëve me operacione më të përshtatshme dhe të dukshme për pozicionimin në përputhje me kushtet <, =, > si për çelësat ashtu edhe për çiftet çelës-vlerë. Janë shtuar funksionet mdbx_cursor_unbind(), dhe mdbx_txn_release_all_cursors() për menaxhimin e fleksibël të kursoreve në skenarë të riciklimit për të reduktuar shpenzimet. Funksionet mdbx_cursor_scan() dhe mdbx_cursor_scan_from() për skanimin e tabelave duke përdorur predikatin funksional dhe për të reduktuar shpenzimet përkatëse.
- Riorganizimi i kursoreve për unifikimin e sjelljes, kod më të rregullt, dhe reduktimin e numrit të degëzimeve dhe operacioneve makinerike.
- Transferimi i funksionalitetit të utilites mdbx_chk brenda bibliotekës si funksion mdbx_env_chk() për të kontrolluar integritetin e 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 në kërkimin e sekuencave të fqinjëve të lirë në GC.
- Rënia e ndjeshme e shpenzimeve në fillimin e transaksioneve në skenarë me një numër të madh të DBI-handeve, për shkak të inicializimit të vonuar/përngjitur të elementeve të tabelave ndihmëse. Përfshirë, mekanizmi i mbështetjes për grupe të rralla të DBI-handeve, i menaxhuar nga opsioni i ndërtimit MDBX_ENABLE_DBI_SPARSE, i cili është aktivizuar si parazgjedhje.
- Reduktimi i shpenzimeve për hapjen e DBI-handeve. Përfshirë, mekanizmi i çlirimit të vonuar dhe mbështetjes për rrugën e shpejtë të hapjes pa përdorur bllokimet, i menaxhuar nga opsioni i ndërtimit MDBX_ENABLE_DBI_LOCKFREE, i cili është aktivizuar si parazgjedhje.
- Mbështetje për "parkimin" e transaksioneve lexuese me shtyrjen e tyre për ripërpunimin e snapshot-ëve të vjetra MVCC dhe parandalimin e problemeve të shkaktuara nga pezullimi i ripërpunimit të mbeturinave. Mekanizmi i parkimit dhe shtyrjes së transaksioneve të parkura është një plotësim, por gjithashtu një alternativë më e thjeshtë për thirrjen e Handle-Slow-Readers. Për lehtësi, funksionet mdbx_txn_park() dhe mdbx_txn_unpark() kanë argumente shtesë që lejojnë kërkesën për "shkarkimin" automatik të transaksioneve të parkura dhe rinisjen e atyre të shtyra. Në utilitarin mdbx_copy janë shtuar opsionet përkatëse -d dhe -p.
- Mbështetje për rikthimin e mjedisit të hapur të punës me DB në një proces fëmijë pas ndarjes/çarjes së procesit përmes mdbx_env_resurrect_after_fork().
- MbĂ«shtetje pĂ«r rinaming-un e tabelave pĂ«rmes mdbx_dbi_rename() dhe mdbx_dbi_rename2(). ĂshtĂ« shtuar funksioni mdbx_enumerate_tables() pĂ«r tĂ« marrĂ« informacion rreth tabelave tĂ« emĂ«ruara nga pĂ«rdoruesi.
- Rejimi i funksionit MDBX_NOSTICKYTHREADS në vend të MDBX_NOTLS për të thjeshtuar integrimin me thread-e të lehta, duke i multiplexuar ata me transaksionet nga sistemi operativ.
- PĂ«r identifikimin e DB-sĂ« Ă«shtĂ« shtuar UUID e disponueshme nĂ« fushĂ«n mi_dxbid tĂ« strukturĂ«s MDBX_envinfo, e cila merret pĂ«rmes mdbx_env_info_ex(). ĂshtĂ« realizuar marrja e informacionit pĂ«r DB-nĂ« pa e hapur atĂ« pĂ«rmes mdbx_preopen_snapinfo().
- Mbështetje për funksionet e regjistrimit të thirrjeve pa funksionalitetin vprintf(), which significantly simplifies the use of logging in bindings to other programming languages.
- 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".
- Shpallja e opsioneve MDBX_COALESCE dhe MDBX_NOTLS si të papërshtatshme. Zëvendësimi i opsionit të ndërtimit MDBX_USE_VALGRIND me opsionin e pranuar ENABLE_MEMCHECK.
Burimi: opennet.ru
