跳转到内容

Graft 是什么

可以把 Graft 理解为给 SQLite 用的 Git。它补上 Git 缺少的数据库语义: 存储高效的快照、表结构合并与行级差异。

Graft 采用类似 Git 的工作流,并使用独立的仓库格式与远端机制。

自定义差异工具可以把 .sqlite 文件转换成可读文本,方便审查变化。Git 的存储和 合并仍停留在文件级,无法识别 SQLite 数据页、表结构、表和行。

因此还缺少三类数据库能力:

  • **存储:**捕获包含 WAL 中已提交内容的一致数据库状态,并以独立数据块记录变化, 避免为每个版本保存完整文件。
  • **差异:**用表结构、表和行解释变化,而不只是展示文件字节发生改变。
  • **合并:**组合兼容的表结构与行变化,并在无法安全自动合并时给出精确冲突。

Graft 在熟悉的提交、分支、恢复与远端操作背后实现这些 SQLite 专用能力。工作区中 仍然是普通 SQLite 文件,应用可以继续使用原有的 SQLite 库。

Graft 也可以记录数据库的相关文件:

app-data/
data.sqlite
settings.json
attachments/
invoice.pdf

data.sqlite 中的一行可能引用 attachments/invoice.pdf。如果恢复、建立分支 或同步时只处理其中一个路径,应用可能得到无法使用的状态。

Graft 把选定的数据库与文件记录在同一个仓库提交中,让数据库行和它引用的文件 可以一起经过版本历史。

  • 存储高效的 SQLite 快照,包括 WAL 中已提交的内容;
  • 表结构、表、行和路径级差异;
  • 表结构三方合并与结构化行冲突;
  • 不可变提交、分支、恢复与远端同步;
  • 本地、对象存储与 HTTP 远端;
  • 结构化 CLI 输出和进程内 Node.js SDK。

当应用需要为一组相关数据库和文件提供可见历史、检查点、变更审查、分支式工作流、 恢复或同步时,使用 Graft。

Graft 不会替代:

  • SQLite 事务;
  • 应用的身份验证与授权;
  • 实时 operation-log replication;
  • 通用源码仓库;
  • 独立的备份与保留策略。
接入面用途
Graft CLI评估、脚本、自动化和 JSON 子进程接入。
Node.js SDK进程内常驻仓库会话。
远端软件包通过你运营的基础设施提供带身份验证的 HTTP 同步。

继续阅读选择接入方式