集合运行时
集合运行时
集合运行时是每次读取与写入的服务器端。它把查询编译成 SQL、评估策略、运行钩子、门控审批并记录审计——全部在同一条决策路径中完成。
查询编译
客户端的读取与写入以结构化操作到达,而非原始 SQL。运行时对照编译后的 schema 编译它们——包括连接、过滤与投影——因此租户代码从不拼接 SQL 字符串。
策略评估
每个操作都对照操作主体的 策略 评估:行条件收窄 SQL,脱敏剥离属性,审批配置决定直接、降级、门控或拒绝。
变更路径
client.db.<collection>.mutate(values)
│ precisely typed root + explicitly included relationships
▼
┌─────────────────────────────────────────────┐
│ canonical mutation pipeline │
│ 1. before hooks validate + patch input │
│ (outside the transaction) │
│ 2. policy evaluation → direct / reduced / │
│ gated (approval) / denied │
│ 3. root + relationships commit atomically; │
│ bolt_collection_history and │
│ bolt_sync_outbox rows ride the txn │
│ 4. after hooks + task enqueue (settle) │
└────────────────────┬────────────────────────┘
│ bolt_sync_outbox
▼
every local replica - 客户端通过 client.db.<collection>.mutate(values) 发送精确类型化的根记录以及任何显式包含的关联
- before 钩子在校验候选数据,位于事务之外——拒绝时什么都不会写入
- 策略评估收窄操作并可能门控:直接、降级、需要审批或拒绝
- 根记录与每个包含的关系在同一个事务中原子对账——历史与 outbox 行同事务写入
- 写入提交后 after 钩子运行,同一事务写入的 outbox 行把变更带给每个副本
读取路径
副本能给出完全一致答案的实时查询——集合、过滤、排序、限制——从不到达服务器;客户端针对按策略过滤的本地副本执行它,而变更日志让副本保持最新。只有在副本仍在构建时,以及对于副本刻意拒绝的那些读取——关联展开、全文搜索、聚合与历史,它们位于本运行时而非查询编译器中——读取路径才等待网络。
单一事务
已包含的关联表示其完整期望状态:其中的行会被插入或更新,已存储但未出现其中的行会被删除,并且显式包含的关联会递归同步。未包含的关联保持不变。根图在一个事务中协调,因此要么所有已提交关联状态全部提交,要么全部不提交;授权、审批、钩子、历史、同步失效与事件仍位于同一条规范变更管线中。
相关指南
编写面是 集合 ;写入走命令通道,而同步引擎负责把已提交变更向外传递。