Három hónap fejlesztés után megjelent a libmdbx 0.10.0 (MDBX) könyvtár, amely egy magas teljesítményű, kompakt beágyazott kulcs-érték adatbázist valósít meg. A libmdbx kódja az OpenLDAP Public License alatt terjesztett. A libmdbx a LMDB adatbázis mélyreható átdolgozása, és a fejlesztők állítása szerint megbízhatóságban, funkciókészletben és teljesítményben felülmúlja ősét. Azt állítják, hogy a libmdbx akár 20%-kal gyorsabb az LMDB-nél CRUD forgatókönyvekben, és akár 30%-kal gyorsabb, ha a libmdbx fordítása során letiltják a belső ellenőrzést, ezáltal összehasonlíthatóvá válik az LMDB-vel.
A libmdbx ACID-t, szigorú változás-sorozatot és nem blokkoló olvasást kínál, amely lineárisan skálázódik a CPU magok számával. A libmdbx nagy figyelmet fordít a kód minőségére, az API stabil működésére, tesztelésre és automatikus ellenőrzésekre. Támogatásra kerül az automatikus tömörítés, az adatbázis méretének automatikus kezelése, egy egységes adatbázis-formátum 32 bites és 64 bites kiadások számára, valamint a tartományokra (range query) vonatkozó becslés. Szükséges a struktúra integritásának ellenőrzésére szolgáló eszköz néhány helyreállítási funkcióval. 2016 óta a projektet a Positive Technologies finanszírozza, és 2017 óta a termékeikben használják, a Positive Technologies ellen az Egyesült Államok által bevezetett szankciók pedig nem gyakorolnak számottevő hatást.
A legutóbbi kiadás óta hozzáadott főbb újítások, fejlesztések és javítások:
- Elérhető a Mahlon E. Smith Ruby kötése és a Noel Kuntze Python kötéseinek próbaverziója, valamint frissítve lettek a GoLang kötései Alexey Sharov által.
- Az „MDBX_WRITEMAP” üzemmódban, amikor az adatbázis adatai közvetlenül a RAM-ban változnak, megvalósult a módosított adatbázislapok „átlátható átkonvertálása” a lemezre. Mostantól, minden egyes művelet befejezése után ezek az oldalak azonnal teljesen készen állnak a lemezre írásra, és az operációs rendszer magja önállóan képes törölni a módosított oldalakat a lemezre, a tranzakció rögzítése nem igényel módosítást. Ennek eredményeként, olyan kiszolgáltatott forgatókönyvek esetén, amikor a RAM-igény magas, a lemezes műveletek mennyisége akár 2-szer is csökkenthető.
- Megvalósult a már régóta nem használt árnyékmásolatok eltávolítása azokon az oldalon, amelyek hosszú értékekkel rendelkeznek, amelyek a legtöbb esetben csak egyszer módosulnak egy tranzakció során. Ennek eredményeként csökken a lemezhasználat és növekszik a teljesítmény a nagyon nagy tranzakciókkal rendelkező forgatókönyvekben.
- Megvalósult egy "okos" lapmegosztási mód a kulcsok beszúrásakor. Most már a rendezett sorozatok beszúrásakor automatikusan biztosított a lapok teljes kitöltése, míg egyéb esetekben optimálisabb faegyensúlyozás. Ennek eredményeként átlagosan a DB oldalak optimálisabban töltődnek ki, és a B-fa egyensúlyozottabbá válik, ami pozitívan hat a teljesítményre.
- Hozzáadták az oldalműveletek statisztikáit, így pontosan fel lehet mérni az adatbázis módosító műveleteinek költségeit.
- Több mint tíz hibát és véletlenszerűséget megszüntettek, többek között: megoldották a MinGW által történő fordítás során felmerülő problémákat, az `std::filesystem::path` használatát iOS <= 13.0-n, a régi Windows verziókra való célzott fordítást stb.
- Összesen több mint 200 változtatást végeztek el 66 fájlban, körülbelül 6500 soros új kódot adtak hozzá, és körülbelül 4500 sort távolítottak el.
Kiemelendő, hogy a Turbo-Geth (Go-Ethereum turbo fork) projekt választotta a libmdbx-et mint új tárolási hátteret, és köszönetet szeretnénk mondani a projekt csapatának (különösen Alekszandr Sarov, Artem Vorotnikov és Alekszandr Akhunov) a szélsőséges használati forgatókönyvek tesztelésében nyújtott nagy segítségért. Különösen így fedezték fel és szüntették meg azt a hibát, amely a korai olvasás/caching kezelésével kapcsolatos, és amely teljesítményromláshoz vezetett bonyolult reprodukálható forgatókönyvekben nagy adatbázisokkal.
Forrás: opennet.ru
