Libmdbx 0.13.7 (MDBX) është publikuar me implementimin e një baze të dhënash të konceptit çelës-vlerë të kompaktë dhe me performancë të lartë. Kodi libmdbx shpërndahet nën licencën Apache 2.0. Mbështeten të gjitha sistemet operative dhe arkitekturën e tanishme, përfshirë Elbursin rus 2000. 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. Projektet që përdorin libmdbx përfshijnë Isar, Erigon dhe Reth, si dhe zhvillimet e kompanive StarkWare dhe Positive Technologies.
Historikisht, libmdbx është një ripunim i thellë i DBMS LMDB dhe e kalon paraardhësin e tij në besueshmëri, gamën e mundësive dhe performancë. Krahasuar me LMDB, në libmdbx, një vëmendje e madhe i kushtohet cilësisë së kodit, stabilitetit të API-t, testimit dhe kontrolleve automatike. Ofron një utilitet 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 pa bllokim me shkallëzim linear sipas koreve të CPU-së. Mbështetet kompaktimi automatik, menaxhimi automatik i madhësisë së DB, dhe vlerësimi i volumit të zgjedhjeve sipas intervaleve.
Ndryshimet kryesore:
- NjĂ« gabim kritik nĂ« funksionin mdbx_env_resurrect_after_fork() duke pĂ«rdorur semaforĂ« SysV Ă«shtĂ« korrigjuar. Gabimi shfaqej vetĂ«m pas krijimit tĂ« njĂ« procesi dytĂ«sor pĂ«rmes fork() gjatĂ« njĂ« transaksioni shkruar, duke shkaktuar funksionimin e gabuar tĂ« semaforĂ«ve dhe mĂ« pas shumĂ« gabime tĂ« ndryshme, deri te dĂ«mtimi i BAZĂS sĂ« tĂ« dhĂ«nave. Problemi ekzistonte qĂ« nga shfaqja e mdbx_env_resurrect_after_fork() dhe prekte macOS, si dhe platformat POSIX kur ndĂ«rtohej me opsionin MDBX_LOCKING=5.
- NjĂ« problem nĂ« API-nĂ« e kopjimit tĂ« BAZĂS sĂ« tĂ« dhĂ«nave, i cili shfaqej nĂ« sisteme tĂ« tjera POSIX pĂ«rveç Linux ( kryesisht nĂ« macOS), si dhe nĂ« disa raste kur skedari i synuar ndodhej nĂ« njĂ« sistem skedari jo-lokal. Problemi shkaktonte kthimin e gabimit EWOULDBLOCK/EAGAIN pĂ«r shkak tĂ« njĂ« gabimi/kontakti tĂ« bllokimeve fcntl(F_SETLK) dhe flock() nĂ« kernelin e OS. Rishikimi i trajtimit tĂ« gabimeve tĂ« kapjes sĂ« bllokimeve tĂ« skedarĂ«ve nĂ« API-nĂ« e kopjimit nĂ« sistemet POSIX Ă«shtĂ« realizuar.
- NjĂ« gabim qĂ« shkaktonte kthimin e papritur tĂ« MDBX_BAD_DBI kur nisin disa transaksione paralelisht brenda njĂ« procesi pas hapjes sĂ« BAZĂS sĂ« tĂ« dhĂ«nave Ă«shtĂ« korrigjuar.
- Një gabim që shkaktonte kthimin e papritur të MDBX_DBS_FULL kur rihapej tabela tashmë e hapur dhe ishte arritur kufiri i descriptorëve të hapur DBI është korrigjuar.
- Një gabim në ndërtimin për platformën Android kur ishte e qartë se ishte e përcaktuar _FILE_OFFSET_BITS është korrigjuar.
- Një gabim në përdorimin e ENOMEM në vend të MDBX_ENOMEM është korrigjuar. Kjo mund të shkaktonte dëmtim të ndërtimit në platformat jo-POSIX/Windows, në varësi të konfigurimit dhe/ose versionit të SDK.
- Disa kontrolle të gabuara assert janë rregulluar ose fshirë, të cilat shkaktonin rrëzime të ndërtimit në situata specifike. Kryesisht, në kodin e funksioneve txn_end(), txn_lock() dhe txn_unlock() si në Windows ashtu edhe në POSIX.
- Dëshira për t'u shmangur nga parashikimet e pavlerësishme MSVC është përmirësuar. Dëshira C5286 dhe C5287 janë çaktivizuar.
- Logjika për të hequr dorë nga përdorimi i bllokimeve OFD në platformat POSIX është përmirësuar. Tani, përveç EINVAL, janë marrë parasysh kode të tjera gabimesh (ENOSYS, ENOIMPL, ENOTSUP, ENOSUPP, EOPNOTSUPP), që do të lejojë që biblioteka e ndërtuar të punojë në disa raste kur bërthama/konteineri/emulatori përkatës nuk mbështet thirrjet e nevojshme të sistemit.
- NĂ« kornizĂ«n e testit Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r opsionin "ânuma " pĂ«r lidhjen e testit stokastik me nyjĂ«n NUMA. NĂ« skriptin e battery/tmux Ă«shtĂ« shtuar shpĂ«rndarja e qartĂ« nĂ« nyjat NUMA, e cila ndjeshĂ«m rriti efikasitetin nĂ« testim nĂ« makinat NUMA.
- Në skriptin stokastik është realizuar një rend të rastësishëm për nisjen e testeve të veçanta.
Burimi: opennet.ru
