☰
immudb 版本演进全解析:从 CHANGELOG 看不可变数据库的技术路线图
2026/9/25 4:36:54 网站建设 项目流程
  • 数据库
  • 安全
  • 后端

【免费下载链接】immudb

immudb - immutable database based on zero trust, SQL/Key-Value/Document model, tamperproof, data change history

项目地址:https://gitcode.com/gh_mirrors/im/immudb
点击查看免费下载

immudb 是一款内置密码学证明与验证能力的不可变数据库,支持 Key-Value、文档模型与 SQL 三种数据模型。本文以仓库根目录的 CHANGELOG.md 为骨架,系统梳理 immudb 从 v0.6 到 v1.11.1 的核心技术演进:嵌入式 SQL 引擎的能力扩张、不可变存储层的防篡改设计、PostgreSQL 协议兼容、同步/异步复制、结构化审计日志以及安全依赖更新。读完本文,你将理解 immudb 各版本之间的功能脉络,并能根据版本号快速定位对应能力与已知问题的修复情况。

一、版本时间线与总体脉络

CHANGELOG 采用 Semantic Versioning 规范,记录了自 2020 年 v0.6.0 以来的全部重要变更。从时间线看,immudb 的技术演进大致可分为几个阶段:

版本区间时间范围主题
v0.6.x – v0.9.x2020 – 2021核心存储与 Key-Value 能力、客户端 SDK 成型
v1.0.x – v1.1.02021首个 1.0 稳定版、SQL 引擎初具规模、复制能力起步
v1.2.x – v1.4.x2021 – 2022事务模型成熟、预提交/同步复制、数据库加载/卸载
v1.5.0 – v1.9.x2023 – 2025文档引擎、多索引、pg_catalog 系统表、CASE/JOIN 扩展
v1.10.0 – v1.11.12025 – 2026PG 兼容性大幅提升、审计日志、性能优化与安全加固

最新稳定版本为v1.11.1(2026-06-26),紧邻其后的 v1.11.0(2026-04-23)是一次大规模功能发布。CHANGELOG 开头的[Unreleased]段落则记录了尚未定版的新增内容,例如 immuadmin 对sysadmin权限的支持与 auditor 的新--audit-verify-values标志。

二、嵌入式 SQL 引擎:从基础查询到 PostgreSQL 兼容

2.1 早期 SQL 能力积累(v1.0 – v1.3)

SQL 引擎在 v1.0.0 前后进入嵌入式层(embedded/sql),并逐步沉淀出基础能力:

  • 类型系统:支持 INTEGER(有符号 int64)、VARCHAR、BOOLEAN、BLOB(前缀x)、TIMESTAMP,并实现 varchar → int/float 的隐式转换(type_conversion.go)。
  • DDL/DML:CREATE/DROP TABLE、CREATE/DROP INDEX(含唯一索引与多列索引)、INSERT/UPDATE/DELETE、IS NULL / IS NOT NULL、LIKE / NOT LIKE、IN子句。
  • 主键与自增:v1.1.0 引入单列与多列主键、auto-incremental 整数主键,并通过ExecAll返回"更新行数 + 最后插入主键"的执行摘要(对应 pkg/api/schema 中 SQL 执行结果的 proto 定义)。
  • 事务支持:v1.2.0 起提供交互式sqlTx与BEGIN语句,事务基于不可变存储层的 OngoingTx(见 sql_tx.go)。

2.2 JOIN 与子查询爆发(v1.5 – v1.9)

从 v1.5.0-RC1 到 v1.9.x,SQL 引擎进入"能力扩张期",文档引擎(embedded/document)也复用了 SQL 引擎作为底层查询执行器:

  • 连接类型:LEFT JOIN、INNER JOIN、JOIN + 子查询、多列索引上的联接优化。
  • 条件与表达式:简单/完整 CASE 语句、COALESCE、EXTRACT FROM TIMESTAMP、BETWEEN AND、逻辑运算符优先级(NOT/AND/OR)修正。
  • 系统表:v1.9.6 开始支持核心 pg_catalog 表(pg_class、pg_namespace、pg_roles),并在 pkg/pgsql/sys 中逐步补齐。

对应实现可参阅 parser.go 与文法定义 sql_grammar.y。

2.3 v1.11.0:SQL 能力的大规模发布

