A libreria libmdbx 0.13.7 (MDBX) hè stata liberata, implementendu una basa di dati di chjave-valore integrata, compacta, d'alta prestazione. U codice libmdbx hè distribuitu sottu a Licenza Apache 2.0. Tutti i sistemi operativi è l'architetture attuali sò supportati, è ancu u Russian Elbrus 2000. Per libmdbx, una API avanzata per C ++ hè offruta, è ancu ligami supportati da entusiasti à e lingue Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala. Prughjetti chì utilizanu libmdbx include Isar, Erigon è Reth, è ancu i sviluppi di StarkWare è Tecnulugie Positive.
Stòricamente, libmdbx hè una rielaborazione profonda di u DBMS LMDB è supera u so antenatu in affidabilità, set di funzioni è prestazioni. Comparatu à LMDB, libmdbx mette assai enfasi in a qualità di codice, a stabilità di l'API, a prova è i cuntrolli automatizati. Una utilità per verificà l'integrità di a struttura di basa di dati cù alcune capacità di ricuperazione hè furnita. Tecnulugichi, libmdbx offre ACID, serializazione forte di cambiamenti, è letture senza bloccu cù scala lineale in i core di CPU. L'auto-compactazione, a gestione automatica di a dimensione di a basa di dati è a stima di e dumande di intervallu sò supportati.
I cambiamenti principali:
- Un bug criticu in a funziunalità mdbx_env_resurrect_after_fork() quandu si utilizanu semafori SysV hè statu currettu. L'errore si hè manifestatu solu dopu avè generatu un prucessu figliolu via fork() mentre una transazzione di scrittura era in esecuzione, purtendu à semafori incorretti è dopu à una varietà d'errori, cumprese a corruzzione di a basa di dati. U prublema esiste dapoi l'introduzione di mdbx_env_resurrect_after_fork() è hà affettatu macOS, è ancu e piattaforme POSIX quandu si custruisce cù l'opzione MDBX_LOCKING=5.
- Risoltu un prublema in l'API di copia di DB chì si verificava nantu à sistemi diversi da Linux Sistemi POSIX (principalmente in macOS), è ancu in certi casi quandu u schedariu di destinazione era situatu annantu à un sistema di schedari micca lucale. U prublema hà purtatu à u ritornu di l'errore EWOULDBLOCK/EAGAIN, chì era causatu da un difettu o un cunflittu trà i blocchi fcntl(F_SETLK) è flock() in u kernel di u sistema operativu. A gestione di l'errori d'acquisizione di blocchi di schedari in l'API di copia annantu à i sistemi POSIX hè stata rielaborata.
- Hà currettu un bug chì causava un ritornu inaspettatu di MDBX_BAD_DBI quandu si cuminciavanu parechje transazzioni simultaneamente in un solu prucessu dopu l'apertura di una basa di dati.
- Risoltu un bug chì causava u ritornu inaspettatu di MDBX_DBS_FULL quandu si riaprianu e tabelle digià aperte è u limite di handle DBI apertu era digià statu righjuntu.
- Hà currettu un errore di compilazione per a piattaforma Android quandu _FILE_OFFSET_BITS hè definitu esplicitamente.
- Hà currettu un bug cù l'usu di ENOMEM invece di MDBX_ENOMEM. Questu puderia rompe a compilazione nantu à e piattaforme non-POSIX.Windows piattaforme, secondu a cunfigurazione è/o a versione di l'SDK.
- Hà currettu o eliminatu parechje asserzioni incorrette chì causavanu u crash di e compilazioni di debug in situazioni specifiche. Quessi si truvavanu principalmente in e funzioni txn_end(), txn_lock() è txn_unlock(), cum'è mostratu in Windows, è nantu à POSIX.
- Avvisi MSVC minori curretti. Avvisi C5286 è C5287 disattivati.
- A logica per rifiutà l'usu di serrature OFD nantu à e piattaforme POSIX hè stata migliurata. Avà, in più di EINVAL, si tenenu contu di codici d'errore supplementari (ENOSYS, ENOIMPL, ENOTSUP, ENOSUPP, EOPNOTSUPP), chì permetteranu à a biblioteca compilata di funziunà in certi casi quandu u kernel/container/emulatore attuale ùn supporta micca e chjame di sistema richieste.
- U quadru di prova avà supporta l'opzione --numa. » per ligà u test stocasticu à un nodu NUMA. A distribuzione esplicita trà i nodi NUMA hè stata aghjunta à u script battery/tmux, ciò chì hà aumentatu significativamente l'efficienza durante i testi nantu à e macchine NUMA.
- U script stocasticu implementa un ordine aleatoriu in u quale i testi individuali sò eseguiti.
Source: opennet.ru
