关于线上线下数据同步的想法(待验证)

前段时间遇到一个问题,就是用户多设备登陆管理数据,线上线下同步的问题,这两天想了想,出了个大概想法,思路如下:


对于每个用户,线上,线下每个设备端,各创建一张表,用于记录数据操作记录,记录的字段如下:


UUID,修改日期,操作类型(删除/增加),其他信息


用户首次注册,表均为空。


线下操作,增加记录/删除记录时,查看表内是否有相同UUID的记录,有便覆盖,更新日期及操作类型。

这样每条记录都只对应一个具体的操作,也就是当前最新的结果。

紧接着还需更新数据库,即记录对应的操作。

每次打开应用时应根据操作记录表来确认数据库的正确性。


用户首次登陆或每次打开应用,连上网之后,与线上进行同步匹配,就是线上操作。

线上操作,将线下表的内容与线上表比较,以修改时间先后为基准,有一下几种情况:、


对于相同UUID的记录:

1.如果线下修改时间晚于线上修改时间,那么线下记录覆盖线上记录,并对线上数据库做相应的操作;

2.如果线上修改时间晚于线下修改时间,那么线上记录覆盖线下记录,并对线下数据库做相应的操作;


对于不同UUID的记录(即线上有的记录线下没有,反之同理):

1.如若是增加操作,那么线上记录添加到线下,并做相应数据库操作,反之线下记录添加到线上,做相应操作;

2.如若是删除操作,那么线上记录添加到线下,并做相应数据库操作,反之线下记录添加到线上,做相应操作;



测试用例:

1.当操作时线下crash:操作没有完成,对应的增加/删除操作也没有执行,假如是crash在操作记录前,没什么影响;假如是crash在操作记录后,数据库操作之前,那么第二次重启程序时,会进行记录的匹配,crash后没完成的操作继续完成。


2.当同步时由于网络或者其他原因线上操作失败:那么线下记录并没有被删除,程序再次运行时,继续与线上匹配同步;


3.当同步时线上操作成功,而线下crash,得到结果后线下记录并没有修改:软件再次运行时,继续与线上匹配同步,由于修改时间和线上一样,那么记录不用覆盖,线下记录被删除


4.当同步时线上操作成功,而线下crash,线下记录修改成功,数据库没有修改成功:程序再次打开时,根据操作记录再次操作数据库。


5.当网络不好线上操作没完成,线下同时crash,那么此时都没有操作


此构思为个人暂时想法,欢迎添加测试用例,欢迎指正!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值