Secondo candidato per il rilascio di libmdbx v1.0 dopo cinque anni di sviluppo.

La libreria libmdbx è un discendente sostanzialmente rielaborato di LMDB, un database embedded di classe key-value altamente performante e compatto.
La versione attuale v0.5 è un rilascio tecnico che segna il completamento di eventuali modifiche e il passaggio alla fase di test pubblico finale e stabilizzazione, con la successiva creazione del primo rilascio completo della libreria.

LMDB è un sistema di gestione di database (DBMS) embedded transazionale di classe "key-value" piuttosto noto basato su albero B+ senza journalizzazione preventiva, che consente a un insieme di processi multithread di lavorare in modo concorrente e estremamente efficiente con un database locale condiviso (non di rete). A sua volta, MDBX è più veloce e affidabile di LMDB, mantenendo tutte le funzionalità chiave del suo predecessore, come ACID e lettura non bloccante con scalabilità lineare sulle CPU, oltre ad aggiungere diverse novità.

La descrizione delle differenze e dei miglioramenti di libmdbx rispetto a LMDB merita un articolo a parte (è prevista la pubblicazione su "Habr" e "Medium"). Qui è opportuno menzionare le più importanti e significative:

  • 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.
  • Valutazione del volume delle query per intervalli (range query estimation).
  • Supporto per chiavi di dimensioni doppie e dimensione della pagina del database selezionabile dall'utente.

Il rilascio candidato di libmdbx è il risultato di una decisione (vedi sotto) di separare i progetti MDBX e MithrilDB nell'agosto 2019. In questo contesto, è stato deciso di eliminare il massimo tecnico (razionale) e stabilizzare la libreria. Di fatto, nella direzione indicata è stato fatto da 2 a 3 volte di più di quanto stimato e pianificato inizialmente:

  • È stata implementata la supporto per Mac OS e piattaforme di "secondo livello": FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. Il supporto per AIX e HP-UX potrebbe essere aggiunto in caso di necessità.
  • È stata effettuata una bonifica del codice utilizzando Undefined Behavior Sanitizer e Address Sanitizer, eliminando tutti gli avvertimenti durante la compilazione con -Wpedantic, tutti gli avvertimenti dell'analizzatore statico Coverity, ecc.
  • Aggiornamento della descrizione API.
  • Amalgamazione del codice sorgente per facilitare l'integrazione.
  • 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 dettagliate 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 improprio.
  • 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, e non OpenLDAP Foundation).
  • La separazione consente di evitare potenziali confusioni, di apportare maggiore certezza e garantire l'autonomia delle direzioni 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 il posizionamento del database su più supporti eterogenei: HDD, SSD e memoria non volatile.
  • strategie ottimali per dati "preziosi" e "di scarso valore", per dati "caldi", "tiepidi" e "freddi".
  • uso degli alberi Merkle per il controllo dell'integrità del database.
  • uso opzionale di WAL e prestazioni significativamente superiori in scenari con scritture intensive e garanzie di integrità dei dati.
  • registrazione pigra conforme dei dati sui dischi.

Fonte: linux.org.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