Une version significative de la base de données immudb 1.0 a été présentée, garantissant l'immutabilité et la conservation de toutes les données ajoutées jusqu'à présent, ainsi que fournissant une protection contre les modifications rétroactives et offrant la possibilité de preuve cryptographique de propriété des données. À l'origine, le projet a évolué en tant que stockage NoSQL spécialisé, manipulant des données au format clé/valeur, mais depuis la sortie de la version 1.0, immudb se positionne comme une base de données complète avec prise en charge de SQL. Le code du projet est écrit en Go et est distribué sous la licence Apache 2.0.
Les informations dans immudb sont stockées en utilisant une structure similaire à celle de la blockchain, garantissant l'intégrité de toute la chaîne d'enregistrements existants et empêchant la modification des données déjà sauvegardées ou la substitution/insertion d'enregistrements dans l'historique des transactions. Le stockage ne prend en charge que l'ajout de nouvelles données, sans possibilité de suppression ou de modification des informations déjà ajoutées. Toute tentative de modification des enregistrements dans la base de données aboutit simplement à la sauvegarde d'une nouvelle version de l'enregistrement, les anciennes données ne sont pas perdues et restent accessibles dans l'historique des modifications.
Cependant, contrairement aux solutions typiques basées sur la blockchain, immudb permet d'atteindre des performances de l'ordre de millions de transactions par seconde et peut être utilisé pour déclencher des services légers ou pour intégrer sa fonctionnalité dans des applications sous forme de bibliothèque.

Une haute performance est atteinte grâce à l'utilisation d'un arbre LSM (Log-structured merge-tree) avec un journal de valeurs, assurant un accès rapide aux enregistrements lors d'une forte intensité d'ajout de données. Pour maintenir l'intégrité du stockage, une structure arborescente de type "arbre de Merkle" est également utilisée, dans laquelle chaque branche vérifie toutes les branches et nœuds sous-jacents grâce à un hachage conjoint (en arbre). Avec un hachage final, l'utilisateur peut s'assurer de l'exactitude de l'ensemble de l'historique des opérations, ainsi que de l'exactitude des états antérieurs de la base de données (le hachage racine de l'état actuel de la base est calculé en tenant compte de l'état passé).
Les clients et les auditeurs se voient fournir une preuve cryptographique de propriété et d'intégrité des données. L'utilisation de la cryptographie par clé publique ne nécessite pas de la part du client une confiance dans serveur, et la connexion de chaque nouveau client à la base de données augmente le niveau de confiance global de tout le stockage. Les clés publiques et les listes de révocation des clés sont stockées dans la base de données, et lors des opérations de chiffrement, des enclaves Intel SGX peuvent être utilisées.
Parmi les fonctionnalités de la base de données, on trouve la prise en charge de SQL, le mode de stockage clé/valeur, les index, la segmentation de la base de données (sharding), la création de snapshots de l'état des données, les transactions ACID avec prise en charge de l'isolation par snapshots (SSI), une haute performance de lecture et d'écriture, ainsi que des optimisations pour un fonctionnement efficace sur les disques SSD. de serveurs et une bibliothèque intégrée, la prise en charge de REST API et la disponibilité d'une interface web pour la gestion. Parmi les cas d'utilisation typiques où des bases de données comme immudb sont demandées, on note la gestion des transactions par cartes de crédit, le stockage de clés publiques, de certificats numériques, de sommes de contrôle et de journaux, ainsi que la création d'un stockage duplicable pour des champs importants dans des bases de données traditionnelles. Des bibliothèques clientes pour travailler avec immudb sont disponibles pour Go, Java, .NET, Python et Node.js.
Améliorations clés dans la version immudb 1.0 :
- Prise en charge de SQL avec la possibilité de protéger les chaînes contre la modification cachée.
- Mode Time Travel, permettant de basculer l'état de la base de données à un moment donné du passé. Ainsi, le moment de l'échantillonnage des données peut être défini au niveau de sous-requêtes individuelles, facilitant l'analyse des changements et la comparaison des données.
- Prise en charge du protocole client PostgreSQL, permettant d'utiliser immudb avec des applications et bibliothèques existantes conçues pour fonctionner avec PostgreSQL. Ainsi, en plus des bibliothèques clientes natives, il est possible d'utiliser des bibliothèques clientes typiques Ruby, C, JDBC, PHP et Perl.
- Console Web pour une navigation interactive dans les données et l'administration de la base de données. Via l'interface web, il est possible d'envoyer des requêtes, de créer des utilisateurs et de gérer des données. Un environnement d'apprentissage Playground est également disponible.


Source : opennet.ru


