Представлен значительный выпуск СУБД immudb 1.0, гарантирующей неизменность и сохранение всех когда-либо добавленных данных, а также предоставляющей защиту от внесения изменений задним числом и дающей возможность криптографического доказательства владения данными. Изначально проект развивался как специализированное NoSQL-хранилище, манипулирующее данными в формате ключ/значение, но начиная с выпуска 1.0 immudb позиционируется как полноценная СУБД с поддержкой SQL. Код проекта написан на языке Go и распространяется под лицензией Apache 2.0.
Информация в immudb хранится с использование блокчейн-подобной структуры, гарантирующей целостность всей цепочки имеющихся записей и не позволяющей изменить уже сохранённые данные или подменить/вставить запись в историю транзакций. Хранилище поддерживает только добавление новых данных, без возможности удаления или изменения уже добавленной информации. Попытка изменения записей в СУБД лишь приводит к сохранению новой версии записи, старые данные не теряются и остаются доступны в истории изменений.
Применение криптографии в привязке к клиентским ключам не требует от клиента доверия к серверу для верификации и подтверждения владения данными, а подключение каждого нового клиента к СУБД увеличивает общей уровень доверия ко всему хранилищу. При этом в отличие от типовых решений на базе блокчейна, immudb позволяет добиться производительности на уровне миллионов транзакций в секунду и может применяться для запуска легковесных сервисов или для встраивания своей функциональности в приложения в форме библиотеки.
Высокая производительность достигается благодаря применению дерева LSM (Log-structured merge-tree) c логом значений, обеспечивающего быстрый доступ к записям при высокой интенсивности добавления данных.
Для поддержания целостности хранилища дополнительно задействована древовидная структура “дерево Меркла” (Merkle Tree), в которой каждая ветка верифицирует все нижележащие ветки и узлы благодаря совместному (древовидному) хешированию. Имея конечный хеш, пользователь может удостовериться в корректности всей истории операций, а также в корректности прошлых состояний БД (корневой проверочный хеш нового состояния базы вычисляется с учётом прошлого состояния).
Из функциональных возможностей СУБД упоминается поддержка SQL, режим хранения ключ/значение, индексы, сегментирование БД (sharding), создание снапшотов состояния данных, транзакции ACID с поддержкой изоляцией снапшотов (SSI), высокая производительность чтения и записи, оптимизации для эффективной работы на SSD-накопителях, поддержка работы в форме сервера и встраиваемой библиотеки, поддержка REST API и наличие web-интерфейса для управления. Из типичных областей применения, в которых востребованы СУБД, подобные immudb, отмечаются ведение транзакций с кредитными картами, хранение открытых ключей, цифровых сертификатов, контрольных сумм и логов, создание дублирующего хранилища для важных полей в традиционных СУБД. Клиентские библиотеки для работы с immudb подготовлены для Go, Java, .NET, Python и Node.js.
Ключевые улучшения в выпуске immudb 1.0:
- Поддержка SQL с возможностью защиты строк от скрытой модификации.
- Режим TimeTravel, дающий возможность переключить состояние БД на определённый момент в прошлом. В том числе время среза данных можно устанавливать на уровне отдельных подзапросов, что упрощает анализ изменений и проведение сравнения данных.
- Поддержка клиентского протокола PostgreSQL, позволяющего использовать с immudb существующие приложения и библиотеки, рассчитанные на работу с PostgreSQL. В том числе помимо родных клиентских библиотек можно применять типовые клиентские библиотеки Ruby, C, JDBC, PHP и Perl.
- Web Console для интерактивной навигации по данным и администрирования СУБД. Через web-интерфейс можно отправлять запросы, создавать пользователей и управлять данными. Дополнительно доступна обучающая среда Playground.