ĂshtĂ« publikuar lĂ«shimi i libmdbx 0.13.7 (MDBX) me implementimin e njĂ« baze tĂ« dhĂ«nash tĂ« integruar tĂ« lartĂ« qĂ« funksionon si çelĂ«s-vlerĂ«. Kodi i libmdbx shpĂ«rndahet nĂ«n licencĂ«n Apache 2.0. MbĂ«shteten tĂ« gjitha sistemet operative dhe arkitekturat aktuale, si dhe Elbrusi rus 2000. Libmdbx ofron njĂ« API tĂ« 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. NdĂ«r projektet qĂ« pĂ«rdorin libmdbx, mund tĂ« pĂ«rmendim Isar, Erigon dhe Reth, si dhe zhvillimet e kompanive StarkWare dhe Positive Technologies.
Historikisht, libmdbx është një ripunim i thellë i bazës së të dhënave LMDB dhe e tejkalon paraardhësin e saj në besueshmëri, funksionalitete dhe performancë. Krahasuar me LMDB, në libmdbx i është kushtuar shumë vëmendje cilësisë së kodit, qëndrueshmërisë së API, testimit dhe kontrolleve automatike. Sigurohet një mjet për të verifikuar integritetin e strukturës së bazës së të dhënave me disa mundësi rikuperimi. Teknologjikisht, libmdbx ofron ACID, serilizim të rreptë të ndryshimeve dhe lexim të pakonkurrueshëm me shkallëzim linear sipas bërthamave të CPU. Mbështetet kompaktimi automatik, menaxhimi automatik i madhësisë së bazës së të dhënave, dhe vlerësimi i shumësive të zgjedhura sipas intervaleve (range query estimation).
Ndryshimet kryesore:
- Kishte eliminuar një gabim të rëndësishëm në funksionalitetin mdbx_env_resurrect_after_fork() gjatë përdorimit të semaforëve SysV. Gabimi shfaqej vetëm pas krijimit të një procesi fëmijë përmes fork() gjatë një transaksioni shkruese të ekzekutuar, duke çuar në një funksionim të gabuar të semaforëve dhe më pas në gabime të ndryshme, përfunduar në dëmtimin e bazës së të dhënave. Problemi ka ekzistuar që nga shfaqja e mdbx_env_resurrect_after_fork() dhe kishte prekur macOS, si dhe platforma POSIX kur ishte ndërtuar me opsionin MDBX_LOCKING=5.
- Kishte eliminuar një problem në API-në e kopjimit të bazës së të dhënave, që shfaqej në sisteme POSIX ndryshe nga Linux (për shumicën në macOS), si dhe në disa raste kur skedari i targetit ishte në një sistem skedari jo-lokal. Problemi çonte në kthimin e gabimit EWOULDBLOCK/EAGAIN, i cili rezultonte nga një mosfunksionim/kontaktim i bllokimeve fcntl(F_SETLK) dhe flock() në kernin e OS. Kishte përmirësuar trajtimin e gabimeve të kapjes së bllokimeve të skedarëve në API-në e kopjimit në sistemet POSIX.
- Korrigjua një gabim që shkaktonte kthimin e papritur MDBX_BAD_DBI kur filloheshin disa transaksione brenda një procesi pas hapjes së BD-së.
- Korrigjua një gabim që shkaktonte kthimin e papritur MDBX_DBS_FULL kur rihapeshin tabela të hapura tashmë dhe ishte arritur kufiri i descriptorëve të hapur DBI.
- Korrigjua një gabim ndërtimi për platformën Android kur është e shprehur qartë _FILE_OFFSET_BITS.
- Korrigjua përdorimi i ENOMEM në vend të MDBX_ENOMEM, i cili mund të shkaktonte probleme në ndërtim në platformat jo-POSIX/Windows, në varësi të konfigurimit dhe/ose versionit të SDK.
- Ngritëm ose fshimë disa kontrolle të gabuara, të cilat shkaktonin dështime në ndërtimet e përjashtuara në situata specifike. Kryesisht, në kodin e funksioneve txn_end(), txn_lock() dhe txn_unlock() në Windows dhe POSIX.
- Korrigjohen paralajmĂ«rime tĂ« parĂ«ndĂ«sishme MSVC. Ăaktivizohen paralajmĂ«rimet C5286 dhe C5287.
- Rivendoset logjika e heqjes së bllokimeve OFD në platformat POSIX. Tani përveç EINVAL, merret parasysh edhe kodet e tjera të gabimeve (ENOSYS, ENOIMPL, ENOTSUP, ENOSUPP, EOPNOTSUPP), që do të lejojë që biblioteka e ndërtuar të funksionojë në disa raste, kur bërthama/kontejneri/emulatori aktual nuk mbështet thirrjet e kërkuara sistemike.
- NĂ« kornizĂ«n testuese Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r opsionin «ânuma » pĂ«r lidhjen e testit stohastik me nyjĂ«n NUMA. NĂ« skenarin battery/tmux Ă«shtĂ« shtuar shpĂ«rndarje e qartĂ« nĂ« nyjat NUMA, qĂ« ka rritur ndjeshĂ«m efikasitetin e testimit nĂ« makinat NUMA.
- Në skenarin stohastik është zbatuar një renditje e rastësishme për nisjen e testeve të veçanta.
Burimi: opennet.ru
