思考一个问题:
比如很多离线的app(比如:react native的app),在同步数据到后端数据库的时候,这个功能一般是如何进行设计实现的?
这里主要有几个问题:
1、因为本地的数据和远端的数据会持续增长,肯定不是一起把所有数据都同步,请问
1)是否是基于数据库的lastUpdate 时间来进行对比进行更新;
2)本地app对比远端数据库没有这条数据(本地新增的),就进行上传是吗?
3)然后同步的时候还要计算远端新增的(其他app同步过去的),同步下载到本地app。
2、认为这个对比的方式应该很多应用都有实现,所以是否有现有的三方库或者方案可以直接应用呢?
这个功能可以说是丰俭由人,根据你的业务需要、产品规模,可以有不同的实现。
比如说笔记类产品,通常是“本地优先”,联网同步是副产品,甚至是收费功能。大部份东西存储在本地,由用户自己负责。所以这类产品最简单的做法就是你把所有东西都放本地,然后放一个脚本慢慢把本地数据网服务器端同步。至于多端,可以只在启动的时候同步一次数据,之后都是本地优先,线上只做备份,不考虑多端同步。
比较复杂的是协作类产品,尤其是实时协作比如在线文档,就会很麻烦,需要一些 CRDT 算法来辅助合并来自不同端的修改。具体的实现有很多,各有优劣。
还有比较居中的,就是数据库同步。可以帮助你把本地和远端的数据库进行同步,而不需要自己写复杂的脚本。这方面有很多实现,随便搜搜就能搜到。