v1.11.0 是 CHANGELOG 中最浓墨重彩的一笔,其 SQL 特性清单几乎覆盖了现代关系型数据库的常见语法:

  • 表间比较:DIFF OF查询——通过SELECT _diff_action, ... FROM (DIFF OF t) SINCE TX N UNTIL TX M对比两个事务点之间的表状态,这一能力与不可变存储天然契合。
  • 连接家族:FULL OUTER JOIN、LATERAL、CROSS JOIN、NATURAL JOIN、JOIN USING,对应实现见 full_outer_join_reader.go 与 joint_row_reader.go。
  • 子查询与 CTE:EXISTS、IN、相关子查询、WITH以及WITH RECURSIVE。
  • 窗口函数:LEAD、LAG、FIRST_VALUE、LAST_VALUE、NTILE,配合每查询内存上限。
  • 集合运算:EXCEPT、INTERSECT、UNION。
  • DDL 家族:CREATE/DROP VIEW(持久化)、部分索引、TRUNCATE TABLE、DROP TABLE IF EXISTS CASCADE、ALTER COLUMN、SAVEPOINT/RELEASE/ROLLBACK TO、外键、SEQUENCES、带持久化的 DEFAULT 列值。
  • DML 增强:RETURNING、ON CONFLICT DO UPDATE、FETCH FIRST N ROWS ONLY、LIMIT ALL、NULLS FIRST/LAST。
  • 函数库扩充:COALESCE、NULLIF、GREATEST、LEAST、EXTRACT、BETWEEN AND、ILIKE、STRING_AGG、RANDOM、GEN_RANDOM_UUID、TO_NUMBER、CONCAT_WS、REGEXP_REPLACE、LPAD、RPAD、SPLIT_PART、INITCAP、CHR、ASCII、MD5、TRANSLATE、DATE_TRUNC、TO_CHAR、DATE_PART、AGE、CLOCK_TIMESTAMP(实现集中在 functions.go)。
  • 执行引擎:未索引 GROUP BY 的哈希聚合、按会话 SQL 解析缓存、经 Clone 复用缓存的 Engine catalog、前缀指纹读集(prefix-fingerprint read-set)、PG 风格 CASE 分支加宽、EXPLAIN 输出用于计划检查。

2.4 PostgreSQL 协议兼容(pgsql 服务器)

与 SQL 语法同步推进的是 PG 线协议(wire protocol)兼容层 pkg/pgsql/server:

  • v1.1.0 起支持简单查询与扩展查询消息(extended query)、flush 消息、多语句、TLS。
  • v1.9.x 引入 COPY FROM stdin,支持 Rails ActiveRecord、XORM、Gitea、SQLAlchemy、JDBC 与 pgAdmin 驱动的端到端集成。
  • v1.11.0 补齐\d、\dt、\di等 psql 反斜杠命令,将其路由到真实 catalog 数据;同时将 pg_catalog 与 information_schema 完整实现为真实系统表(pkg/pgsql/sys 下的 31 个源文件),并移除了旧 pgschema 解析层约 1500 行代码。
  • v1.11.0 还引入基于 AST 的 SQL 重写器(beta,--pg-rewriter=ast,默认关闭)与COPY FROM stdin协议支持。

当前仓库 README 已同步重构为"PostgreSQL 兼容性矩阵"结构,相关实现细节可进一步阅读 pkg/pgsql/server 与 docs/pg-compat-roadmap.md。

三、不可变存储层:防篡改的根基

3.1 存储组件架构

immudb 的不可变性由 embedded/store(事务与提交)、embedded/tbtree(有序索引)与 embedded/ahtree(追加哈希树,生成线性加密证明)三者协作保证。CHANGELOG 中大量条目围绕这三层展开:

  • v1.2.x:引入逻辑条目过期(logical entries expiration)、KV 元数据序列化、只读事务条目、时间戳类型支持。
  • v1.3.x:基于时间的事务查找、范围键更新读取、快照与读集(MVCC 读集)边界校验。
  • v1.4.x:预提交事务(precommitted tx)机制成型——事务先在 commit log 持久化、再异步提交,复制场景依赖该能力;同时支持事务丢弃(discard)与外部提交许可模式。
  • v1.5.x:嵌入值模式(embedded values)、文件预分配、值缓存、可选的完整性检查(skipIntegrityCheck 参数)。
  • v1.9.0:多索引(multi-indexing)与动态索引、值保留历史(value-preserving history)、GetBetween历史区间读取、键读取器支持历史值。

