SpacetimeDB:数据库和服务器,它合成了一个

SpacetimeDB:数据库和服务器,它合成了一个

SpacetimeDB 在 GitHub 上已经拿到 24,751 Star 了。

这个项目做了一件很直接的事,把数据库和服务器合成一个东西。你把业务逻辑写成模块,直接部署到数据库里,客户端连上来就能用,中间不用再套一层服务器。

1、 这东西解决什么问题

传统后端开发的套路是:前端请求,服务器处理,数据库读写,服务器返回,前端更新。这条链路上每个环节都要单独维护,服务器要部署,数据库要运维,中间还得加缓存、加消息队列。

SpacetimeDB 的思路是把这些全砍掉。它本身就是一个数据库,同时也是一个服务器。你用 Rust、C#、TypeScript 或 C++ 写好模块,定义好表结构和业务逻辑,直接丢进去。它会编译你的代码,在数据库内部运行,状态变了自动同步给所有连接的客户端。

正文顶部截图

2、 怎么做到的

SpacetimeDB 里有两个核心概念:表(Table)和缩减器(Reducer)。表存数据,缩减器就是你的业务逻辑。客户端连上来之后,调用缩减器写数据,订阅表读数据。数据一变,数据库自动把更新推给所有订阅了这张表的客户端。

不需要轮询,不需要 WebSocket 手动封装,不需要写 REST 接口。客户端直接和数据库通信,延迟降到最低。

所有数据都在内存里,访问速度快。同时有一套提交日志在磁盘上,保证宕机后能恢复。它提供了传统关系型数据库的全部 ACID 保证,同时又有 Web 服务器的响应速度。

README区域截图

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 本身,得把改动分享出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值