Megjelent a libmdbx 0.11.7 (MDBX) könyvtár, amely egy magas teljesítményű, kompakt, beágyazható kulcs-érték adatbázis megvalósítását tartalmazza. A libmdbx kódja az OpenLDAP Public License licenc alatt érhető el. Támogatottak a legfrissebb operációs rendszerek és architektúrák, köztük az orosz Elbrus 2000.
A kiadás figyelemreméltó, mivel a projekt áttelepült a GitFlic szolgáltatásra, miután a GitHub adminisztrációja 2022. április 15-én bármiféle figyelmeztetés vagy magyarázat nélkül eltávolította a libmdbx-t számos más projekttel együtt, miközben sok fejlesztőnek zárolta a hozzáférését, akik a szankciók alá eső cégekkel álltak kapcsolatban. A felhasználók szempontjából a projekt összes oldalának, repozitóriumának és forkjának hirtelen 404-es oldalra váltása történt, kommunikációs lehetőség nélkül, és a helyzet okának feltárása nélkül.
Sajnos szinte az összes issue, amelyben sok részletes kérdés volt, valamint számos vita is elveszett. Ennek az információnak az elvesztése az egyetlen objektív kár, amelyet a GitHub adminisztrációja okozott a projektnek. Részben a viták másolatai továbbra is elérhetők az archive.org archívumban.
Az elkészített CI-szkriptek és infrastruktúra (amely ingyen hozzáférhető az OpenSource projektek számára) elvesztése arra kényszerítette a csapatot, hogy átvizsgálást, egységesítést és kisebb technikai adósságok felszámolását végezzen. Jelenleg a CI csaknem teljes mértékben helyreállt, kivéve a BSD és Solaris összes változatának összeállítását és tesztelését. Érdekes módon a GitHub intézkedései után egyetlen magyarázatot vagy értesítést sem kaptunk, csak a díj megfizetésére vonatkozó emlékeztetőt és a pénzlevonási kísérleteket.
A libmdbx v0.11.3 kiadása óta, a GitHub intézkedései utáni helyreállításon kívül, a következő fejlesztéseket és hibajavításokat érdemes megemlíteni:
- Megvalósult a felfedezett hatás/hiba a Linux kernelben a kombinált lap- és pufferkészlet koherenciájának megkerülésére. Azokban a rendszerekben, ahol a lap- és pufferkészlet valóban össze van vonva, a kernelnek nincs értelme két másolat adatot tárolnia egy már megjelenített fájl írásakor. Így az írt adatok a memóriában való leképezésen keresztül láthatóvá válnak a write() rendszerhívás befejezése előtt, még akkor is, ha az adatok még nem kerültek a lemezre.
Összességében más viselkedés nem racionális, mivel késleltetett összevonás esetén mindenképpen le kell foglalni a zárakat a laplisták számára, másolni kell az adatokat vagy ki kell igazítani a PTE-t. Ezért az egyesült puffer gyorsítótár 1989 óta érvényes néma koherenciára vonatkozó szabály. Ezért a libmdbx magas terhelésű használati forgatókönyveiben bekövetkező furcsa hibák felfedezése nagy munkát igényelt. Először a probléma reprodukálására, majd a hipotézisek ellenőrzésére és a fejlesztések validálására.
Most már magabiztosan elmondható, hogy a probléma megbízhatóan azonosítva, lokalizálva és megbízhatóan megszüntetve lett, a reprodukciós forgatókönyv összes bonyolultsága és sajátossága ellenére. Továbbá a megkerülési mechanizmus működését egy az Erigon (Ethereum) fejlesztője is megerősítette, az ő esetében a debug verziónál a védelem aktiválódása regresszióként jelentkezett a felesleges assert-ellenőrzés miatt.
Meg kell jegyezni, hogy a libmdbx széles körű alkalmazása során alapvetően fontosabb a megbízható működés biztosítása, mintsem azt tisztázni, hogy "hiba vagy sajátosság", és hogy számíthatunk-e ilyen koherenciára, főként nem az okok keresése a Linux kernelben lévő koherenciátlanságból. Ezért itt a felhasználókat érintő probléma megszüntetéséről van szó.
- Megszüntették az EXDEV (Cross-device link) hiba megjelentésének regresszióját, amikor forró adatbázis másolást végeznek kompaktálás nélkül egy másik fájlrendszerre, mind az API-n keresztül, mind a mdbx_copy utilitással.
- Kris Zyp megvalósította a libmdbx támogatását a Deno-ban. Kai Wetlesen RPM csomagolást készített a Fedora számára. David Bouyssié elkészítette a Scala kötéseket.
- Javították az MDBX_opt_rp_augment_limit opcióval megadott érték feldolgozását óriási tranzakciók kezelése során nagy adatbázisokban. Korábban a hiba miatt felesleges tevékenységek történhettek, ami időnként hatással volt a teljesítményre az Ethereum (Erigon/Akula/Silkworm) és a Binance Chain projektjeiben.
- Javítottak sok apró hibát, beleértve a C++ API-t is. Számos problémát megszüntettek a ritka és egzotikus konfigurációk építésekor. A jelentős fejlesztések teljes listája elérhető a ChangeLog- ban.
- Összesen 185 módosítást hajtottak végre 89 fájlban, körülbelül 3300 sort adtak hozzá, és körülbelül 4100 sort töröltek. A törlések nagy része a már feleslegessé vált technológiai fájlok tisztításából adódott, amelyek a GitHub-bal és a kapcsolódó szolgáltatásokkal kapcsolatosak.
Történelmileg a libmdbx a LMDB adatbázis mélyreható átdolgozása, amely megbízhatóság, funkciókészlet és teljesítmény szempontjából felülmúlja elődjét. A LMDB-hez képest a libmdbx nagy hangsúlyt fektet a kód minőségére, az API stabil működésére, a tesztelésre és az automatikus ellenőrzésekre. A csomag tartalmaz egy adatbázis-struktúra integritásának ellenőrzésére szolgáló segédeszközt, néhány helyreállítási képességgel.
Technológiailag a libmdbx ACID-t, a változások szigorú sorozatosságát és a blokkolás nélküli olvasást kínálja, amely lineárisan skálázódik a CPU magokon. Támogatott az automatikus tömörítés, az adatbázis méretének automatikus kezelése, valamint a tartomány alapú lekérdezések volumene (range query estimation). 2016 óta a projektet a Positive Technologies finanszírozza, és 2017 óta a termékeikben használják.
A libmdbx egy fejlett C++ API-t kínál, valamint lelkes támogatóktól származó kötődéseket Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno és Scala nyelvekhez.
Forrás: opennet.ru