3.2 v1.11 的存储与性能优化

v1.11.1 针对存储层做了多项修复与优化,能直观反映不可变存储的实现细节:

  • 恢复路径增强:非正常关闭(如 OOMKill)后若磁盘残留预提交事务多于MaxActiveTransactions,恢复逻辑会动态倍增 precommit buffer 而非直接返回ErrBufferIsFull,避免数据库永久不可恢复(对应 precommit_buffer.go)。
  • 索引错误退避:将此前每次索引错误导致的 60 秒硬性写入冻结,替换为有界指数退避(100ms 起、每轮翻倍、上限 60s,整轮成功后复位)。
  • 参数变更可见性:以不同MaxValueLen、MaxKeyLen、MaxTxEntries、FileSize重新打开 store 时不再被静默忽略,而是发出告警并同时打印新旧值(options.go 中的校验逻辑)。

3.3 索引(tbtree)的持续打磨

tbtree(tamper-proof B-tree)贯穿多个版本的优化主题,CHANGELOG 明确记录的有:

  • 快照一致性校验、checksum 校验、自愈索引、索引压缩(compaction)与数据丢弃。
  • 节点分裂策略(middle node split)、批量插入、二分查找、清理百分比(cleanupPercentage)参数化。
  • v1.9.7 修复:将时间戳保存到独立文件,避免空索引重扫。

这些能力对应 tbtree.go 与 snapshot.go 的实现。

四、事务、复制与数据库管理

4.1 事务模型

v1.2.0-RC1 至 v1.2.4 是事务能力的关键窗口:OngoingTx API、保守读冲突校验、MVCC 读集、可取消事务、执行摘要(updated rows / last inserted pk)相继落地。事务头版本化(tx header versioning)与元数据序列化也为后续复制与审计铺路。

4.2 复制演进

  • v1.1.0:初始主动复制能力(active replication),systemdb 与 defaultdb 的 follower 复制。
  • v1.4.x:同步复制(sync replication)核心支持——预提交事务导出/提交、follower 预提交状态跟踪、事务丢弃、sync-acks语义、可配置的prefetchTxBufferSize与replicationCommitConcurrency。
  • v1.9.x:基于双向流(bidirectional streaming)的流式复制,支持异步与同步两种模式;复制时跳过完整性检查与索引,由 pkg/replication 中的 pipeline.go 与 replicator.go 承载。
  • v1.11.0:回退了 A4 pipelined fetch(对 poll 协议不适用),强调复制逻辑以主从状态机的一致性为先。

4.3 数据库管理能力

v1.2.x 引入数据库加载/卸载(load/unload)、database settings 查询端点、flush index 端点、删除数据库端点;v1.5.x 增加数据库截断(truncation,vlog 截断 + 保留期)与文档目录复制。v1.9.x 起pkg/server支持从 SQL 语句创建/选择数据库,并通过 multidb handler 统一管理多数据库用户与权限。

五、审计、安全与可观测性

5.1 结构化审计日志

v1.11.0 引入了带不可变审计轨迹的结构化审计 logger(reload 路径、异步 flush、崩溃后持久化),相关代码在 pkg/audit(event.go、logger.go、query.go)。v1.11.1 进一步为 auditor 新增--audit-verify-values开关:在链式证明校验之后,重新读取每个已提交值并做 SHA-256 校验,磁盘上的任何篡改都会让审计周期失败——这是"零信任"理念的落地体现(默认保持仅链式校验行为不变)。

5.2 认证与权限

  • v1.9.1:用户创建/修改时权限自动撤销既有权限;list users 从 multidb handler 统一提供。
  • v1.11.1:immuadmin 的user create与user permission命令接受sysadmin权限,运维人员无需依赖默认 immudb 账号即可从命令行引导额外的 sysadmin 账号(对应 cmd/immuadmin)。
  • v1.4.1:支持通过--force-admin-password重置 sysadmin 密码,并在未重置时输出警告。

5.3 依赖安全更新(v1.11.1)

v1.11.1 集中升级了一批关键依赖以消除已知 CVE:

依赖版本变化修复内容
golang.org/x/cryptov0.48.0 → v0.52.08 个 HIGH + 5 个 MEDIUM CVE
golang.org/x/netv0.50.0 → v0.55.07 个 HIGH + 1 个 MEDIUM CVE
golang.org/x/sysv0.41.0 → v0.45.0CVE-2026-39824
github.com/jackc/pgx/v5v5.9.1 → v5.9.2CVE-2026-41889
github.com/sirupsen/logrusv1.8.1 → v1.9.3Entry.Writer()DoS
urllib3(test/e2e)→ v2.7.0CVE-2026-44432

5.4 可观测性

  • 指标:v1.3.x 引入 indexer 指标、S3 相关指标、btree 缓存/压缩 Prometheus 指标;v1.9.x 增加复制延迟指标;tools/monitoring/grafana-dashboard.json 提供开箱即用的 Grafana 面板。
  • 健康检查:v1.0.5 起 immudb 与 auditor 暴露/healthz、/version端点,auditor 统一提供/metrics、/initz、/readyz、/livez。
  • 服务器选项:v1.3.2 增加 pprof 选项与 MaxSessions 限制(pkg/server/sessions)。

六、部署形态:Docker 与 Helm

CHANGELOG 记录了部署侧的持续投入:

  • v1.9.3:支持 ARM64 镜像构建。
  • v1.10.0:Helm Chart 全面配置支持(helm/values.yaml、helm/templates)。
  • v1.11.1:官方镜像通过docker buildx同时构建linux/amd64与linux/arm64,Go 在构建平台上原生交叉编译、不再依赖 QEMU;同时修复 almalinux-8-minimal 镜像因 UID/GID 不一致(目录属主 65532、运行时用户immu为 3322)导致的permission denied问题,现在IMMU_UID/IMMU_GID统一为 3322。
  • v1.1.0:提供 scratch 与 debian 两种基础镜像,v1.9.1 起加入内嵌 swagger UI 的镜像(用于 AWS Marketplace)。

七、嵌入式使用与向后兼容

immudb 不仅以独立服务形态运行,也可作为 Go 库全进程嵌入(见 docs/EMBEDDING.md 与 examples/embedded/main.go)。CHANGELOG 中多次强调向后兼容:

  • v1.2.0 修复 protobuf 与 1.1 版本的兼容性;v1.9.x 增加 proof version 概念,允许通过 immuadmin 调整 proof 兼容性。
  • 复制与预提交机制支持旧版本 follower 的向后兼容模式(backward compatible replication)。
  • 仓库 test/data_v1.1.0 保留了 v1.1.0 的旧数据文件,用于回归测试验证新版本能读取旧数据。

八、从版本历史中提炼的升级建议

结合 CHANGELOG 的 Bug Fixes 段落,升级时值得重点关注以下修复点(均在后续版本已解决):

  1. v1.11.0 引入的两个崩溃缺陷(v1.11.1 修复):大结果集ORDER BY … OFFSET落盘排序时的空指针解引用;空/纯注释 SQL 输入导致的索引越界(现在返回ErrExpectingDQLStmt)。
  2. SQL 参数绑定问题:SELECT WHERE col = $1对缓存预编译语句重复执行时复用首个绑定值的问题;带时区后缀(Z、±HH:MM)的 TIMESTAMP 参数绑定被拒绝的问题(两者均在 v1.11.1 修复)。
  3. COUNT(col)语义:v1.11.1 起COUNT(col)与COUNT(DISTINCT col)均正确跳过 NULL,不再对非空表返回 0。
  4. 升级依赖安全风险:若使用旧版本,建议至少升级到 v1.11.1 以覆盖 x/crypto、x/net、pgx、logrus 等依赖的已知 CVE。

结语

通过 CHANGELOG 可以清晰看到 immudb 的三条技术主线:以 ahtree/tbtree/store 为核心的不可变防篡改存储、以嵌入式 SQL 引擎为基座并逐步逼近 PostgreSQL 兼容的查询层、以及贯穿始终的"客户端验证、不信任数据库"的零信任安全模型。对于希望深入源码的读者,可以从 embedded/store/immustore.go、embedded/sql/engine.go 与 pkg/server/server.go 三个入口开始,结合本文梳理的版本脉络逐层阅读。

  • 数据库
  • 安全
  • 后端

【免费下载链接】immudb

immudb - immutable database based on zero trust, SQL/Key-Value/Document model, tamperproof, data change history

项目地址:https://gitcode.com/gh_mirrors/im/immudb
点击查看免费下载
上一篇:GetX Codelab 实战:从计数器到响应式状态管理与依赖注入的完整入门指南
下一篇:Hazel Engine代码规范:C++风格指南与静态分析工具

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询