Megjelent a libmdbx 0.10.4 (MDBX) könyvtár, amely egy nagy teljesítményű, kompakt, beágyazható kulcs-érték adatbázist valósít meg, valamint a libfpta 0.3.9 (FPTA) könyvtár, amely a MDBX fölé egy táblázatos adatelrendezést valósít meg másodlagos és összetett indexekkel. Mindkét könyvtár OSI által elfogadott licenc alatt terjesztett. Támogatott minden aktuális operációs rendszer és architektúra, valamint az orosz Elbrus 2000 is.
Történelmileg a libmdbx a LMDB adatbázis-kezelő rendszer mélyreható átdolgozása, és megbízhatóságában, funkcióinak készletében és teljesítményében felülmúlja elődjét. A LMDB-hez képest a libmdbx nagy figyelmet fordít a kód minőségére, az API stabil működésére, a tesztelésre és az automatikus ellenőrzésekre. Szállítva van a DB struktúrájának integritását ellenőrző eszköz is, néhány helyreállítási lehetőséggel.
Technológiailag a libmdbx ACID-t, szigorú módosítási sorozatot és blokkolás nélküli olvasást kínál, lineáris skálázással a CPU magok között. Támogatott az automatikus tömörítés, az adatbázis méretének automatikus kezelése, valamint a tartományok (range query) becslése. 2016 óta a projektek finanszírozását a Positive Technologies végzi, és 2017 óta a termékeikben is használják.
A libmdbx-hez C++ API áll rendelkezésre, valamint lelkes fejlesztők által támogatott kötések a Rust, Haskell, Python, NodeJS, Ruby, Go és Nim nyelvekhez. A libfpta-hoz nyilvánosan csak a C/C++ fejlécekből álló API leírása érhető el.
A legfontosabb újítások, fejlesztések és javítások, melyek a május 9-i legutolsó hír óta kerültek hozzáadásra:
- Biztosítva van a reprodukálható build-ek lehetősége.
- Egy ritka koktél közben a tranzakció rögzítése során egy ciklikus hiba miatt bekövetkező felfüggesztés megszüntetve. A problémát a Positive Technologies szakemberei fedezték fel a saját termékeik belső tesztelése során.
- A tesztek átdolgozva lettek, és a tesztelési forgatókönyvek kiterjesztésre kerültek, hogy ellenőrizzék az összes elérhető nem izomorf állapotot a lapfa struktúrában és a GC tartalommal az adatbázison belül.
- A C++ API-ban eltávolítottunk egy felesleges „noexcept” kifejezést, további terheléseket adtunk a „cursor::erase()” metódushoz, és a pufferek megvalósítását megszabadítottuk a „std::string” használatától a megfelelő igazítás érdekében (ez releváns a CLANG libstdc++ esetén).
- Javították a koszos oldalak spilling algoritmusában megjelent hibát (az adatbázis módosított oldalainak szelektív kiszorítása), amely ritka és váratlan MDBX_PROBLEM hibaként nyilvánult meg nagy tranzakciók során.
- Fázisellenőrzést végeztek további ellenőrzések beépítésével a stabilitás érdekében az adatbázis szándékos megsérülésekor.
- Kisebb UndefinedBehaviorSanitizer és Coverity Scan problémákat orvosoltak.
- Javították a már elavult és nem használt belső „P_DIRTY” zászló ellenőrzését az adatbázis képeiben, amelyeket a könyvtár régebbi verziói készítettek.
- A CMake szkriptekben finomították a LTO (link-idő optimalizálás) szükséges fordítókomponensek keresését.
- A maximális egyidejű olvasók száma 32767-re növekedett.
- Fokozta a teljesítményt Valgrind és AddressSanitizer használatakor.
- Windows alatt megszüntették az SRW-zár rekurzív használatát az MDBX_NOTLS üzemmódban (szál helyi tárolás nélküli üzemmódban), javították a bootid generálását a rendszeridő módosítása esetén, finomították a WSL1 és WSL2 észlelését, valamint lehetőséget biztosítottak adatbázisok megnyitására Plan 9-en, DrvFS segítségével csatolva.
- Összesen több mint 160 módosítást végeztek 57 fájlban, körülbelül 5000 új sort adtak hozzá, körülbelül 2500 sort töröltek.
Külön szeretném megköszönni az Erigon projektcsapatának (Ethereum ökoszisztéma) a segítséget a szélsőséges használati forgatókönyvek tesztelésében. Érdekes módon azóta, hogy a libmdbx v0.10.0 megjelent, az Erigon telepítéseiben (az Ethereum csomópontok 7%-ában használt) 1-2 TB méretű adatbázis mellett mindössze három adatbázis-hibáról érkezett jelentés, amelyek mind külső okokból származtak, nem pedig szoftverhibákból: két esetben memóriahibák, míg egy esetben egy specifikus tárolóalrendszer konfigurációjában fellépő adathibák miatt történtek.
Forrás: opennet.ru
