用途:帮助理解 SpacetimeDB 的架构与核心概念,适合在学习阶段或做架构选型时参考。
主要概念:SpacetimeDB 把关系型数据库与应用服务器合并为单一可部署单元,应用逻辑以 WebAssembly 模块上传到数据库内运行,客户端直连数据库。其特点包括内存执行、写入 WAL 持久化、变更实时推送给订阅客户端、单一部署。
核心规则:Reducer 是事务性的,不向调用方返回数据,读取要靠订阅;Reducer 必须确定性,不能有文件系统、网络、定时器或随机;数据通过表/订阅读取;自增 ID 不连续,不能用于排序;ctx.sender 是已认证主体,授权只能用它,不能信任参数传入的身份。
主要能力:表(关系模型,支持公有/私有与索引、唯一、主键、自增)、Reducer(唯一的写入口)、订阅(SQL 查询实时复制行与变更回调)、模块(表、Reducer、视图、Procedures 测试版)、身份(基于 OIDC 的 Identity 与 ConnectionId)、类型系统 SATS(含 BSATN 与 SATS-JSON 序列化)。
使用方式:CLI 命令如 spacetime start、spacetime publish <db-name> --project-path <module-path>、spacetime generate --lang <lang> --out-dir <out> --project-path <module-path>、spacetime logs <db-name>。实现功能时按后端建表、后端写 Reducer、客户端订阅、客户端调用 Reducer、客户端渲染的顺序,避免只做后端而忘记接线。调试可依次检查服务器是否运行、模块是否发布、绑定是否生成、日志与 Reducer 是否被调用。
适用场景:实时游戏、协作应用、聊天消息、实时仪表盘、IoT 等需要低延迟与自动实时同步的场景。不太适合批量分析(偏 OLTP 而非 OLAP)、大对象存储与无需实时同步的无状态 API。模块语言支持 Rust、C# 与测试版 TypeScript。未来横向扩展等细节资料未给出具体说明。