同步策略
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做问题排查与追溯