goatdb:563⭐的本地优先 P2P 数据库,让数据跨设备同步
goatdb 是一个专为现代应用设计的点对点数据库,它的核心理念是「本地优先」——数据首先存储在本地,然后在设备之间自动同步。对于需要离线工作能力、多端同步的应用来说,这是一个值得关注的选择。
项目概览
| 属性 | 内容 |
|---|---|
| GitHub | goatplatform/goatdb |
| Stars | 563 |
| 语言 | TypeScript |
| 特点 | 本地优先、P2P 同步、跨平台 |
| 最后更新 | 5天前 |
它解决了什么问题
传统应用的数据架构通常是这样的:
- 客户端完全依赖服务器,没有网络就无法使用
- 数据存储在远程数据库,多端同步需要复杂的后端开发
- 用户对自己的数据没有直接控制权
goatdb 提供了一种不同的思路:
- 本地优先:数据首先存在于用户设备上,应用随时可用
- 自动同步:设备之间通过 P2P 方式自动同步数据变更
- 去中心化:不需要中央服务器,数据由用户自己掌控
这种模式特别适合笔记应用、任务管理、协作工具等场景。
核心特性
跨平台支持
goatdb 可以在多种环境中运行:
- 浏览器:原生支持,无需插件
- Deno:服务端和边缘环境
- Node.js:传统后端场景
React 集成
内置 React hooks,让状态管理变得简单:
import { useDoc, useDB } from 'goatdb';
function TodoList() {
const db = useDB();
const todo = useDoc('/todos/123');
const toggle = () => {
todo.update(doc => ({
...doc,
completed: !doc.completed
}));
};
return (
<div>
<input
type="checkbox"
checked={todo.data.completed}
onChange={toggle}
/>
{todo.data.text}
</div>
);
}
类型安全
基于 TypeScript 的强类型设计:
interface Todo {
text: string;
completed: boolean;
createdAt: number;
}
// 类型安全的文档操作
const todo = await db.get<Todo>('/todos/123');
冲突解决
内置多种冲突解决策略:
- Last-Write-Wins:简单的覆盖策略
- CRDT:自动合并并发修改
- 自定义:根据业务需求实现特定逻辑
快速开始
安装
# Deno
deno add jsr:@goat/db
# npm
npm install @goat/db
基础用法
import { GoatDB } from '@goat/db';
// 创建数据库实例
const db = new GoatDB({
path: './my-app-data',
schema: {
todo: {
text: 'string',
completed: 'boolean'
}
}
});
// 创建文档
const todo = await db.create('/todos', {
text: '学习 goatdb',
completed: false
});
// 读取文档
const data = await db.get('/todos/' + todo.id);
// 更新文档
await db.update('/todos/' + todo.id, {
completed: true
});
同类产品对比
| 工具 | Stars | 特点 |
|---|---|---|
| RxDB | 21k | 成熟生态,支持多种同步协议 |
| WatermelonDB | 11k | React Native 友好,性能优秀 |
| PouchDB | 8.5k | CouchDB 生态,历史悠久 |
| goatdb | 563 | 新兴的本地优先方案,架构简洁 |
适用场景
适合使用 goatdb 的情况:
- 需要离线优先的 Web 应用
- 多端数据同步的个人工具
- 不想维护复杂后端的独立开发者
- 重视数据隐私的用户自控应用
不适合的情况:
- 需要复杂权限控制的企业应用
- 数据量极大的场景(尚无性能基准)
- 需要 SQL 查询能力的应用
注意事项
- 项目相对较新(2024年底创建),API 可能有变动
- 社区规模还不大,遇到问题可能需要阅读源码
- 生产环境使用前建议充分测试
总结
goatdb 代表了一种新的应用架构思路:数据属于用户,应用只是数据的视图。对于追求简洁架构、重视用户体验的开发者来说,它提供了一个值得探索的方向。
项目文档:https://goatdb.dev
| 属性 | 内容 |
|---|---|
| 仓库 | https://github.com/goatplatform/goatdb |
| 许可证 | MIT |
| 语言 | TypeScript |
| 维护者 | @ofriw |