数据库--服务器SqlServer,客户端Sqlite。
需求:
一、客户端会有多个Sqlite数据库,SqlServer中的数据是所有Sqlite数据库中数据的全集。
二、客户端某一个Sqlite数据库中的某些数据发生改变了或新增了某些数据,当把Sqlite数据库的DB文件上传到服务器上后要把Sqlite中的修改后的和新增的数据同步到SqlServer中(Sqlite修改过的数据要覆盖SqlServer中的数据(主键相同),新增的数据直接添加即可,未变动的数据不做处理)。
注:同一个Sqlite不可能会有两个人同时上传。
问题:
如何能更直接过滤出Sqlite中要执行覆盖的数据,同时保证客户端数据与服务器数据保持一致?
已知方法:
SqlServer和Sqlite中的每条数据加上版本号,所有数据有一个整体大的版本号,以大版本号为基础,根据小版本号进行数据覆盖,最后同时更新大版本号。
这个方式虽然能解决问题,但是有点太麻烦,要同时保证本地刚上传的Sqlite和已上传到服务器上的Sqlite以及SqlServer这三个数据库的版本一致。
大家有没有什么好的想法,可以留下讨论下。
之前做个一个类似的,我们当时是要做一个进销存系统,要求app端必须要可以离线工作一段时间。
我们当时的解决方案是给每条数据都加上创建时间和最后更新时间,数据软删除,主数据库记录每个客户端数据库最后的同步时间,同时增加一个获取服务器时间的api接口用于客户段校队时间。
但是这种方式,包括我提到的方式有个问题,该如何考虑多个人上传相同的数据时要以谁的为准呢?比如说A的10条数据与B的10条数据完全一样,A上传了10条数据,B改动了其中一条数据后也上传这10条数据,该以谁的为准呢?。