Triplit:开源自托管同步数据库,本地优先的全栈数据层方案

在现代Web和移动应用开发中,数据同步一直是一个复杂的问题。用户期望离线时也能使用应用,联网后自动同步数据。Triplit就是为解决这个问题而生的开源数据库,它在Hacker News上获得了279分的热度。

Triplit是什么

Triplit是一款全栈同步数据库,由Aspen Cloud开发。它的核心特点是:

  • 双端运行:同时在服务端和客户端运行,客户端使用IndexedDB作为存储后端
  • 实时同步:数据变更通过WebSocket实时推送到所有连接的客户端
  • 本地优先:应用首先读写本地数据,后台自动同步到服务端
  • 自托管:可以部署在自己的服务器上,完全掌控数据

项目地址:github.com/aspen-cloud/triplit

核心功能

1. TypeScript原生

Triplit用TypeScript编写,提供完整的类型安全。查询、Schema定义、数据操作全部有类型提示,减少运行时错误。

2. 内置认证和权限

Triplit内置了JWT认证和基于角色的访问控制。你可以在Schema中定义每个表的读写权限规则,不需要额外的认证中间件。

3. 离线支持

客户端Triplit数据库可以在完全离线的状态下工作。用户的所有操作都记录在本地,联网后自动与服务端合并。冲突解决策略可配置。

4. 实时订阅

通过useQuery钩子(React/Vue/Svelte),你可以订阅数据查询,当数据变化时UI自动更新,无需手动管理状态。

部署方式

Triplit支持多种部署方式:

  • Docker部署:官方提供Docker镜像,一键启动
  • Triplit Cloud:官方托管服务,适合快速原型开发
  • 自托管:在自己的VPS或云服务器上部署,完全掌控数据

快速开始(Docker)

docker run -p 6543:6543 triplit/triplit-server

启动后,服务端运行在 http://localhost:6543,可以通过HTTP和WebSocket连接。

客户端集成

npm install @triplit/client

在应用中创建客户端实例并开始查询:

import { TriplitClient } from '@triplit/client';

const client = new TriplitClient({
  serverUrl: 'http://localhost:6543',
  token: 'your-token'
});

// 查询数据
const todos = await client.fetch({
  collection: 'todos',
  where: [['completed', '=', false]]
});

适用场景

  • 协作应用:文档编辑、项目管理、白板等需要多人实时协作的场景
  • 离线优先应用:移动端、PWA等需要离线工作能力的应用
  • 替代Firebase:如果你需要Firebase的实时同步能力但想自托管数据
  • 快速原型开发:内置认证和权限,减少后端开发工作量

与其他方案的对比

Triplit的定位介于传统数据库和BaaS(Backend as a Service)之间:

  • vs Firebase:功能类似但完全开源可自托管,数据不锁定在Google
  • vs Supabase:Supabase侧重传统PostgreSQL + 实时功能,Triplit更偏向本地优先架构
  • vs CRDT方案(如Yjs):Triplit提供了完整的数据库层,不仅仅是数据同步

简评

Triplit解决了一个真实存在的痛点:如何在保持数据一致性的同时支持离线操作和实时同步。对于需要这些能力的站长和开发者来说,Triplit提供了一个比Firebase更灵活、比自建同步层更省力的选择。自托管方案也让你完全掌控用户数据。

来源:

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容