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

A disposizione per testare il secondo candidato per le versioni della libreria libmdbx con l'implementazione di un database di valori-chiave incorporato compatto e ad alte prestazioni. L'attuale versione (0.5) è una release tecnica, segna il completamento di eventuali migliorie e il passaggio alla fase pubblica di test finale e stabilizzazione, con la successiva formazione della prima release completa della libreria. codice libmdbx distribuito da concesso in licenza con la licenza pubblica OpenLDAP.

La libreria MDBX è un fork significativamente rivisto di LMDB — DBMS transazionale incorporato della classe “chiave-valore” basato su albero B+ без registrazione proattiva, che consente ai processi multi-thread di funzionare in modo competitivo ed efficiente con un database condiviso localmente (non in rete). A sua volta, MDBX è più veloce e affidabile di LMDB e allo stesso tempo conserva tutte le caratteristiche chiave del suo antenato, come ACIDO e letture non bloccanti con ridimensionamento lineare tra i core della CPU.

Le differenze più importanti tra MDBX e LMDB:

  • 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 dei volumi dei campioni per intervalli (stima delle query di intervallo).
  • Supporto per chiavi di dimensioni doppie rispetto ai pancake e dimensioni della pagina del database selezionabili dall'utente.

La release candidate libmdbx è il risultato di una decisione presa nell'agosto 2019 di separare i progetti MDBX e MithrilDB. Allo stesso tempo, libmdbx ha deciso di eliminare il (razionale) debito tecnico massimo e di stabilizzare la libreria. Nella direzione designata, infatti, è stato fatto 2-3 volte di più di quanto inizialmente stimato e pianificato:

  • È stato implementato il supporto per macOS e piattaforme di secondo livello: FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. Il supporto AIX e HP-UX può essere aggiunto secondo necessità.
  • Il codice è stato ripulito utilizzando UnDefinited Behavior Sanitizer e Address Sanitizer, tutti gli avvisi durante la creazione con "-Wpedantic", tutti gli avvisi di Coverity Static Analyser, ecc. sono stati eliminati.
  • Aggiornamento Descrizioni dell'API.
  • Unione (amalgamazione) del codice sorgente per facilitarne 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 delle pagine aggiornate/vecchie e delle informazioni estese 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 di file system non locali (NFS, Samba, ecc.) per prevenire danni al database se utilizzati in modo errato.
  • 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.0, no Licenza pubblica OpenLDAP).
  • La separazione evita potenziali confusioni, introduce più certezze e garantisce un percorso indipendente ai 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 diversi supporti eterogenei: HDD, SSD e memoria non volatile.
  • Strategie ottimali per dati “di valore” e “di basso valore”, per dati “caldi”, “caldi” e “freddi”.
  • Utilizzo dell'albero Merkle per monitorare l'integrità del database.
  • Utilizzo opzionale di WAL e prestazioni notevolmente migliorate in scenari ad uso intensivo di scrittura con garanzie di integrità dei dati.
  • Recupero pigro del salvataggio dei dati sui dischi.

Fonte: opennet.ru

Aggiungi un commento