Megjelent a libmdbx 0.13.7 (MDBX) könyvtár kiadása, amely egy nagy teljesítményű, kompakt beágyazott kulcs-érték típusú adatbázis megvalósítását kínálja. A libmdbx kódja Apache 2.0 licenc alatt kerül forgalomba. Támogatja az összes aktuális operációs rendszert és architektúrát, beleértve az orosz Elbrus 2000-et is. A libmdbx egy fejlett API-t kínál C++-hoz, emellett támogató közösség által készített kötődései elérhetőek Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala nyelveken. A libmdbx-ot használó projektek közül megemlíthető az Isar, az Erigon és a Reth, valamint a StarkWare és a Positive Technologies fejlesztései.
Történelmileg a libmdbx a LMDB adatbázis-kezelő mélyreható átírása, amely megbízhatóságban, funkciókészletben és teljesítményben felülmúlja elődjét. A LMDB-hez képest a libmdbx-ben nagy figyelmet fordítanak a kód minőségére, az API megbízható működésére, a tesztelésre és az automatikus ellenőrzésekre. A csomag részeként rendelkezésre áll egy integritásellenőrző eszköz az adatbázis struktúrájának, bizonyos helyreállítási lehetőségekkel. Technológiailag a libmdbx ACID-t, szigorú módosítási sorosítást és nem blokkoló olvasást kínál, lineáris CPU magokra történő skálázással. Támogatja az automatikus tömörítést, az adatbázis méretének automatikus kezelését és a tartományalapú lekérdezések volumeneinek becslését.
Főbb változások:
- Kritikus hibát orvosoltak az mdbx_env_resurrect_after_fork() funkcióban SysV-szemaforok használata esetén. A hiba csak akkor jelentkezett, amikor egy író tranzakció közben fork() segítségével új folyamatot hoztak létre, ami szemaforok nem megfelelő működéséhez és különböző hibákhoz, akár az adatbázis sérüléséhez is vezetett. A probléma a mdbx_env_resurrect_after_fork() megjelenése óta fennállt, és érintette a macOS-t, valamint a POSIX-platformokat az MDBX_LOCKING=5 opcióval történő fordításnál.
- Megoldották a DB másolásával kapcsolatos problémát, amely nem Linux alapú POSIX rendszereken (főként macOS-en) jelentkezett, valamint bizonyos esetekben, amikor a célfájl nem helyi fájlrendszeren volt. A probléma EWOULDBLOCK/EAGAIN hibakódhoz vezetett, amely a fcntl(F_SETLK) és flock() blokkolások hiányosságaiból/conflictjából eredett az operációs rendszer magjában. Az POSIX rendszereken történő másolás API-jában átdolgozták a fájlfoglalások hibakezelését.
- Megoldották azt a hibát, amely váratlan MDBX_BAD_DBI visszatérítést okozott, amikor több tranzakciót indítottak egy folyamatban az adatbázis megnyitását követően.
- Kijavításra került a hiba, amely váratlan MDBX_DBS_FULL visszatérést okozott már megnyitott táblák újbóli megnyitásakor, amikor már elérte a nyitott DBI-leírók határértékét.
- Kijavítva a gyűjtési hiba Android platformra, amikor a _FILE_OFFSET_BITS explicit módon van meghatározva.
- Kijavítva az ENOMEM helyett MDBX_ENOMEM használatának hibája. Ez törheti a gyűjtést nem-POSIX\/Windows platformokon, a konfigurációtól és\/vagy az SDK verziójától függően.
- Több hibás assert-ellenőrzés javítva vagy eltávolítva, amelyek a hibakeresés céllal készült verziók összeomlását okozták speciális helyzetekben. Főleg a txn_end(), txn_lock() és txn_unlock() függvények kódjában Windows és POSIX alatt.
- Elhárították az apró MSVC figyelmeztetéseket. Kikapcsolva a C5286 és C5287 figyelmeztetéseket.
- Finomítva lett az OFD-zárak használatának lemondásának logikája POSIX-platformokon. Mostantól EINVAL mellett további hibakódok figyelembevételre kerülnek (ENOSYS, ENOIMPL, ENOTSUP, ENOSUPP, EOPNOTSUPP), amelyek lehetővé teszik, hogy az összeállított könyvtár néhány esetben működjön, amikor a releváns kernel\/konténer\/emulátor nem támogatja a szükséges rendszerhívásokat.
- A tesztkeretrendszerbe belerakták a "—numa " opció támogatását a sztochasztikus teszt NUMA-csomópontra történő kötéséhez. A battery\/tmux-scripten explicit NUMA-személyre szabás került hozzáadásra, ami jelentősen megnövelte a hatékonyságot NUMA gépeken történő tesztelés során.
- A sztochasztikus scripten megvalósult az egyes tesztek véletlenszerű indítási sorrendje.
Forrás: opennet.ru
