Libreria libmdbx è un discendente sostanzialmente rielaborato di LMDB, un database embedded di classe key-value estremamente ad alte prestazioni e compatto.
La versione attuale v0.5 è un rilascio tecnico che segna la conclusione di eventuali modifiche e il passaggio alla fase di test pubblico finale e stabilizzazione, con la successiva formazione della prima versione completa della libreria.
LMDB è un database embedded di classe "key-value" transazionale abbastanza noto basato su albero B+ di journaling predittivo, che consente a una moltitudine di processi multithread di lavorare in modo concorrente ed estremamente efficace con un database localmente condiviso (non di rete). MDBX, a sua volta, è più veloce e affidabile di LMDB, mantenendo tutte le funzionalità chiave del suo predecessore, come ACID e lettura non bloccante con scalabilità lineare tra i core CPU, oltre ad aggiungere alcune novità.
La descrizione delle differenze e dei miglioramenti di libmdbx rispetto a LMDB merita un articolo a parte (si prevede la pubblicazione su "Habr" e "Medium"). Qui è opportuno menzionare le caratteristiche più importanti e significative:
- 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 dei campioni in base agli intervalli (stimazione delle query su intervalli).
- Supporto per chiavi due volte più grandi e dimensione della pagina del DB selezionata dall'utente.
La versione candidata rilasciata di libmdbx è il risultato della decisione (vedi sotto) di separare i progetti MDBX e MithrilDB nell'agosto 2019. In tal modo, è stato deciso di ridurre al minimo (razionale) il debito tecnico e stabilizzare la libreria. In effetti, sono stati realizzati da 2 a 3 volte più progressi rispetto a quanto inizialmente stimato e pianificato.
- Supporto implementato per Mac OS e piattaforme di «secondo livello»: FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. Il supporto per AIX e HP-UX può essere aggiunto se necessario.
- Il codice è stato sanato utilizzando Undefined Behavior Sanitizer e Address Sanitizer, tutte le segnalazioni sono state eliminate durante la compilazione con -Wpedantic, tutte le segnalazioni di Coverity Static Analyzer, ecc.
- Aggiornamento descrizione API.
- 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 continuo di pagine aggiornate/obsolete e informazioni dettagliate sulle transazioni.
- Opzione MDBX_ACCEDE per connettersi a un database già aperto in modalità compatibile.
- L'utilizzo di Blocchi OFD quando disponibili.
- Backup a caldo nel pipe.
- Algoritmo di ordinamento interno ottimizzato e specializzato (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 la corruzione del DB 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 MithrilDB, 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) OSI licenza Apache 2.0, e non OpenLDAP Foundation).
- La separazione aiuta a evitare confusione potenziale, a fornire maggiore certezza e a garantire indipendenza nello sviluppo dei progetti.
MithrilDB, come MDBX, si basa anche su alberi B+ 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 l'hosting del DB su diversi dispositivi eterogenei: HDD, SSD e memoria non volatile.
- strategie ottimali per i dati ‘preziosi’ e ‘poco preziosi’, per dati ‘caldi’, ‘freschi’ 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 sull'integrità dei dati.
- cattura pigra dei dati su disco.
Fonte: linux.org.ru
