集合运行时
集合运行时
集合运行时是每次读取与写入的服务器端。它把查询编译成 SQL、评估策略、运行集合 transform、门控审批并记录审计——全部在同一条决策路径中完成。
查询编译
客户端的读取与写入以结构化操作到达,而非原始 SQL。运行时对照编译后的 schema 编译它们——包括连接、过滤与投影——因此租户代码从不拼接 SQL 字符串。
策略评估
每个操作都对照操作主体的 策略 评估:行条件收窄 SQL,字段掩码从读取中剥离属性,`authorize` 谓词决定写入是否继续,根授权的审批流决定直接提交或挂起。超出变更谓词或点名被掩码字段的写入会被拒绝,绝不部分生效。
变更路径
client.collection.<collection>.update(id, input)
│ the declared columns + explicit relation actions
▼
┌─────────────────────────────────────────────┐
│ one write pipeline │
│ 1. refuse anything outside the selection; │
│ judge the caller; run the transform │
│ 2. approval route → committed / held │
│ provisionally under approval_id │
│ 3. root + nested actions commit atomically;│
│ bolt_collection_history and │
│ SyncChange facts ride the txn │
│ 4. sync publish + task enqueue (settle) │
└────────────────────┬────────────────────────┘
│ changed collections
▼
host subscription registry
│ affected live queries
▼
SSE apply frames - 客户端通过 client.collection.<collection>.create(input)、createMany(inputs)、.update(id, input)、updateMany(inputs)、.delete(id) 或 deleteMany(ids) 发送声明的输入——所选列加上显式的关联操作
- 超出集合输入选择的内容被拒绝,调用方按其提交的形状受到判定,transform 把输入变成负载——拒绝时什么都不会写入
- 策略评估决定写入是否继续,授权的审批流可能把它挂起以待评审
- 根记录与每个包含的关系在同一个事务中原子对账——历史与 SyncChange 事实同事务写入
- 提交后宿主发布变更,其变更的集合让宿主定向找到每个受影响的已注册实时查询
读取路径
每个实时前缀(带连续 limit 的 findMany / findFirst)都会在服务器注册,并按操作主体的策略求值。初始答案经 sync.connect 返回,仅保留在浏览器内存中。提交改变依赖项时,宿主推进受影响的前缀,流上发送带版本栅栏的按键增量——或一次迫使浏览器重新注册的重置。count、findGrouped、带 after 游标的分页、语义搜索以及声明的相似度(最近邻)搜索都是一次性读取,不会登记为实时。
单一事务
关联操作是显式的:关联名下的 `create`、`update`、`upsert`、`link`、`unlink` 与 `delete`。省略的关联或空数组什么都不做,任何东西都不会因省略而被删除。根记录与每个嵌套操作在一个事务中提交,因此要么整张图全部提交,要么全部不提交;授权、审批、transform、历史、同步变更捕获与事件仍位于同一条写入管线中。
相关指南
编写面是 集合 ;写入走命令通道,而同步引擎负责把已提交变更向外传递。