delta-sync
Version:
A lightweight framework for bi-directional database synchronization with automatic version tracking and conflict resolution.
182 lines (130 loc) • 3.97 kB
Markdown
1500行,无复杂依赖
- **适配器模式**: 轻松对接任意数据库系统
- **版本管理**: 自动跟踪数据变更,确保同步一致性
- **增量同步**: 仅同步变更数据,提高性能
- **离线支持**: 完整的离线工作支持
- **类型安全**: 使用 TypeScript 编写,提供完整类型定义
- **自动重试**: 网络异常时自动重试
- **批量处理**: 支持批量数据同步
- **完整事件**: 提供丰富的同步事件回调
```bash
npm install delta-sync
```
1. 创建数据库适配器:
```
typescript
import { DatabaseAdapter } from 'delta-sync';
class MyDatabaseAdapter implements DatabaseAdapter {
// 实现必要的接口方法
async readStore<T>(storeName: string, limit?: number, offset?: number) {
// 实现数据读取逻辑
}
async putBulk<T>(storeName: string, items: T[]) {
// 实现批量写入逻辑
}
// ...其他接口实现
}
```
或者使用现成的适配器:
```
import { MemoryAdapter } from 'delta-sync';
```
2. 初始化同步引擎:
```typescript
import { SyncEngine } from 'delta-sync';
const localAdapter = new MyDatabaseAdapter();
const cloudAdapter = new MyCloudAdapter();
const engine = new SyncEngine(localAdapter, {
autoSync: {
enabled: true,
pullInterval: 30000, // 每30秒自动同步
pushDebounce: 5000 // 本地更改5秒后推送
},
onStatusUpdate: (status) => {
console.log('同步状态:', status);
}
});
// 设置云端适配器
await engine.setCloudAdapter(cloudAdapter);
```
3 数据操作:
```typescript
// 保存数据
await engine.save('notes', {
id: '1',
title: '测试笔记',
content: '内容...'
});
// 删除数据
await engine.delete('notes', '1');
// 查询数据
const result = await engine.query('notes', {
limit: 10,
offset: 0
});
```
DeltaSync 采用基于版本的增量同步机制:
1. **本地更改**: 所有通过同步引擎的数据操作都会被自动记录版本信息
2. **变更追踪**: 使用 SyncView 存储所有数据的最新版本信息
3. **增量同步**:
- Push: 将本地新版本数据推送到云端
- Pull: 拉取云端新版本数据到本地
- 冲突处理: 采用"最新版本胜出"策略
4. **离线支持**:
- 离线时正常工作
- 网络恢复后自动同步
- 防止重复同步
```
typescript
engine.updateSyncOptions({
maxRetries: 3, // 最大重试次数
timeout: 30000, // 超时时间(ms)
batchSize: 100, // 批量同步大小
maxFileSize: 10485760, // 最大文件大小(10MB)
fileChunkSize: 1048576 // 文件分片大小(1MB)
});
```
```typescript
const options = {
onStatusUpdate: (status) => {
console.log('同步状态:', status);
},
onChangePushed: (changes) => {
console.log('推送变更:', changes);
},
onChangePulled: (changes) => {
console.log('拉取变更:', changes);
}
};
```
```typescript
await engine.sync();
// 仅推送本地更改
await engine.push();
// 仅拉取远程更改
await engine.pull();
```
开发自定义适配器需实现 `DatabaseAdapter` 接口:
typescript
export interface DatabaseAdapter {
readStore<T>(...): Promise<SyncQueryResult<T>>;
readBulk<T>(...): Promise<T[]>;
putBulk<T>(...): Promise<T[]>;
deleteBulk(...): Promise<void>;
clearStore(...): Promise<boolean>;
getStores(): Promise<string[]>;
}
MIT
一句话介绍:一个极致轻量的双向同步框架
DeltaSync 是一个专门为现代应用设计的数据同步框架,它能帮助开发者轻松实现数据的双向同步、离线存储和冲突处理。无论是 Web 应用、移动应用还是桌面应用,DeltaSync 都能提供一致的同步体验。
- **轻量灵活**: 核心代码不到