per il test, il secondo candidato per il rilascio della biblioteca con l'implementazione di un database embedded, compatto e ad alte prestazioni di tipo chiave-valore. La versione attuale (0.5) è un rilascio tecnico, segna la conclusione di eventuali lavori di sviluppo e il passaggio alla fase di test finale pubblico e stabilizzazione, con la successiva creazione del primo rilascio completo della biblioteca. Codice libmdbx sotto la licenza OpenLDAP Public License.
La biblioteca MDBX è un ramo significativamente rielaborato di — un SGBD incorporato transazionale di tipo «chiave-valore» basato su senza , che consente ai processi multithread di lavorare in modo competitivo ed efficiente con un database condiviso localmente (non di rete). A sua volta, MDBX è più veloce e affidabile di LMDB, mantenendo tutte le capacità chiave del suo antenato, come e lettura non bloccante con scaling lineare rispetto ai core CPU.
Le differenze più importanti tra MDBX e LMDB:
- Si presta significativamente maggiore attenzione alla qualità del codice, al testing e alle verifiche automatiche.
- Maggiore controllo durante l'esecuzione, dalla verifica dei parametri fino all'audit interno delle strutture del database.
- Auto-compattazione e gestione automatica della dimensione del database.
- Formato unificato del database per build a 32 bit e 64 bit.
- Stima del volume delle selezioni per intervalli (range query estimation).
- Supporto per chiavi di dimensioni doppie e dimensione della pagina del database selezionabile dall'utente.
Il candidato rilasciato di libmdbx è il risultato della decisione presa nell'agosto 2019 di separare i progetti MDBX e MithrilDB. In libmdbx è stata presa la decisione di eliminare (ragionevolmente) il massimo debito tecnico e stabilizzare la biblioteca. Di fatto, nel designato è stato fatto 2-3 volte di più rispetto a quanto stimato e pianificato inizialmente:
- È stato implementato il supporto per macOS e le piattaforme di "secondo livello": FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. Il supporto per AIX e HP-UX potrà essere aggiunto se necessario.
- È stata effettuata la sanificazione del codice utilizzando Undefined Behavior Sanitizer e Address Sanitizer, eliminando tutti gli avvisi durante la compilazione con "-Wpedantic", tutti gli avvisi dell'analizzatore statico Coverity, ecc.
- Aggiornamento .
- Fusione (amalgama) del codice sorgente per facilitare l'incorporamento.
- Supporto per CMake.
- Supporto per transazioni annidate.
- Utilizzo di bootid per determinare il fatto del riavvio del sistema operativo (arresto anomalo del database).
- Conteggio continuo delle pagine aggiornate/vecchie e informazioni estese sulle transazioni.
- Opzione MDBX_ACCEDE per connettersi a un database già aperto in modalità compatibile.
- Utilizzo se disponibili.
- Backup caldo in 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()".)
- Lunghezza massima della chiave aumentata.
- Controllo automatico del read ahead (strategia di caching dei file del database in memoria).
- Compattazione automatica più aggressiva e veloce.
- Strategia di merging delle pagine B+ tree più ottimale.
- Controllo dei file system non locali (NFS, Samba, ecc.) per prevenire danni al database in caso di uso errato.
- Espanso il set di test.
Lo sviluppo della «prossima» versione di libmdbx continuerà nell'ambito di un progetto separato. , mentre la direzione di sviluppo della «versione attuale» di MDBX è focalizzata sulla congelazione del set di funzionalità e sulla stabilizzazione. Questa decisione è stata presa per tre motivi:
- Incompatibilità totale: per implementare tutte le funzionalità programmate in MithrilDB è necessario un formato di file del database diverso (incompatibile) e un'API diversa (incompatibile).
- Nuovo codice sorgente: per il codice sorgente di MithrilDB è garantita l'indipendenza di licenza da LMDB, e il progetto stesso è previsto per la pubblicazione con un'altra licenza (approvata da licenza Apache 2.0, anziché ).
- La separazione consente di evitare confusione potenziale, di portare maggiore chiarezza e di garantire l'indipendenza nel percorso di sviluppo dei progetti.
MithrilDB, come MDBX, si basa anch'esso su e presenterà anche un'eccezionale alta prestazione, eliminando al contempo una serie di difetti fondamentali di MDBX e LMDB. In particolare, sarà risolto il problema delle «letture lunghe», manifestandosi come un «gonfiore» del database a causa dell'interferenza di transazioni di lettura lunghe con la raccolta di spazzatura. Tra le nuove funzionalità di MithrilDB si segnala:
- Supporto per la distribuzione del database su più supporti eterogenei: HDD, SSD e memoria non volatile.
- Strategie ottimali per dati «preziosi» e «poco preziosi», per dati «caldi», «tiepidi» e «freddi».
- Utilizzo dell'albero di Merkle per il controllo dell'integrità del database.
- Utilizzo opzionale di WAL e una produttività significativamente superiore in scenari ad alta intensità di scrittura con garanzie di integrità dei dati.
- Fissazione pigra dei dati su disco.
Fonte: opennet.ru
