Rilascio del DBMS libmdbx 0.11.7. Sposta lo sviluppo su GitFlic dopo il blocco su GitHub

La libreria libmdbx 0.11.7 (MDBX) è stata rilasciata con l'implementazione di un database chiave-valore incorporato compatto ad alte prestazioni. Il codice libmdbx è distribuito sotto OpenLDAP Public License. Sono supportati tutti i sistemi operativi e le architetture attuali, così come il russo Elbrus 2000.

Il rilascio è degno di nota per la migrazione del progetto al servizio GitFlic dopo che l'amministrazione GitHub ha rimosso libmdbx insieme a una serie di altri progetti il ​​15 aprile 2022 senza alcun avviso o spiegazione, bloccando contemporaneamente l'accesso a molti sviluppatori associati a società che sono cadute sotto le sanzioni statunitensi. Dal punto di vista dell'utente, tutte le pagine, repository e fork del progetto si sono improvvisamente trasformate in una pagina "404", senza possibilità di alcuna comunicazione e scoperta dei motivi.

Sfortunatamente, quasi tutti i numeri sono andati perduti, in cui c'erano molte domande con risposte dettagliate, oltre a molte discussioni. La perdita di queste informazioni è l'unico danno oggettivo che l'amministrazione di GitHub è riuscita a infliggere al progetto. Copie parziali delle discussioni restano disponibili nell'archivio archive.org.

La perdita degli script e dell'infrastruttura CI incorporati (disponibili gratuitamente per i progetti OpenSource) ci ha costretto a fare revisione, unificazione ed eliminazione di un piccolo debito tecnico. Ora CI è stato ripristinato quasi nella stessa misura, con l'eccezione delle build e delle esecuzioni di test per tutte le varianti BSD e Solaris. Significativamente, dopo le azioni di GitHub, non sono stati ricevuti chiarimenti o notifiche, a parte un promemoria della necessità di pagamento e tentativi di cancellare denaro.

Dopo le ultime notizie sul rilascio di libmdbx v0.11.3, oltre al ripristino dalle azioni GitHub, vale la pena notare i seguenti miglioramenti e correzioni:

  • Aggiunta una soluzione alternativa per un effetto/difetto di incoerenza rilevato nella pagina combinata e nella cache del buffer nel kernel di Linux. Sui sistemi in cui le cache della pagina e del buffer sono veramente unificate, non ha senso che il kernel sprechi memoria su due copie di dati quando scrive su un file già mappato in memoria. Pertanto, i dati scritti diventano visibili tramite la mappatura della memoria prima del completamento della chiamata di sistema write(), anche se i dati non sono ancora stati scritti su disco.

    In totale, un altro comportamento non è razionale, perché con un'unione ritardata, devi ancora afferrare i blocchi per gli elenchi di pagine, copiare i dati o regolare PTE. Pertanto, la regola non detta della coerenza è in vigore dal 1989, quando la cache buffer unificata è apparsa in SRV4. Pertanto, trovare strani errori negli scenari di produzione libmdbx occupati ha richiesto molto lavoro. Prima riproducendo il problema, poi verificando le ipotesi e controllando i miglioramenti.

    Ora possiamo affermare con sicurezza che il problema è stato identificato, localizzato ed eliminato in modo affidabile, nonostante la complessità e la specificità dello scenario di riproduzione. Inoltre, il funzionamento del meccanismo di bypass è stato confermato da uno degli sviluppatori di Erigon (Ethereum), nel suo caso, sulla build di debug, la protezione si è attivata come regressione a causa di un ulteriore controllo di asserzione.

    Va notato che nel contesto dell'uso diffuso di libmdbx nei progetti di lavoro, è fondamentalmente più importante garantire un funzionamento affidabile, piuttosto che scoprire "si tratta di un bug o di una funzionalità" e se si può fare affidamento su tale coerenza, soprattutto non trovare le cause dell'incoerenza all'interno del kernel Linux. Pertanto, qui stiamo parlando di risolvere un problema che potrebbe interessare gli utenti.

  • È stata corretta una regressione dell'errore EXDEV (collegamento tra dispositivi) durante la copia a caldo di un database senza compattazione in un altro file system, sia tramite l'API che utilizzando l'utilità mdbx_copy.
  • Kris Zyp ha implementato il supporto per libmdbx in Deno. Kai Wetlesen ha impacchettato gli RPM per Fedora. David Bouyssié ha implementato i binding per Scala.
  • Corretta l'elaborazione del valore impostato dall'opzione MDBX_opt_rp_augment_limit durante l'elaborazione di enormi transazioni in database di grandi dimensioni. In precedenza, a causa di un bug, potevano essere eseguite azioni non necessarie, che a volte influivano sulle prestazioni nelle implementazioni di Ethereum (Erigon/Akula/Silkworm) e nei progetti Binance Chain.
  • Sono stati corretti molti bug, inclusi quelli nell'API C++. Risolti molti problemi di build in configurazioni rare ed esotiche. Un elenco completo di tutti i miglioramenti significativi è disponibile nel ChangeLog.
  • Sono state apportate un totale di 185 modifiche a 89 file, sono state aggiunte ≈3300 righe, ≈4100 sono state eliminate. Rimosso più principalmente a causa dell'eliminazione di file tecnologici già inutili associati a GitHub e servizi dipendenti.

Storicamente, libmdbx è una profonda riprogettazione del DBMS LMDB e supera il suo progenitore in termini di affidabilità, set di funzionalità e prestazioni. Rispetto a LMDB, libmdbx pone molta enfasi sulla qualità del codice, sulla stabilità dell'API, sui test e sui controlli automatizzati. Con alcune opzioni di recupero viene fornita un'utility per il controllo dell'integrità della struttura del database.

Tecnologicamente, libmdbx offre ACID, serializzazione delle modifiche rigorose e letture non bloccanti con ridimensionamento lineare tra i core della CPU. Sono supportate la compattazione automatica, la gestione automatica delle dimensioni del database e la stima dell'intervallo di query. Dal 2016, il progetto è stato finanziato da Positive Technologies ed è stato utilizzato nei suoi prodotti dal 2017.

libmdbx offre un'API C++ sviluppata, nonché collegamenti supportati dagli appassionati a Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.

Fonte: opennet.ru

Aggiungi un commento