服务端和各种客户端(手机端,平板端,web端)怎么样进行数据同步客户端需要数据库吗若需要,各种客户端对数据增删改查的时候混乱咋办若不需要,没有网络,或者网络很差的时候咋办

最近正准备给产品做数据同步,但还没有具体的考虑架构及同步机制,恰好看到你这个题目,简单说几句我的想法。你说的数据同步,既然同步,客户端是一定要有存储数据的,这个存储无论是数据库还是XML或者其他的格式。以一个小型应用为例,比如通讯录吧。服务端应该是一个数据中心,客户端对应的也应该有一个相同的数据表,存储本地数据。正如你说的没有网络的时候,不影响使用。如果你的软件是多用户或者多租户版本的。服务端的表结构应该多出一个tenantID和userID来区分用户和租户的数据。客户端和服务端的表结构应该都有创建时间和最后更新时间(可以作为谁同步谁的依据,但不是唯一的。)正如@任文彬提供的思路,但是我觉得这个思路还是比较适合文件类的同步,对于数据库信息的同步,经常涉及到查询比较,性能上可能不会太好。所以不如再增加一个字段“状态”,状态可以分为1待更新,2更新中,3已更新,4待删除,5删除中,6已删除等等。比如客户端进行新增操作,数据插入本地表中,状态为1待更新,同步数据从服务器返回2更新中,更新本地表状态为2,服务器同步完成,更新本地表状态已更新。这样做的好处是,其中无论哪个环节出了问题,比如机器突然断电,或者突然断网,等下次重新使用的时候,都可以根据表的状态码来确定数据是否需要更新。软件的应用场景比如是这样的:客户端是在公司的内网,供用户在公司的桌面端使用,那么内网服务器保存的就是本地数据,但是用户还可能外出的时候通过移动设备来使用软件,这个移动端使用的就应该是服务端的同步数据了。按照这种思路,客户端增删改-\u0026gt;改变本地状态码-\u0026gt;同步数据中-\u0026gt;改变本地状态码-\u0026gt;同步完成-\u0026gt;改变本地状态码,那如果移动设备对服务端的数据操作呢?也需要改变服务端状态码为待更新、待删除(删除应该区分对待),下次登录客户端的时候自动检查服务端的“状态”为“待操作的”,然后服务端同步到客户端。这样无论是对本地表操作,还是对服务端的直接操作,都可以保证两个表的数据是同步的。涉及数据同步的还需要考虑到数据表主键同一时空唯一性的问题。比如使用UUID作为主键。不当之处,欢迎指正。
■网友
可以用蒲公英智能组网把服务器和各个端口(手机、平板、Web)组在一个局域网里,就可以实现数据传输同步,客户端根本不要数据库,相当于一个内部的网络,非常安全。
贝锐蒲公英异地组网:如何在家就能远程运维公司内网数据库

■网友
我建议提这种问题,还是先把自己的场景描述一下。比如,你现在是在开发什么客户端,客户端软件主要是做什么的,不然所有回答都是在扯淡。抛开场景在这里分析说各种同步都是没用的。
我举几个很简单的例子吧。
第一种场景,比如微信聊天记录。每当收到一条消息的时候,微信可能将这条聊天记录保存到客户端上的sqllite 数据库上。比如,用户的配置配置文件,微信可能发送到服务器后也会保存到本地的sqllite数据库上,当用户卸载微信重新登录的时候,去服务器拉取一次。
第二种场景,比如采购软件。当采购员需要确定某个条码的货品是否需要进行采购的时候,那么就需要联网去获取,获取完了后,这个数据不保存本地。如果客户端选择取本地数据,服务器将需要非常复杂的逻辑去保证每一台客户端端上的本地数据被更新,这付出的代价非常大。
至于你说的网络很差的情况下,麻烦举例一下什么软件,什么场景。否则都是在耍流氓。
毕竟微信可没保证你在网络差的情况下能收到消息。
【服务端和各种客户端(手机端,平板端,web端)怎么样进行数据同步客户端需要数据库吗若需要,各种客户端对数据增删改查的时候混乱咋办若不需要,没有网络,或者网络很差的时候咋办】 所有的功能在开发的时候,都会做出一定妥协


推荐阅读