Izdanje ugrađenog DBMS-a libmdbx 0.13.7

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

Dodajte komentar