Megjelent a libmdbx 0.13.1 (MDBX) könyvtár kiadása, amely egy nagy teljesítményű, kompakt, beágyazott kulcs-érték adatbázis. A libmdbx kódja az Apache 2.0 licenc alatt kerül forgalomba. Támogatottak minden aktuális operációs rendszer és architektúra, valamint az orosz Elbrusz 2000. A libmdbx-hez egy fejlett API érhető el C++ nyelven, valamint a közreműködők által támogatott kötések a Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno és Scala nyelvekhez.
Történelmileg a libmdbx a LMDB adatbázis mélyreható újragondolása, amely megbízhatóságban, képességekben és teljesítményben felülmúlja elődjét. Az 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. Egy adatbázis-struktúra integritásának ellenőrzésére szolgáló segédprogram is rendelkezésre áll, amely bizonyos helyreállítási lehetőségeket is biztosít. Technológiailag a libmdbx ACID, szigorú változás-sorozatolás és blokkolás nélküli olvasás támogatását nyújtja, lineáris skálázódással a CPU magok felett. A program automatikus tömörítése és az adatbázis méretének automatikus kezelése, valamint a tartományok szerinti lekérdezések becslésének lehetősége is biztosított.
Főbb változások:
- A kód licencének módosítása OpenLDAP Public License-ről Apache 2.0-ra.
- A kurzor API-jának bővítése kényelmesebb és nyilvánvalóbb pozicionáló műveletekkel az <, =, > feltételek alapján, mind a kulcsok, mind a kulcs-érték párok esetén. Újdonságként bevezetve a mdbx_cursor_unbind() és mdbx_txn_release_all_cursors() funkciók, amelyek rugalmas kurzor kezelést tesznek lehetővé újrahasználati forgatókönyvekben a költségek csökkentésére. A mdbx_cursor_scan() és mdbx_cursor_scan_from() funkciók a táblák szkennelésére használhatók funkcionális predikátumokkal, csökkentve a kapcsolódó költségeket.
- A kurzorok újragondolása a viselkedés egységesítése, a kód rendezettsége és az elágazások, valamint a gépi műveletek számának csökkentése érdekében.
- A mdbx_chk eszköz funkcionalitásának áthelyezése a könyvtárba mdbx_env_chk() funkció formájában az adatbázis struktúrájának integritásának ellenőrzésére, beleértve az alkalmazás logikáját is.
- MDBX_opt_gc_time_limit opció a szomszédos szabad oldalak keresési idejének rugalmasabb ellenőrzésére a garbage collection (GC) során.
- Jelentős költségcsökkentés a tranzakciók indításakor, nagy számú DBI-handle esetén, a szolgáltató táblák elemeinek késleltetett/lustálkodásos inicializálásának köszönhetően. Beleértve a ritka DBI-handle készletek támogatásához szükséges mechanizmust, amelyet az MDBX_ENABLE_DBI_SPARSE beállítás vezérel, amely alapértelmezés szerint aktív.
- A DBI-handlek megnyitásának költségeinek csökkentése. Beleértve a késleltetett felszabadítás és a zárolások használata nélküli gyors nyitási útvonal támogatási mechanizmusát, amelyet az MDBX_ENABLE_DBI_LOCKFREE beállítás vezérel, amely alapértelmezés szerint aktív.
- A „parkolás” támogatása az olvasó tranzakciók leválasztásával, hogy lehetővé tegye a régi MVCC-képek újrafeldolgozását és megakadályozza a szemétfeldolgozás szüneteltetéséből adódó problémákat. A parkolási és leválasztási mechanizmus egyaránt kiegészíti és könnyebbé teszi a Handle-Slow-Readers visszahívásának alternatíváját. A kényelem érdekében a mdbx_txn_park() és a mdbx_txn_unpark() funkciók további argumentumokkal rendelkeznek, amelyek lehetővé teszik a parkolt tranzakciók automatikus „elbontását” és a leválasztott tranzakciók újraindítását. A mdbx_copy eszközhöz a megfelelő -d és -p opciók is hozzáadódtek.
- A DB nyitott munkakörnyezetének helyreállításának támogatása gyermekfolyamatban a fork ágat/választást követően a mdbx_env_resurrect_after_fork() segítségével.
- A táblák átnevezésének támogatása a mdbx_dbi_rename() és mdbx_dbi_rename2() segítségével. Új funkcióként bevezetésre került a mdbx_enumerate_tables(), amely lehetővé teszi a névvel ellátott felhasználói táblák információinak megszerzését.
- Az MDBX_NOSTICKYTHREADS üzemmód az MDBX_NOTLS helyett, amely megkönnyíti az integrációt a könnyű szálakkal/ágaikkal, valamint a tranzakciók multiplexelését az operációs rendszer szálain.
- Az adatbázis azonosításához UUID került bevezetésre, amely elérhető az MDBX_envinfo struktúra mi_dxbid mezőjében, amelyet a mdbx_env_info_ex() segítségével lehet megszerezni. Lehetővé vált az adatbázis információinak beszerzése anélkül, hogy azt meg kellene nyitni, a mdbx_preopen_snapinfo() segítségével.
- A callback logolási funkciók támogatása a vprintf() funkcionalitás nélkül, ami jelentősen megkönnyíti a logolás használatát más programozási nyelvekkel.
- Az API-hoz hozzáadva a mdbx_txn_copy2pathname() és mdbx_txn_copy2fd() funkciókat.
- A forráskód átszervezése refaktorálással.
- A „tábla” kifejezés használata a „subDb” helyett.
- A MDBX_COALESCE és MDBX_NOTLS opciók elavultnak nyilvánítása. Az MDBX_USE_VALGRIND fordítási opció helyettesítése a közkedvelt ENABLE_MEMCHECK-vel.
Forrás: opennet.ru
