BranchMaterializationSource
Defined in: packages/rxdb/src/sync-contract/branch-materialization-source.ts:111
远端快照来源:工作树物化流水线与业务数据之间的唯一接缝。
Remarks
成员对应流水线上工作树答不出来的问题:拉到哪为止(意图从远端游标来)、内容是什么 (分页协议是同步层的事)、冻结之后本地配置变没变、一页怎么变成投影(业务实体 工作树不认识)、物化之后同步水位落在哪。除此之外的一切——页序、指纹复核、续用判定、 屏障里的写入与切换——都在工作树里,来源方碰不到。
由官方同步插件在装配时经 RxDB.branchMaterializationSource 登记,一条连接至多一个: 两个来源意味着同一条分支可以被两份互不相识的快照各物化一次,而第二次看到的现场 已经是第一次的结果。
Methods
freezeIntent()
freezeIntent(targetBranchId): Promise<BranchMaterializationIntent>;
Defined in: packages/rxdb/src/sync-contract/branch-materialization-source.ts:121
冻结这次物化的意图。
Parameters
| Parameter | Type | Description |
|---|---|---|
targetBranchId | string | 要物化的目标分支 id |
Returns
Promise<BranchMaterializationIntent>
Remarks
跑在任何事务之外:它要问远端,而网络 I/O 握着写事务不放会把整个库锁到超时。
pages()
pages(request): AsyncIterable<BranchMaterializationPagePayload>;
Defined in: packages/rxdb/src/sync-contract/branch-materialization-source.ts:136
按页交出这份快照。
Parameters
| Parameter | Type | Description |
|---|---|---|
request | BranchMaterializationPageRequest | 见 BranchMaterializationPageRequest |
Returns
AsyncIterable<BranchMaterializationPagePayload>
从 fromPageIndex 那一页起的异步序列;给完即止
Remarks
做成 AsyncIterable 而不是一次给一个数组:整份快照可能是几十万行,一次性驻留内存
与 FR-044 的分页落库互相抵消。每一页背后是一次请求,所以是异步序列。
每一页由工作树各自开一笔事务落库,所以序列在第 N 页上抛出时,前 N 页已经在库里了 ——下一次切换会接着第 N 页拉。
projectPage()
projectPage(context): Promise<SwitchVersionActions<EntityType>>;
Defined in: packages/rxdb/src/sync-contract/branch-materialization-source.ts:160
把一页快照投影成本地写操作。
Parameters
| Parameter | Type | Description |
|---|---|---|
context | BranchMaterializationProjectionContext | 见 BranchMaterializationProjectionContext |
Returns
Promise<SwitchVersionActions<EntityType>>
这一页要落到实体表上的增删改
Remarks
跑在屏障那笔事务里,按页序逐页调;只算不写——写入由工作树经受信调用点统一落库, 来源方不必为屏障里的写另开一张受信入口的票。
resolveIntentDrift()
resolveIntentDrift(context): Promise<string | undefined>;
Defined in: packages/rxdb/src/sync-contract/branch-materialization-source.ts:148
判定冻结之后本地的同步配置是否已经漂移。
Parameters
| Parameter | Type | Description |
|---|---|---|
context | BranchMaterializationBarrierContext | 见 BranchMaterializationBarrierContext |
Returns
Promise<string | undefined>
漂移时返回可读原因;没漂移时返回 undefined
Remarks
续用旧 staging 之前与屏障复核时各调一次,都只能读本地、不得问远端: 屏障里握着写事务。漂移的 staging 不能投影——它是按另一份 scope 或过滤条件拉下来的。
settle()
settle(context): Promise<void>;
Defined in: packages/rxdb/src/sync-contract/branch-materialization-source.ts:171
在屏障里结算来源方自己的状态(例如目标分支的同步水位)。
Parameters
| Parameter | Type | Description |
|---|---|---|
context | BranchMaterializationBarrierContext | 见 BranchMaterializationBarrierContext |
Returns
Promise<void>
Remarks
与投影同一笔事务:水位先于数据落库,下一次拉取会跳过从未落地的那段变更; 数据先于水位落库,下一次拉取会把整份快照再拉一遍。