发布网友 发布时间:2022-05-20 17:27
共1个回答
热心网友 时间:2023-11-04 05:38
你说的数据同步,既然同步,客户端是一定要有存储数据的,这个存储无论是数据库还是XML或者其他的格式。以一个小型应用为例,比如通讯录吧。服务端应该是一个数据中心,客户端对应的也应该有一个相同的数据表,存储本地数据。正如你说的没有网络的时候,不影响使用。如果你的软件是多用户或者多租户版本的。服务端的表结构应该多出一个tenantID和userID来区分用户和租户的数据。客户端和服务端的表结构应该都有创建时间和最后更新时间(可以作为谁同步谁的依据,但不是唯一的。)正如@任文彬提供的思路,但是我觉得这个思路还是比较适合文件类的同步,对于数据库信息的同步,经常涉及到查询比较,性能上可能不会太好。所以不如再增加一个字段“状态”,状态可以分为1待更新,2更新中,3已更新,4待删除,5删除中,6已删除等等。比如客户端进行新增操作,数据插入本地表中,状态为1待更新,同步数据从服务器返回2更新中,更新本地表状态为2,服务器同步完成,更新本地表状态已更新。这样做的好处是,其中无论哪个环节出了问题,比如机器突然断电,或者突然断网,等下次重新使用的时候,都可以根据表的状态码来确定数据是否需要更新。软件的应用场景比如是这样的:客户端是在公司的内网,供用户在公司的桌面端使用,那么内网服务器保存的就是本地数据,但是用户还可能外出的时候通过移动设备来使用软件,这个移动端使用的就应该是服务端的同步数据了。按照这种思路,客户端增删改->改变本地状态码->同步数据中->改变本地状态码->同步完成->改变本地状态码,那如果移动设备对服务端的数据操作呢?也需要改变服务端状态码为待更新、待删除(删除应该区分对待),下次登录客户端的时候自动检查服务端的“状态”为“待操作的”,然后服务端同步到客户端。这样无论是对本地表操作,还是对服务端的直接操作,都可以保证两个表的数据是同步的。涉及数据同步的还需要考虑到数据表主键同一时空唯一性的问题。