Rilascio del database embedded ad alte prestazioni libmdbx 0.10

Dopo tre mesi di sviluppo, è stata rilasciata la libreria libmdbx 0.10.0 (MDBX) con l'implementazione di un database embedded compatto e ad alte prestazioni di tipo chiave-valore. Il codice di libmdbx è distribuito sotto la licenza OpenLDAP Public License. libmdbx è una revisione profonda del DBMS LMDB e, secondo quanto dichiarato dagli sviluppatori, supera il suo predecessore in termini di affidabilità, funzionalità e prestazioni. Si afferma che libmdbx è fino al 20% più veloce di LMDB negli scenari CRUD e fino al 30% più veloce se durante la compilazione di libmdbx si disabilita il controllo interno a un livello paragonabile a quello di LMDB.

Libmdbx offre ACID, una rigorosa serializzazione delle modifiche e una lettura non bloccante con scalabilità lineare secondo i core CPU. In libmdbx si presta particolare attenzione alla qualità del codice, alla stabilità dell'API, ai test e alle verifiche automatiche. Sono supportate l'autocompattazione, la gestione automatica delle dimensioni del DB, un formato unificato per build a 32 e 64 bit e la stima del volume delle query per intervallo (range query estimation). È fornuto uno strumento per la verifica dell'integrità della struttura del DB con alcune funzionalità di ripristino. Dal 2016 il progetto è finanziato da Positive Technologies e, dal 2017, è utilizzato nei suoi prodotti, mentre le sanzioni imposte dal governo statunitense contro Positive Technologies non hanno alcun impatto significativo.

Le principali novità, aggiornamenti e correzioni aggiunti dopo l'ultima release:

  • Sono disponibili il binding per Ruby di Mahlon E. Smith e una versione di prova dei binding per Python di Noel Kuntze, aggiornati i binding per GoLang di Alexey Sharov.
  • Per la modalità «MDBX_WRITEMAP», quando i dati del database vengono modificati direttamente nella RAM, è stato implementato un «spill» trasparente su disco delle pagine modificate del database. Ora, al termine di ogni operazione, tali pagine sono pronte per essere scritte su disco, e il kernel del sistema operativo può autonomamente scaricare le pagine modificate su disco, senza necessità di modificarle per il commit della transazione. Di conseguenza, in scenari ad alto carico con scarsità di RAM, il volume delle operazioni su disco può ridursi fino al 50%.
  • È stato implementato l'eviction delle copie shadow di pagine modificate che non vengono utilizzate da tempo, privilegiando l'eviction di pagine con valori grandi/lunghi, che nella stragrande maggioranza degli scenari vengono modificate solo una volta per transazione. Questo riduce il volume del traffico con il disco e aumenta le prestazioni in scenari con transazioni molto grandi.
  • È stata implementata una modalità "intelligente" per la suddivisione delle pagine durante l'inserimento delle chiavi. Ora, quando vengono inserite sequenze ordinate, si garantisce automaticamente un riempimento completo delle pagine e, in altri casi, un bilanciamento più ottimale dell'albero. Di conseguenza, mediamente, le pagine del database vengono riempite in modo più ottimale e l'albero B risulta più bilanciato, con effetti positivi sulle prestazioni.
  • È stata aggiunta la statistica delle operazioni sulle pagine, consentendo una valutazione precisa dei costi delle operazioni di modifica del database.
  • Sono stati risolti oltre dieci problemi e bug, tra cui: risoluzione di problemi relativi alla compilazione con MinGW, utilizzo di `std::filesystem::path` su iOS <= 13.0, compilazione per versioni precedenti di Windows, e altro ancora.
  • In totale, sono state apportate oltre 200 modifiche in 66 file, aggiungendo circa 6500 righe e rimuovendone circa 4500.

È importante evidenziare la scelta del progetto Turbo-Geth (fork turbo di Go-Ethereum) di utilizzare libmdbx come nuovo backend di archiviazione, e ringraziare il team del progetto (in particolare Aleksey Sharov, Artem Vorotnikov e Aleksey Akhunov) per il grande aiuto nei test in scenari d'uso estremi. In particolare, grazie a questo è stata identificata e risolta una falla nella gestione della lettura anticipata/caching, che portava a una degradazione delle prestazioni in scenari complessi con grandi database.

Fonte: opennet.ru

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