A fost lansată versiunea bibliotecii libmdbx 0.13.7 (MDBX) cu implementarea unei baze de date incorporate de înaltă performanță și compactă, de tip cheie-valoare. Codul libmdbx este distribuit sub licența Apache 2.0. Sunt acceptate toate sistemele de operare și arhitecturile actuale, inclusiv Elbrus 2000 din Rusia. Libmdbx oferă o API dezvoltată pentru C++, precum și biblioteci suportate de entuziaști pentru limbajele Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala. Dintre proiectele care utilizează libmdbx, se pot menționa Isar, Erigon și Reth, precum și dezvoltările companiilor StarkWare și Positive Technologies.
Din punct de vedere istoric, libmdbx este o refacere profundă a sistemului de gestionare a bazelor de date LMDB și depășește predecesorul său în ceea ce privește fiabilitatea, funcționalitatea și performanța. Comparativ cu LMDB, libmdbx acordă o mare atenție calității codului, funcționării stabile a API-ului, testării și verificărilor automate. Este inclusă o utilitară de verificare a integrității structurii bazei de date, cu unele capacități de recuperare. Din punct de vedere tehnologic, libmdbx oferă ACID, serializare strictă a modificărilor și citire neblocat cu scalare liniară pe nuclee CPU. Suportă autoîngrijirea și gestionarea automată a dimensiunii bazei de date, estimarea volumului interogărilor pe intervale (range query estimation).
Modificări principale:
- A fost corectată o eroare critică în funcționalitatea mdbx_env_resurrect_after_fork() când se utilizează semafoare SysV. Eroarea se manifesta doar după generarea unui proces fiu prin fork() pe fondul unei tranzacții de scriere în curs, ceea ce ducea la funcționarea greșită a semafoarelor și ulterior la diverse erori, inclusiv la deteriorarea bazei de date. Problema a existat începând de la introducerea mdbx_env_resurrect_after_fork() și afecta macOS, precum și platformele POSIX când era compilat cu opțiunea MDBX_LOCKING=5.
- A fost rezolvată o problemă în API-ul de copiere a bazei de date, care se manifesta pe sisteme POSIX diferite de Linux (în principal pe macOS), dar și în unele cazuri când fișierul țintă era situat pe un sistem de fișiere nelocal. Problema ducea la returnarea erorii EWOULDBLOCK/EAGAIN, cauzată de un conflict de blocări fcntl(F_SETLK) și flock() în nucleul OS. A fost revizuită gestionarea erorilor capturării blocărilor de fișiere în API-ul de copiere pe sistemele POSIX.
- A fost remediată o eroare care cauza returnarea neașteptată MDBX_BAD_DBI la pornirea simultană a mai multor tranzacții în cadrul aceluiași proces după deschiderea bazei de date.
- A fost remediată o eroare care cauza returnarea neașteptată MDBX_DBS_FULL la redeschiderea unor tabele deja deschise și atingerea limitei de descriptorii DBI deschiși.
- A fost corectată o eroare de compilare pentru platforma Android atunci când `_FILE_OFFSET_BITS` este definit explicit.
- A fost corectată o eroare în utilizarea ENOMEM în loc de MDBX_ENOMEM, ceea ce putea duce la defectarea compilării pe platforme non-POSIX/Windows, în funcție de configurație și/sau versiunea SDK.
- Au fost corectate sau eliminate mai multe verificări assert greșite, care provocau căderi ale compilărilor de debug în situații specifice. În principal în codul funcțiilor txn_end(), txn_lock() și txn_unlock() atât pe Windows, cât și pe POSIX.
- Au fost remediate avertismentele neesențiale MSVC. Au fost dezactivate avertizările C5286 și C5287.
- A fost îmbunătățită logica refuzului de a utiliza blocările OFD pe platformele POSIX. Acum, pe lângă EINVAL, sunt luate în considerare coduri suplimentare de eroare (ENOSYS, ENOIMPL, ENOTSUP, ENOSUPP, EOPNOTSUPP), ceea ce va permite bibliotecii compilate să funcționeze în anumite cazuri în care nucleul/contenitorul/emulatorul actual nu acceptă apelurile sistemului necesare.
- Framework-ul de testare a fost extins cu suport pentru opțiunea „—numa ” pentru a lega testul stocastic de un nod NUMA. În scriptul battery/tmux a fost adăugată o distribuție explicită pe noduri NUMA, ceea ce a crescut semnificativ eficiența în testarea pe mașini NUMA.
- În scriptul stocastic a fost implementată o ordine aleatoare de lansare a testelor individuale.
Sursa: opennet.ro
