跳到主要内容

同步策略

RxDB 支持在本地与远程之间以多种策略同步或选择性访问数据。通过在创建 RxDB 时配置 sync 选项即可控制行为。

import { RxDB, SyncType } from '@aiao/rxdb';

const rxdb = new RxDB({
dbName: 'demo',
entities: [...],
sync: {
type: SyncType.None, // 本地优先示例
local: { adapter: 'sqlite' }, // 本地适配器(必选)
// remote: { adapter: 'xxx' } // 远程适配器(可选)
}
});

策略类型

  • SyncType.Full(全量同步):本地与远程保持完整数据集一致
  • SyncType.Filter(条件同步):按业务条件同步部分数据集
  • SyncType.None(不同步):仅本地或仅远程

当前远程同步仍在演进中,建议先以 SyncType.None 本地模式验证业务;后续可平滑切换到 Full/Filter

场景与配置示例

1) 只在本地(本地优先)

sync: {
type: SyncType.None,
local: { adapter: 'sqlite' } // 浏览器内置 SQLite(WASM)
}

适用于离线优先、单机或暂未接入服务端的场景。

2) 只在远程

sync: {
type: SyncType.None,
remote: { adapter: 'http' } // 仅访问远程(示例)
}

适用于完全在线、无需本地落盘的后台工具等(需实现对应远程适配器)。

3) 全量同步(Full)

sync: {
type: SyncType.Full,
local: { adapter: 'sqlite' },
remote: { adapter: 'http' } // 远程适配器(示例)
}

适用于数据量可控、希望两端完整一致的场景。

4) 条件同步(Filter)

sync: {
type: SyncType.Filter,
local: { adapter: 'sqlite' },
remote: { adapter: 'http' } // 示例:服务端按用户、项目等过滤数据
}

适用于多租户、大数据量或只需子集的业务(需要在远端实现过滤逻辑)。

分支与版本

同步策略与“分支(Branch)”能力相互独立:

  • 分支由本地适配器管理(如 SQLite),通过 createBranch/switchBranch 操作;
  • 可在本地构建多个版本/实验分支,再选择 push/merge 到远端;
  • 见“数据协作”章节了解变更记录与分支合并策略。
// 以 SQLite 适配器为例(需先 rxdb.adapter('sqlite', ...) 并 connect)
const local = await rxdb.getAdapter('sqlite').toPromise();
await local.createBranch('feature-x');
await local.switchBranch('feature-x');

最佳实践

  • 先本地后远端:先用 SyncType.None + local 验证模型与交互,再增加远端
  • 合理拆分数据域:按团队、项目、空间划分同步边界
  • 清晰的冲突策略:约定字段层级的合并/覆盖规则
  • 日志与审计:结合 RxDBChange 做问题排查与追溯