跳到主要内容

集合运行时

集合运行时

集合运行时是每次读取与写入的服务器端。它把查询编译成 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
  1. 客户端通过 client.collection.<collection>.create(input)、createMany(inputs)、.update(id, input)、updateMany(inputs)、.delete(id) 或 deleteMany(ids) 发送声明的输入——所选列加上显式的关联操作
  2. 超出集合输入选择的内容被拒绝,调用方按其提交的形状受到判定,transform 把输入变成负载——拒绝时什么都不会写入
  3. 策略评估决定写入是否继续,授权的审批流可能把它挂起以待评审
  4. 根记录与每个包含的关系在同一个事务中原子对账——历史与 SyncChange 事实同事务写入
  5. 提交后宿主发布变更,其变更的集合让宿主定向找到每个受影响的已注册实时查询

读取路径

每个实时前缀(带连续 limit 的 findMany / findFirst)都会在服务器注册,并按操作主体的策略求值。初始答案经 sync.connect 返回,仅保留在浏览器内存中。提交改变依赖项时,宿主推进受影响的前缀,流上发送带版本栅栏的按键增量——或一次迫使浏览器重新注册的重置。count、findGrouped、带 after 游标的分页、语义搜索以及声明的相似度(最近邻)搜索都是一次性读取,不会登记为实时。

单一事务

关联操作是显式的:关联名下的 `create`、`update`、`upsert`、`link`、`unlink` 与 `delete`。省略的关联或空数组什么都不做,任何东西都不会因省略而被删除。根记录与每个嵌套操作在一个事务中提交,因此要么整张图全部提交,要么全部不提交;授权、审批、transform、历史、同步变更捕获与事件仍位于同一条写入管线中。

编写面是 集合 ;写入走命令通道,而同步引擎负责把已提交变更向外传递。