Seconda release candidate di libmdbx v1.0 dopo cinque anni di sviluppo.

Biblioteca libmdbx è un discendente significativamente ridisegnato di LMDB, un database di valore-chiave incorporato estremamente performante e compatto.
L'attuale versione v0.5 è un rilascio tecnico, che segna il completamento di eventuali migliorie e il passaggio alla fase pubblica di collaudo finale e stabilizzazione, con la successiva formazione della prima release completa della libreria.

LMDB è un DBMS incorporato transazionale abbastanza noto della classe chiave-valore basato su albero B+ без registrazione proattiva, che consente a uno sciame di processi multithread di funzionare in modo competitivo ed estremamente efficiente con un database condiviso localmente (non di rete). A sua volta, MDBX è più veloce e più affidabile di LMDB, mentre libmdbx conserva tutte le caratteristiche chiave del suo progenitore, come ACIDO e lettura non bloccante con ridimensionamento lineare tra i core della CPU e ne aggiunge anche alcuni nuovi.

Una 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 i più importanti e notevoli:

  • Fondamentalmente, viene prestata maggiore attenzione alla qualità del codice, ai test e ai controlli automatici.
  • Controllo notevolmente maggiore durante il funzionamento, dal controllo dei parametri all'audit interno delle strutture del database.
  • Compattazione automatica e gestione automatica delle dimensioni del database.
  • Un unico formato di database per assembly a 32 e 64 bit.
  • Stima del volume di campioni per range (stima di range query).
  • Supporto per chiavi di dimensioni doppie rispetto ai pancake e dimensioni della pagina del database selezionabili dall'utente.

La release candidate rilasciata di libmdbx è il risultato della decisione (vedi sotto) di dividere i progetti MDBX e MithrilDB nell'agosto 2019. In tal modo, libmdbx ha deciso di eliminare il debito tecnico massimo (ragionevole) e stabilizzare la libreria. Nella direzione indicata, infatti, è stato svolto 2-3 volte più lavoro di quanto originariamente 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 secondo necessità.
  • Codice disinfettato con Undefined Behavior Sanitizer e Address Sanitizer, corretti tutti gli avvisi di compilazione con -Wpedantic, tutti gli avvisi di Coverity Static Analyzer, ecc.
  • Aggiornamento Descrizioni dell'API.
  • Amalgamazione del codice sorgente per facilitare l'incorporamento.
  • Supporto CMake.
  • Supporto per transazioni nidificate.
  • Utilizzo del bootid per determinare se il sistema operativo è stato riavviato (arresto anomalo del database).
  • Conteggio end-to-end di pagine aggiornate/vecchie e informazioni avanzate sulle transazioni.
  • Opzione MDBX_ACCEDE per connettersi a un database già aperto in modalità compatibile.
  • l'uso di Serrature OFD alla loro disponibilità.
  • Backup a caldo nel tubo.
  • Algoritmo di ordinamento interno ottimizzato specializzato (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 della lettura anticipata (strategia di memorizzazione nella cache dei file del database in memoria).
  • Compattazione automatica più aggressiva e veloce.
  • Una strategia più ottimale per unire le pagine dell'albero B+.
  • Controllo dei file system non locali (NFS, Samba, ecc.) per prevenire la corruzione del database a causa di un uso improprio.
  • Suite di test ampliata.

Lo sviluppo della "prossima" versione di libmdbx continuerà come progetto separato MithrilDB, mentre il vettore di sviluppo della versione "attuale" di MDBX mira a congelare e stabilizzare il set di funzionalità. Questa decisione è stata presa per tre motivi:

  • Incompatibilità totale: MithrilDB richiede un formato di file di database diverso (incompatibile) e un'API diversa (incompatibile) per implementare tutte le funzionalità pianificate.
  • Nuovo codice sorgente: il codice sorgente di MithrilDB è indipendente dalla licenza da LMDB e il progetto stesso dovrebbe essere pubblicato con una licenza diversa (approvata da OSI licenza Apache 2.0E non Fondazione OpenLDAP).
  • La separazione evita potenziali confusioni, introduce maggiore certezza e garantisce l'indipendenza del percorso di sviluppo dei progetti.

Anche MithrilDB, come MDBX, è basato su albero B+ e sarà inoltre caratterizzato da prestazioni estremamente elevate, eliminando al contempo una serie di carenze fondamentali di MDBX e LMDB. In particolare, verrà eliminato il problema delle "long reads", che si manifesta come "rigonfiamento" del database dovuto al fatto che l'elaborazione dei rifiuti viene bloccata da transazioni di long reading. Le nuove funzionalità di MithrilDB includono:

  • 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", "caldi" e "freddi".
  • utilizzando Merkle tree per controllare l'integrità del database.
  • uso opzionale di WAL e prestazioni significativamente migliori in scenari ad alta intensità di scrittura con garanzie di integrità dei dati.
  • lazy catch-up si impegna ai dischi.

Fonte: linux.org.ru

Aggiungi un commento