多端数据同步


这是在一个叫摘月的手机应用中用到,服务端存储是ssdb,客户端是sqlite。要保证数据最终一致,每个对象数据完整。现在此应用早已不在。

1. 追加式操作日志+数据版本

缺点:
1. 已经无效的历史操作也会回放一遍,费时费流量
2. 日志量大,要清除太旧日志才行,这导致太旧数据版本的客户端要全量更新
3. 每个操作点加日志麻烦

2. 数据增改zset by lst, 删除日志

数据分为实体数据与关系数据
每个model一个zet by lst(数据模型增改时间戳有序集合)
在增改时zset且去除对应删除日志
客户端更新数据先更增改,再更删除(删除时比较删除日志lst与同id的lst,大于model的lst才删)
* 数据删除日志,用于各客户端数据更新,同一个model有增改时删除与此对应的记录,某model有删除时在此添加记录
* zset, hk=pre+uid+数据type, k=数据id/关系id对, score=lst
public final static Key Del_Log = new Key("z:del:%d:%d:by:lst");
缺点:
1. 如果服务器时间被改动,则所有zset by lst都会有问题
运维规定:服务器启动后要保证时间是正确的,且运行中途也不能改时间,这就像不能在上面随便rm -rf一样
2020/11/18 00:00
回首页