Dopo cinque anni di sviluppo, è stata pubblicata la seconda release candidate di libmdbx 1.0

È disponibile per il test, il secondo candidato per il rilascio della biblioteca libmdbx 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 è distribuito sotto la licenza OpenLDAP Public License.

La biblioteca MDBX è un ramo significativamente rielaborato di LMDB — un SGBD incorporato transazionale di tipo «chiave-valore» basato su albero B+ senza journalizzazione preventiva, 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 ACID 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 della descrizione API.
  • 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 bloccaggi OFD 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. MithrilDB, 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 OSI licenza Apache 2.0, anziché OpenLDAP Public License).
  • 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 B+ tree 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

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