返回

文章详情

展示HN:SirixDB 1.0 Beta – 类似Git的版本控制、差异、时空查询

Hacker News2026年7月15日 15:46

SirixDB - 双时态数据库系统 随时快速查询任何修订版 🟢 现场演示 · 为什么选择SirixDB · 文档 · 网站 · Discord · 论坛 · 网络UI 状态:1.0.0-beta — 今日可用,正在积极开发中。 磁盘格式和公共API正在稳定,朝着1.0发布迈进;我们需要的正是来自实际使用的反馈。 问题 您在数据库中更新了一行。旧值消失了。要获取历史,您附加了审计表、变更数据捕获或事件溯源。现在,您有两个系统:一个用于当前状态,一个用于历史。查询过去意味着重放事件或扫描日志。您“简单”的审计需求变成了一个基础设施项目。Git能够解决文件的问题——但您不能查询Git仓库。事件溯源保留历史——但重建过去的状态意味着从头开始重放。 解决方案 SirixDB是一个数据库,所有修订版都是重要的组成部分。不是事后的想法。也不是您重放的日志。 // 查询修订版1 - 立即获取,而不是重建的会话。 session.beginNodeReadOnlyTrx(1) // 按时间戳查询 - 上周二凌晨3点当前的是哪个修订版本? session.beginNodeReadOnlyTrx(Instant.parse("2024-01-15T03:00:00Z")) // 两者返回相同内容:可读快照,速度和查询“现在”一样快 这之所以有效,是因为SirixDB利用结构共享和页面子版本控制。未更改的页面通过写时复制在修订版之间共享——而版本控制在页面之下继续:一次提交写入仅包含更改记录的页面片段,滑动快照算法保证任何页面最多可以从N个片段重构。 块级COW(ZFS方式)在其中一个字节更改时复制整个页面;增量系统使读取重放不断增长的差异链。SirixDB不承担这两种成本。修订版1000没有存储1000个副本——而是存储当前状态以及指向共享历史的指针。 结果: 存储:O(每个修订版更改的记录),而不是O(总大小×修订版)——也不是O(更改的页面) 从任何修订版读取任何页面:O(N)页面片段读取,其中N是可配置的快照窗口(默认值为3) 无需事件重放,无需日志扫描——直接页面访问 双时态:两种时间 大多数数据库(如果有版本控制的话)只跟踪一条时间线:数据被写入的时间。SirixDB跟踪两条时间线: 事务时间:何时提交的?(系统管理) 有效时间:在现实世界中何时成立?(用户管理) 这为什么重要? 1月15日:您记录“价格=$100,有效期从1月1日开始” 1月20日:您发现1月1日的实际价格是$95 经过修正,您可以询问:“1月16日我们认为价格是多少?” → $100(事务时间) “1月1日的实际价格是多少?” → $95(有效时间) 两个问题都有正确的不同答案。没有双时态支持,修正将破坏审计线索。 核心属性 追加存储:数据从不被覆盖。新修订版写入新位置。 结构共享:未更改的页面和节点通过写时复制在修订版之间相互引用。 快照隔离:读取者看到一致的视图;每个资源一个写入者。 可嵌入:一个自包含的JAR(包含第三方依赖项的阴影)——嵌入其中,或作为REST服务器运行。 性能 历史记录不是负担。读取旧修订版是直接页面查找,而不是重放—任何修订版的读取速度都和最新的一样快,且会话开启成本平坦,不管历史存在多少(在10000个修订版时为0.18毫秒)。 一些测量结果(我们将基准测试与自己对比并公开结果,方法论见WHY-SIRIX.md和链接的比较文档): 在提交的写入者下进行的并发读取——在一个12800修订版的数据库中,16个读取线程+1个通过REST的写入者,从361次读取/秒上升到11198次读取/秒,读取者p99从334毫秒降至4.8毫秒,而且没有错误,在修复一个页面生命周期错误和一个O(历史)开销错误后(BENCHMARKS.md)。现在老旧的数据库反而超过了修复前的新数据库。 语义差异——两个修订版之间节点级的插入/更新/删除(具有稳定键)在约0.3毫秒内完成,而不是文本差异。 分析——一个向量化的、失败关闭的执行路径运行分组/聚合套件,与DuckDB 1.5.2在100M记录上进行面对面的竞争:在九种查询形状中三种领先,其他所有结果在1.1–2.5倍内,除了计数不同(约4.2倍)(总和16毫秒,两个键的分组240毫秒),GraalVM本地二进制在温暖分析查询中运行速度比JVM快7–17倍(COMPARISON_DUCKDB.md,NATIVE_IMAGE.md)。独立的查询引擎 brackit 在其自己的基准套件中以几倍速度运行动态JSON查询,查看每个查询的基准结果和与jq等效的工作负载,可以通过examples/benchmark.sh重现。 与PostgreSQL的公平对比(COMPARISON_POSTGRES.md)—— PG 17凭借历史表在原始小文档吞吐量(4,015与约430次提交/秒)和总存储上获胜。SirixDB在每个语句的嵌入读取、0.3毫秒的语义差异和子文档时间旅行上取胜。

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