per la fase di test del secondo candidato nei rilasci della libreria con l'implementazione di un database embedded ad alte prestazioni e compatto basato su chiave-valore. La versione attuale (0.5) rappresenta un rilascio tecnico, segnando la conclusione di eventuali modifiche e il passaggio alla fase di test finale pubblico e stabilizzazione, con la successiva formazione del primo rilascio completo della libreria. Il codice libmdbx è sotto la licenza OpenLDAP Public License.
La libreria MDBX è un ramo significativamente rivisitato di — di un DBMS incorporato transazionale di tipo «chiave-valore» basato su di , che consente ai processi multithread di operare in modo competitivo ed efficiente con un database condiviso localmente (non di rete). A sua volta, MDBX è più veloce e più affidabile di LMDB, mantenendo tutte le chiavi possibilità del suo antenato, come e la lettura non bloccante con scalabilità lineare attraverso i core CPU.
Le principali differenze di MDBX rispetto a LMDB:
- Una maggiore attenzione è dedicata alla qualità del codice, ai test e ai controlli automatici.
- Controllo significativamente maggiore durante l'esecuzione, dalla verifica dei parametri, fino all'audit interno delle strutture del database.
- Auto-compattamento e gestione automatica della dimensione del DB.
- Formato unificato del DB per le versioni a 32 e 64 bit.
- Valutazione del volume delle selezioni per intervallo (range query estimation).
- Supporto per chiavi due volte più grandi e dimensione della pagina del DB selezionata dall'utente.
Il candidato rilasciato per libmdbx è il risultato di una decisione presa nell'agosto 2019 di separare i progetti MDBX e MithrilDB. È stata presa la decisione di ridurre il massimo (ragionevolmente) il debito tecnico e stabilizzare la libreria. In effetti, nel suddetto ambito è stato realizzato 2-3 volte di più rispetto a quanto inizialmente stimato e pianificato:
- È stato implementato il supporto per macOS e piattaforme di "secondo livello": FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. Il supporto per AIX e HP-UX può essere aggiunto se necessario.
- È stata effettuata la sanificazione del codice utilizzando Undefined Behavior Sanitizer e Address Sanitizer, risolti tutti gli avvisi durante la compilazione con "-Wpedantic", e tutti gli avvisi di Coverity Static Analyzer, ecc.
- Aggiornamento .
- Amalgamazione del codice sorgente per facilitare l'integrazione.
- Supporto per CMake.
- Supporto per transazioni annidate.
- Utilizzo del bootid per determinare il fatto di un riavvio del sistema operativo (arresto anomalo del DB).
- Conteggio completo delle pagine aggiornate/vecchie e informazioni dettagliate sulle transazioni.
- Opzione MDBX_ACCEDE per connettersi a un database già aperto in modalità compatibile.
- L'utilizzo di quando disponibili.
- Backup a caldo nel pipe.
- Algoritmo di ordinamento interno specializzato e ottimizzato (fino a 2-3 volte più veloce di "qsort()" e fino al 30% più veloce di "std::sort().")
- Aumentata la lunghezza massima della chiave.
- Gestione automatica del read ahead (strategia di caching del file DB in memoria).
- Compattazione automatica più aggressiva e veloce.
- Strategia di fusione delle pagine B+ al massimo dell'ottimizzazione.
- Controllo dei file system non locali (NFS, Samba, ecc.) per prevenire il danneggiamento del database in caso di utilizzo improprio.
- Espanso il set di test.
Lo sviluppo della 'prossima' versione di libmdbx sarà proseguito all'interno di un progetto separato , mentre la direzione dello sviluppo della 'versione attuale' di MDBX è orientata a congelare il set di funzionalità e stabilizzarlo. Questa decisione è stata presa per tre motivi:
- Incompatibilità totale: per implementare tutte le funzionalità pianificate di MithrilDB è necessario un altro formato di file DB (incompatibile) e un'altra API (incompatibile).
- Nuovo codice sorgente: Il codice sorgente di MithrilDB garantirà l'indipendenza licenziale da LMDB e il progetto sarà pubblicato con un'altra licenza (approvata) con licenza Apache 2.0, invece di ).
- La separazione consente di evitare possibili confusioni, di apportare maggiore certezza e di garantire l'indipendenza nello sviluppo dei progetti.
MithrilDB, come MDBX, si basa anche su e avrà prestazioni estremamente elevate, eliminando al contempo alcuni difetti fondamentali di MDBX e LMDB. In particolare, sarà risolta la questione delle «letture lunghe», che si manifesta come «espandimento» del DB dovuto al fatto che la raccolta dei rifiuti è bloccata da transazioni di lettura lunghe. Tra le nuove funzionalità di MithrilDB, si segnala:
- Supporto per la gestione del database su diversi tipi di supporti: HDD, SSD e memoria non volatile.
- Strategie ottimali per dati "preziosi" e "poco preziosi", per dati "caldi", "tiepidi" e "freddi".
- Utilizzo degli Merkle tree per il controllo dell'integrità del database.
- Utilizzo opzionale di WAL e prestazioni significativamente più elevate in scenari con scritture intensive e garanzie di integrità dei dati.
- Registrazione pigra e compensativa dei dati sui dischi.
Fonte: opennet.ru
