用途:帮助理解 SpacetimeDB 架构与核心概念,适用于学习该技术或进行架构选型。SpacetimeDB 将关系型数据库与应用服务器合为一体,应用逻辑以 WebAssembly 模块上传到数据库内运行,客户端直连数据库,省去传统 Web/游戏服务器层。
主要能力与概念:
- 表:所有状态存于表,采用关系模型,支持 SQL 订阅查询;表分私有(默认)与公开(客户端可读,写入仍需 Reducer)。建议按访问模式而非实体拆分表。
- Reducer:事务性函数,是客户端修改状态的主要入口;原子、隔离、不可访问网络或文件系统、不返回数据、必须确定性。
- 订阅:客户端注册 SQL 查询,先收到初始数据,再实时接收变更,通过回调响应。
- 模块:WebAssembly 包,含表、Reducer、视图、事件表、过程(Beta);服务端可用 Rust、C#、TypeScript(beta)编写。
- 身份:基于 OIDC,Identity 为长期唯一标识,ConnectionId 标识具体连接;授权必须用 ctx.sender(),不可信任参数传入的身份。
必要用法(CLI): spacetime start spacetime publish <db-name> --module-path <module-path> spacetime generate --lang <lang> --out-dir <out> --module-path <module-path> spacetime logs <db-name>
适用场景:实时游戏、协作应用、聊天与消息、实时仪表盘等需要低延迟与自动实时同步的场景。
限制:不适合批处理分析(偏 OLTP 非 OLAP)、大对象存储、无状态 REST API。Reducer 无副作用、无返回值,读取须走订阅;自增 ID 不连续,不可用于排序。资料未提供具体收费与价格信息。