跳到主要内容

WorkingTreeCaptureBatch

Defined in: packages/rxdb-plugin-working-tree/src/working-tree/capture-runtime.ts:269

一批变更共用的捕获上下文

Remarks​

批级的意义只有一个:同一个事务里,读两遍的东西只读一遍。

  • 令牌(active 分支 + activation revision)两个字段来自两张表,逐变更重读一次就是每条变更 2 次查询。同事务里的第二次读只可能读回第一次那个值——token 校验要拦的是「另一个 realm 在 期间切过分支」,而那种切换要么在本事务开始前已经提交(第一次读就看得见),要么在本事务提交前 落不了地(本事务正持着工作树行的写锁)。
  • 状态行只在第一次 bumpWorkingTreeRevision() 时读出来,此后在内存里累加, 由 WorkingTreeCaptureBatch.flush 一次写回。中间态的 workingTreeRevision 在事务内 无人可读,可观测的只有提交后的终值,而终值与逐条读改写逐字相同。

一条都没捕获时一次查询都不发:untracked 域整批被挡掉是常态,那种批次不该为了 「先把状态行读出来备用」付一次 IO。

Methods​

flush()​

flush(): Promise<void>;

Defined in: packages/rxdb-plugin-working-tree/src/working-tree/capture-runtime.ts:289

把本批攒下的 workingTreeRevision / entryCount 一次写回状态行

Returns​

Promise<void>

Remarks​

没有任何一条变更走过 bumpWorkingTreeRevision() 时不发语句。必须在同一个事务里调用, 且排在全部条目落盘之后:反过来的话,条目写失败时 revision 已经 +1,而它是 commit 的 CAS 依据。


portFor()​

portFor(key): WorkingTreeCapturePort;

Defined in: packages/rxdb-plugin-working-tree/src/working-tree/capture-runtime.ts:280

为这一批里的一条变更造端口

Parameters​

ParameterTypeDescription
keyWorkingTreeEntryKey这条变更的实体身份

Returns​

WorkingTreeCapturePort

绑在该身份上的端口

Remarks​

每条变更各造一个,不按身份复用:同一实体在一批里连写两次时,第二次必须重新读一遍既有行—— 它要读的正是第一次刚落下去的那一行。