Objavljena je biblioteka libmdbx 0.13.7 (MDBX) koja implementira visokoučinkovitu, kompaktnu, ugrađenu bazu podataka ključ/vrijednost. Libmdbx kod se distribuira pod Apache 2.0 licencom. Podržani su svi trenutni operativni sistemi i arhitekture, kao i ruski Elbrus 2000. Za libmdbx je ponuđen napredni API za C++, kao i entuzijasti podržana vezivanja za jezike Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala. Projekti koji koriste libmdbx uključuju Isar, Erigon i Reth, kao i razvoje od strane StarkWarea i Positive Technologies.
Istorijski gledano, libmdbx je duboka prerada LMDB DBMS-a i nadmašuje svog pretka po pouzdanosti, skupu karakteristika i performansama. U poređenju sa LMDB, libmdbx stavlja veliki naglasak na kvalitet koda, stabilnost API-ja, testiranje i automatizovane provere. Isporučuje se uslužni program za provjeru integriteta strukture baze podataka s nekim mogućnostima oporavka. Tehnološki, libmdbx nudi ACID, snažnu serijalizaciju promjena i neblokirajuće čitanje s linearnim skaliranjem preko CPU jezgara. Podržano je automatsko zbijanje, automatsko upravljanje veličinom baze podataka i procjena upita raspona.
Glavne promjene:
- Ispravljena je kritična greška u funkcionalnosti mdbx_env_resurrect_after_fork() pri korištenju SysV semafora. Greška se pojavljivala tek nakon pokretanja podređenog procesa putem fork() u pozadini tekuće transakcije pisanja, što je dovelo do nepravilnog rada semafora, a zatim i do raznih grešaka, uključujući oštećenje baze podataka. Problem je postojao od pojave mdbx_env_resurrect_after_fork() i uticao je na macOS, kao i POSIX platforme pri izgradnji s opcijom MDBX_LOCKING=5.
- Ispravljen je problem u DB Copy API-ju koji se javljao na POSIX sistemima koji nisu Linux (uglavnom macOS), a u nekim slučajevima i kada se ciljna datoteka nalazila na nelokalnom datotečnom sistemu. Problem je rezultirao vraćanjem greške EWOULDBLOCK/EAGAIN, koju je uzrokovala greška/sukob u fcntl(F_SETLK) i flock() bravama u jezgru operativnog sistema. Prerađeno je rukovanje greškama pri preuzimanju brava datoteka u Copy API-ju na POSIX sistemima.
- Ispravljena je greška koja je uzrokovala neočekivani povratak MDBX_BAD_DBI prilikom istovremenog pokretanja više transakcija unutar jednog procesa nakon otvaranja baze podataka.
- Ispravljena je greška koja je uzrokovala neočekivano vraćanje MDBX_DBS_FULL prilikom ponovnog otvaranja već otvorenih tabela, a ograničenje otvorenih DBI ručki je već bilo dostignuto.
- Ispravljena greška prilikom izgradnje za Android platformu kada je _FILE_OFFSET_BITS eksplicitno definisan.
- Ispravljena je greška s korištenjem ENOMEM umjesto MDBX_ENOMEM. Što je moglo prekinuti izgradnju na platformama koje nisu POSIX/Windows, ovisno o konfiguraciji i/ili verziji SDK-a.
- Ispravljeno je ili uklonjeno nekoliko netačnih tvrdnji koje su uzrokovale pad sistema za otklanjanje grešaka u određenim situacijama, prvenstveno u kodu za txn_end(), txn_lock() i txn_unlock() na Windowsu i POSIX-u.
- Ispravljena manja MSVC upozorenja. Onemogućena upozorenja C5286 i C5287.
- Logika za odbijanje korištenja OFD brava na POSIX platformama je poboljšana. Sada se, pored EINVAL-a, uzimaju u obzir i dodatni kodovi grešaka (ENOSYS, ENOIMPL, ENOTSUP, ENOSUPP, EOPNOTSUPP), što će omogućiti kompajliranoj biblioteci da radi u nekim slučajevima kada trenutni kernel/kontejner/emulator ne podržava potrebne sistemske pozive.
- Testni okvir sada podržava opciju --numa. » za povezivanje stohastičkog testa sa NUMA čvorom. Eksplicitna distribucija po NUMA čvorovima je dodana u skriptu battery/tmux, što je značajno povećalo efikasnost pri testiranju na NUMA mašinama.
- Stohastički skript implementira slučajni redoslijed kojim se pojedinačni testovi izvršavaju.
izvor: opennet.ru
