È stata rilasciata una significativa versione del DBMS immudb 1.0, che garantisce l'immutabilità e la conservazione di tutti i dati mai aggiunti, fornendo anche protezione contro le modifiche retroattive e permettendo la prova crittografica della proprietà dei dati. Inizialmente, il progetto si è sviluppato come un archivio NoSQL specializzato, gestendo i dati in formato chiave/valore, ma a partire dalla versione 1.0 immudb si posiziona come un DBMS completo con supporto per SQL. Il codice del progetto è scritto in Go e distribuito sotto licenza Apache 2.0.
Le informazioni in immudb sono memorizzate utilizzando una struttura simile a blockchain, che garantisce l'integrità di tutta la catena di registrazioni esistenti e impedisce la modifica dei dati già salvati o l'inserimento/sostituzione di una registrazione nella cronologia delle transazioni. L'archivio supporta solo l'aggiunta di nuovi dati, senza possibilità di eliminare o modificare le informazioni già aggiunte. Il tentativo di modificare le registrazioni nel DBMS porta solo alla creazione di una nuova versione della registrazione, i dati vecchi non vengono persi e rimangono accessibili nella cronologia delle modifiche.
A differenza delle soluzioni tipiche basate su blockchain, immudb consente di raggiungere prestazioni fino a milioni di transazioni al secondo e può essere utilizzato per avviare servizi leggeri o per integrare le sue funzionalità in applicazioni come libreria.

Le alte prestazioni sono raggiunte grazie all'uso di un albero LSM (Log-structured merge-tree) con log di valori, che garantisce un accesso rapido alle registrazioni anche con una elevata intensità di aggiunta dati. Per mantenere l'integrità dell'archivio, viene utilizzata anche una struttura ad albero chiamata 'albero di Merkle' (Merkle Tree), in cui ogni ramo verifica tutti i rami e i nodi sottostanti grazie all'hash crittografico comune. Avere un hash finale consente all'utente di garantire la correttezza dell'intera storia delle operazioni, così come la 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 della proprietà e dell'integrità dei dati. L'uso della crittografia a chiave pubblica non richiede al cliente fiducia nei confronti di server, e collegare 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 DB e, durante le operazioni di crittografia, possono essere utilizzati i enclavi Intel SGX.
Tra le funzionalità del DBMS si segnala il supporto per SQL, la modalità di archiviazione chiave/valore, gli indici, la segmentazione del DB (sharding), la creazione di snapshot dello stato dei dati, transazioni ACID con supporto per l'isolamento degli snapshot (SSI), elevate prestazioni di lettura e scrittura, ottimizzazione per un funzionamento efficace su SSD, supporto per operare come server e come libreria integrata, supporto REST API e disponibilità di un'interfaccia web per la gestione. Tra i settori tipici in cui sono richiesti DBMS come immudb, si notano la gestione delle transazioni con carte di credito, la memorizzazione di chiavi pubbliche, certificati digitali, checksum e log, e la creazione di archivi duplicati per campi vitali in DBMS tradizionali. Le librerie client per lavorare con immudb sono disponibili per Go, Java, .NET, Python e Node.js.
Miglioramenti chiave nella release immudb 1.0:
- Supporto per SQL con possibilità di proteggere le righe da modifiche nascoste.
- Modalità TimeTravel, che consente di riportare lo stato del DB a un determinato momento nel passato. Includendo la possibilità di impostare il timestamp dei dati a livello di singole sottoquery, semplificando l'analisi delle modifiche e il confronto dei dati.
- Supporto per il protocollo client PostgreSQL, che consente l'uso di applicazioni e librerie esistenti con immudb progettate per lavorare con PostgreSQL. Oltre alle librerie client native, possono essere utilizzate librerie client tipiche di 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. È anche disponibile un ambiente didattico Playground.


Fonte: opennet.ru


