Rilascio del DBMS incorporato ad alte prestazioni libmdbx 0.10.4 e libfpta 0.3.9

Le librerie libmdbx 0.10.4 (MDBX) sono state rilasciate con l'implementazione di un database chiave-valore incorporato compatto ad alte prestazioni e la libreria associata libfpta 0.3.9 (FPTA), che implementa una rappresentazione tabellare dei dati con indici secondari e compositi sopra MDBX. Entrambe le librerie sono distribuite con licenze approvate OSI. Sono supportati tutti i sistemi operativi e le architetture attuali, compreso il russo Elbrus 2000.

Storicamente, libmdbx è una profonda rielaborazione del DBMS LMDB ed è superiore al suo antenato 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. Viene fornita un'utilità per verificare l'integrità della struttura del database con alcune funzionalità di ripristino.

Dal punto di vista tecnologico, libmdbx offre ACID, una forte serializzazione delle modifiche 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 delle query di intervallo. Dal 2016 i progetti sono stati finanziati da Positive Technologies e dal 2017 sono stati utilizzati nei suoi prodotti.

libmdbx offre un'API C++, nonché collegamenti linguistici supportati dagli appassionati per Rust, Haskell, Python, NodeJS, Ruby, Go e Nim. Per libfpta, solo la descrizione API è disponibile pubblicamente sotto forma di file di intestazione C/C++.

Principali innovazioni, miglioramenti e correzioni aggiunte rispetto alla notizia precedente del 9 maggio:

  • Abilita build riproducibili.
  • Risolto un bug a causa del quale, in circostanze molto rare, poteva verificarsi un loop/blocco durante il commit di una transazione. Il problema è stato identificato dagli specialisti di Positive Tecnology durante i test interni dei propri prodotti.
  • I test sono stati migliorati e gli scenari di test sono stati ampliati per controllare tutti gli stati non isomorfi raggiungibili dell'albero delle pagine e i contenuti GC all'interno del database.
  • Nell'API C++ è stato corretto un ulteriore "noException", sono stati aggiunti ulteriori sovraccarichi per il metodo "cursor::erase()", all'implementazione dei buffer è stato risparmiato l'uso di "std::string" per garantire l'allineamento (rilevante per CLANG libstdc++).
  • È stata eliminata una regressione nell'algoritmo di dirty page spilling (espulsione selettiva delle pagine del database modificate) che si manifestava con un raro errore imprevisto MDBX_PROBLEM durante la modifica dei dati in transazioni di grandi dimensioni.
  • È stato effettuato un test per fasi con l'aggiunta di una serie di controlli per garantire la stabilità in caso di danneggiamento intenzionale del database.
  • Risolti gli avvisi minori relativi ai problemi di UnDefinitedBehaviorSanitizer e Coverity Scan.
  • Risolto il problema con il controllo del flag interno obsoleto e non più utilizzato "P_DIRTY" nelle pagine nidificate all'interno delle immagini del database create da versioni precedenti della libreria.
  • Negli script CMake è stata migliorata la ricerca dei componenti del compilatore necessari per LTO (ottimizzazione del tempo di collegamento).
  • Il numero massimo di lettori simultanei è stato aumentato a 32767.
  • Prestazioni migliorate quando si utilizza Valgrind e AddressSanitizer.
  • Su Windows, l'uso ricorsivo di SRW-lock quando si lavora in modalità MDBX_NOTLS (senza utilizzare l'archiviazione locale del thread) è stato eliminato, la generazione del bootid è stata corretta se l'ora del sistema è cambiata, il rilevamento WSL1 e WSL2 è stato migliorato e la capacità di è stato aggiunto aprire un database su Plan 9 montato tramite DrvFS.
  • In totale, sono state apportate più di 160 modifiche a 57 file, sono state aggiunte circa 5000 righe e ne sono state eliminate circa 2500.

Vorrei ringraziare in particolare il team del progetto Erigon (ecosistema Ethereum) per la loro assistenza nei test in scenari di utilizzo estremi. È significativo che in cinque mesi dal rilascio di libmdbx v0.10.0, con un volume di database di 1-2 TB in ciascuna installazione Erigon (utilizzata sul 7% dei nodi Ethereum), siano state ricevute solo tre segnalazioni di corruzione del database, tutte che si è verificato per motivi esterni e non per errori software: in due casi la causa sono stati guasti alla RAM, nel terzo un errore nel ripristino dei dati in una specifica configurazione del sottosistema di storage tramite BTRFS.

Fonte: opennet.ru

Aggiungi un commento