È stata presentata una notevole versione del DBMS immudb 1.0, che garantisce l'immutabilità e la conservazione di tutti i dati mai aggiunti, oltre a fornire protezione da modifiche retroattive e offrire possibilità di prova crittografica di proprietà dei dati. Inizialmente, il progetto si è sviluppato come un archivio NoSQL specializzato, che manipolava dati in formato chiave/valore, ma a partire dal rilascio della versione 1.0 immudb si posiziona come un DBMS completo con supporto per SQL. Il codice del progetto è scritto in linguaggio Go e distribuito con licenza Apache 2.0.
Le informazioni in immudb sono archiviate utilizzando una struttura simile alla blockchain, che garantisce l'integrità dell'intera catena di registrazioni esistenti e non consente di modificare i dati già salvati o sostituire/inserire una registrazione nella cronologia delle transazioni. L'archivio supporta solo l'aggiunta di nuovi dati, senza possibilità di cancellare o modificare le informazioni già aggiunte. Un tentativo di modifica delle registrazioni nel DBMS porta solo al salvataggio di una nuova versione della registrazione, i dati precedenti non vengono persi e rimangono accessibili nella cronologia delle modifiche.
A differenza delle soluzioni tipiche basate sulla blockchain, immudb consente di raggiungere prestazioni a livello di milioni di transazioni al secondo e può essere utilizzato per avviare servizi leggeri o per integrare la propria funzionalità nelle applicazioni sotto forma di libreria.

L'elevata prestazione è raggiunta grazie all'utilizzo dell'albero LSM (Log-structured merge-tree) con log dei valori, che assicura un rapido accesso alle registrazioni anche con un'alta intensità di aggiunta di dati. Per mantenere l'integrità dell'archivio, viene inoltre utilizzata una struttura ad albero chiamata 'albero di Merkle' (Merkle Tree), in cui ogni ramo verifica tutti i rami e nodi sottostanti grazie all'hashing congiunto (strutturato ad albero). Avendo un hash finale, l'utente può assicurarsi della correttezza dell'intera cronologia delle operazioni, così come della correttezza dei passati stati del DB (l'hash di controllo radice del nuovo stato del database viene calcolato tenendo conto dello stato precedente).
Ai clienti e agli auditor viene fornita una prova crittografica di proprietà e integrità dei dati. L'uso della crittografia a chiave pubblica non richiede al cliente fiducia in server, e la connessione di ogni nuovo cliente al DBMS aumenta il livello generale di fiducia nell'intero archivio. Le chiavi pubbliche e le liste di revoca delle chiavi sono memorizzate nel database e, durante le operazioni di crittografia, possono essere utilizzati enclave Intel SGX.
Tra le funzionalità del DBMS si menzionano il supporto per SQL, la modalità di memorizzazione chiave/valore, indici, partizionamento del database (sharding), creazione di snapshot dello stato dei dati, transazioni ACID con supporto per l'isolamento degli snapshot (SSI), elevate prestazioni di lettura e scrittura, ottimizzazioni per un funzionamento efficiente su unità SSD, supporto per l'operatività in forma server e librerie incorporate, supporto per REST API e presenza di un'interfaccia web per la gestione. Tra i settori tipici in cui i DBMS come immudb sono richiesti, si evidenziano la gestione delle transazioni con carte di credito, la memorizzazione di chiavi pubbliche, certificati digitali, checksum e log, e la creazione di un archivio duplicato per campi importanti in DBMS tradizionali. Sono disponibili librerie client per lavorare con immudb per Go, Java, .NET, Python e Node.js.
Miglioramenti chiave nella versione immudb 1.0:
- Supporto SQL con la possibilità di proteggere le righe da modifiche non autorizzate.
- Modalità TimeTravel, che consente di ripristinare lo stato del database a un determinato momento nel passato. Inoltre, l'orario di campionamento dei dati può essere impostato a livello di singole sottoquery, facilitando l'analisi delle modifiche e il confronto dei dati.
- Supporto per il protocollo client PostgreSQL, che consente di utilizzare applicazioni e librerie esistenti con immudb progettate per PostgreSQL. Oltre alle librerie client native, sono utilizzabili anche le librerie client standard Ruby, C, JDBC, PHP e Perl.
- Web Console per la navigazione interattiva dei dati e l'amministrazione del DBMS. Attraverso l'interfaccia web è possibile inviare query, creare utenti e gestire i dati. Inoltre, è disponibile un ambiente di apprendimento Playground.


Fonte: opennet.ru


