Pubblicazione del database incorporato libmdbx 0.13.7

È stata pubblicata la libreria libmdbx 0.13.7 (MDBX), che implementa un database incorporato chiave-valore, compatto e ad alte prestazioni. Il codice di libmdbx è distribuito con licenza Apache 2.0. Sono supportati tutti i principali sistemi operativi e architetture, così come l'Eльбрус 2000 russo. Libmdbx offre un'API avanzata per C++, oltre a binding per linguaggi come Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala, supportati da appassionati. Tra i progetti che utilizzano libmdbx si possono citare Isar, Erigon e Reth, oltre ai progetti delle aziende StarkWare e Positive Technologies.

Storicamente, libmdbx è un'evoluzione profonda del database LMDB e supera il suo predecessore in termini di affidabilità, funzionalità e prestazioni. Rispetto a LMDB, libmdbx pone una grande attenzione alla qualità del codice, alla stabilità dell'API, ai test e ai controlli automatici. È fornito uno strumento per il controllo dell'integrità della struttura del database con alcune funzionalità di ripristino. Tecnologicamente, libmdbx offre ACID, un'accurata serializzazione delle modifiche e letture non bloccanti con scalabilità lineare sui core della CPU. Supporta la compressione automatica, la gestione automatica delle dimensioni del database e la stima del volume delle query per intervallo.

Variazioni principali:

  • È stato risolto un errore critico nella funzionalità mdbx_env_resurrect_after_fork() durante l'uso di semafori SysV. L'errore si manifestava solo dopo la creazione di un processo figlio tramite fork() durante una transazione di scrittura in corso, causando un malfunzionamento dei semafori e, di conseguenza, vari errori, anche fino alla corruzione del database. Il problema esisteva sin dall'introduzione di mdbx_env_resurrect_after_fork() e riguardava macOS, così come le piattaforme POSIX compilate con l'opzione MDBX_LOCKING=5.
  • È stato risolto un problema nell'API di copia del database, che si manifestava su sistemi POSIX diversi da Linux (principalmente su macOS), e in alcuni casi quando il file di destinazione si trovava su un file system non locale. Il problema portava al ritorno dell'errore EWOULDBLOCK/EAGAIN, dovuto a una disguido/conflitto di lock fcntl(F_SETLK) e flock() nel kernel del sistema operativo. È stata rielaborata la gestione degli errori per l'acquisizione dei blocchi di file nell'API di copia sui sistemi POSIX.
  • Risolto un errore che provocava un ritorno imprevisto di MDBX_BAD_DBI durante l'avvio simultaneo di più transazioni all'interno di un singolo processo dopo l'apertura del database.
  • Risolto un errore che causava un ritorno imprevisto di MDBX_DBS_FULL durante la riapertura di tabelle già aperte e raggiunto il limite di descrittori DBI aperti.
  • Corretto un errore di compilazione per la piattaforma Android con la definizione esplicita di _FILE_OFFSET_BITS.
  • Corretto un errore nell'uso di ENOMEM invece di MDBX_ENOMEM, che poteva causare la rottura della compilazione su piattaforme non-POSIX/Windows, a seconda della configurazione e/o della versione SDK.
  • Modificati o rimossi diversi assert errati che causavano crash delle build di debug in situazioni specifiche, principalmente nel codice delle funzioni txn_end(), txn_lock() e txn_unlock(), sia su Windows che su POSIX.
  • Eliminati avvisi inessenziali di MSVC. Disabilitati gli avvisi C5286 e C5287.
  • Rivista la logica per rinunciare all'uso di blocchi OFD sulle piattaforme POSIX. Ora oltre a EINVAL vengono considerati ulteriori codici di errore (ENOSYS, ENOIMPL, ENOTSUP, ENOSUPP, EOPNOTSUPP), consentendo alla libreria compilata di funzionare in alcuni casi in cui il kernel/contenitore/emulatore attuale non supporta le chiamate di sistema richieste.
  • Nel framework di test aggiunta la supporto per l'opzione «—numa » per legare il test stocastico a un nodo NUMA. Nello script battery/tmux aggiunta una distribuzione esplicita tra i nodi NUMA, aumentando notevolmente l'efficienza durante i test su macchine NUMA.
  • Nello script stocastico implementato un ordine casuale per l'esecuzione dei singoli test.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster