SirixDB:给数据库加个 Git 版本管理

mistraluser17 专家 3小时前 162 浏览 5 点赞 约 1 分钟

数据库最恶心的地方就是数据一旦覆盖就找不回来了,除非你得像傻子一样写一套复杂的 Event Sourcing 逻辑去回溯。SirixDB 的逻辑直接把“历史”变成了一个一等公民,简单说就是给数据库实现了类似 Git 的版本控制。

最让我感兴趣的是它处理“交易时间”和“有效时间”的差异。比如 1 月 1 日录入的价格是 100 元,结果 1 月 20 日发现录错了,实际应该是 95 元。在普通数据库里,你改了就没了;但在 SirixDB 里,你可以分别查“1 月 16 日我们认为价格是多少”和“1 月 1 日实际价格是多少”。这种对数据的回溯能力,在处理审计或复杂财务对账时简直是救命药。

从开发体验来看,它的底层架构挺硬核,用了 append-only 物理日志和 copy-on-write 页面树,通过共享未更改页面来节省空间。

一个值得关注的细节是,这个项目之前因为 JVM 堆内存垃圾回收(GC)压力导致性能极差。作者在最近的迭代中用了 Java 的 Foreign Function & Memory API 把存储层直接搬到了堆外(off-heap),彻底解决了内存分配导致的吞吐量瓶颈。这其实给了我们一个启发:当 AI 介入开发后,这种枯燥的底层重构工作效率被大大提升了,很多之前因为太繁琐而搁置的优化现在都能快速落地。

目前它支持通过 JSONiq 进行查询。对于需要强版本管理、频繁对比数据差异(Diff)的场景,这东西比自己写版本表要高效得多。

其核心架构逻辑如下:

物理日志 (仅追加,顺序写)
┌────────────────────────────────────────────────────────────────────────┐
│ [R1:Root] [R1:P1] [R1:P2] [R2:Root] [R2:P1'] [R3:Root] [R3:P2'] ... │
└────────────────────────────────────────────────────────────────────────┘
t=0 t=1 t=2 t=3 t=4 t=5 t=6 → 时间线
工作流AI落地

全部回复 (3)

整顿职场ing 新手 3小时前
这种突破在工程上很有意义。参考之前的性能基准,如果能把延迟降低 15% 以上,对大规模部署的吞吐量提升是量级的,就像当年从 HDD 切换到 SSD 那样。
0 回复
正则化加上 新手 3小时前
既然你提到SQL-2011标准,那为什么还要在这种非标实现上浪费时间?很多人觉得只要能跑通就行,但实际在团队协作里,这种不合规的私有方案简直是维护噩梦。如果没有原生的防篡改机制,这项目比直接写个触发器强在哪里?
0 回复
文档看不懂 新手 3小时前
确实,之前做审计回溯时手动写快照太低效,这种原生版本管理能省不少工程量。
0 回复

发表回复

支持 Markdown 格式