Graft 是什么
可以把 Graft 理解为给 SQLite 用的 Git。它补上 Git 缺少的数据库语义: 存储高效的快照、表结构合并与行级差异。
Graft 采用类似 Git 的工作流,并使用独立的仓库格式与远端机制。
它解决的问题
Section titled “它解决的问题”自定义差异工具可以把 .sqlite 文件转换成可读文本,方便审查变化。Git 的存储和
合并仍停留在文件级,无法识别 SQLite 数据页、表结构、表和行。
因此还缺少三类数据库能力:
- **存储:**捕获包含 WAL 中已提交内容的一致数据库状态,并以独立数据块记录变化, 避免为每个版本保存完整文件。
- **差异:**用表结构、表和行解释变化,而不只是展示文件字节发生改变。
- **合并:**组合兼容的表结构与行变化,并在无法安全自动合并时给出精确冲突。
Graft 在熟悉的提交、分支、恢复与远端操作背后实现这些 SQLite 专用能力。工作区中 仍然是普通 SQLite 文件,应用可以继续使用原有的 SQLite 库。
Graft 也可以记录数据库的相关文件:
app-data/ data.sqlite settings.json attachments/ invoice.pdfdata.sqlite 中的一行可能引用 attachments/invoice.pdf。如果恢复、建立分支
或同步时只处理其中一个路径,应用可能得到无法使用的状态。
Graft 把选定的数据库与文件记录在同一个仓库提交中,让数据库行和它引用的文件 可以一起经过版本历史。
Graft 提供什么
Section titled “Graft 提供什么”- 存储高效的 SQLite 快照,包括 WAL 中已提交的内容;
- 表结构、表、行和路径级差异;
- 表结构三方合并与结构化行冲突;
- 不可变提交、分支、恢复与远端同步;
- 本地、对象存储与 HTTP 远端;
- 结构化 CLI 输出和进程内 Node.js SDK。
它位于哪一层
Section titled “它位于哪一层”当应用需要为一组相关数据库和文件提供可见历史、检查点、变更审查、分支式工作流、 恢复或同步时,使用 Graft。
Graft 不会替代:
- SQLite 事务;
- 应用的身份验证与授权;
- 实时 operation-log replication;
- 通用源码仓库;
- 独立的备份与保留策略。
开发者接入面
Section titled “开发者接入面”| 接入面 | 用途 |
|---|---|
| Graft CLI | 评估、脚本、自动化和 JSON 子进程接入。 |
| Node.js SDK | 进程内常驻仓库会话。 |
| 远端软件包 | 通过你运营的基础设施提供带身份验证的 HTTP 同步。 |
继续阅读选择接入方式。