SpacetimeDB:数据库和服务器,它合成了一个
SpacetimeDB 在 GitHub 上已经拿到 24,751 Star 了。
这个项目做了一件很直接的事,把数据库和服务器合成一个东西。你把业务逻辑写成模块,直接部署到数据库里,客户端连上来就能用,中间不用再套一层服务器。
1、 这东西解决什么问题
传统后端开发的套路是:前端请求,服务器处理,数据库读写,服务器返回,前端更新。这条链路上每个环节都要单独维护,服务器要部署,数据库要运维,中间还得加缓存、加消息队列。
SpacetimeDB 的思路是把这些全砍掉。它本身就是一个数据库,同时也是一个服务器。你用 Rust、C#、TypeScript 或 C++ 写好模块,定义好表结构和业务逻辑,直接丢进去。它会编译你的代码,在数据库内部运行,状态变了自动同步给所有连接的客户端。

2、 怎么做到的
SpacetimeDB 里有两个核心概念:表(Table)和缩减器(Reducer)。表存数据,缩减器就是你的业务逻辑。客户端连上来之后,调用缩减器写数据,订阅表读数据。数据一变,数据库自动把更新推给所有订阅了这张表的客户端。
不需要轮询,不需要 WebSocket 手动封装,不需要写 REST 接口。客户端直接和数据库通信,延迟降到最低。
所有数据都在内存里,访问速度快。同时有一套提交日志在磁盘上,保证宕机后能恢复。它提供了传统关系型数据库的全部 ACID 保证,同时又有 Web 服务器的响应速度。

3、 支持哪些语言
服务端模块支持四种语言:
- Rust
- C#
- TypeScript
- C++
客户端 SDK 也覆盖了主流平台:
- TypeScript(React、Next.js、Vue、Svelte、Angular、Node.js、Bun、Deno)
- Rust
- C#(独立项目和 Unity)
- C++(Unreal Engine)
基本上前后端常见的技术栈都覆盖了。
4、 安装和上手
安装一行命令搞定:
# macOS / Linux
curl -sSf https://install.spacetimedb.com | sh
# Windows (PowerShell)
iwr https://windows.spacetimedb.com -useb | iex
登录:
spacetime login
会打开浏览器用 GitHub 账号认证。
然后直接开始开发:
spacetime dev --template chat-react-ts
这一条命令会从模板创建项目,发布到 Maincloud,然后监听文件变化,保存时自动重新构建和发布。整个过程不需要手动配置任何东西。
5、 实际用例
SpacetimeDB 团队自己的大型多人在线游戏 BitCraft Online 就跑在这上面。聊天系统、物品系统、地形数据、玩家位置,全部作为一个单独的 SpacetimeDB 模块运行,实时同步给数千名玩家。
这说明它的性能和稳定性已经经过了实际生产环境的验证,不是只停留在 demo 阶段的玩具。
6、 部署方式
可以用 Docker 一行命令启动:
docker run --rm --pull always -p 3000:3000 clockworklabs/spacetime start
也可以从源码编译,需要 Rust 工具链和 wasm32-unknown-unknown target。编译完之后把二进制文件放到系统路径里就行。
7、 许可证
SpacetimeDB 用的是 Business Source License 1.1。四年后会转成 AGPL v3.0,但带有一个链接例外:你用 SpacetimeDB 写的业务代码不需要开源,只需要把对 SpacetimeDB 本身的改动贡献回来。
这个许可的意思是,你可以在自己的商业项目里随便用,不用公开自己的代码。但如果你改了 SpacetimeDB 本身,得把改动分享出来。
pacetimeDB 本身的改动贡献回来。
这个许可的意思是,你可以在自己的商业项目里随便用,不用公开自己的代码。但如果你改了 SpacetimeDB 本身,得把改动分享出来。

288

被折叠的 条评论
为什么被折叠?



