求数据同步的解决方案
系统使用的是C/S架构。总部一个数据库,每个门店单独一个数据库。目前我们自己开发了一个同步的调度程序,会根据配置的同步时间去同步指定的表。同步使用的是WCF。
目前同步场景基本如下:
1.总部的基本资料同步到门店(只会在总部新增修改的数据同步到门店)
2.门店的业务信息同步到总部(只会在门店新增修改的数据同步到总部)
3.总部和门店的数据双向同步(总部和门店都会修改的数据)
前面2种场景就好解决了,主要是第3种,我说下我考虑的情况。
1.当门店和总部都修改了数据,如何合并到一起?
2.总部的数据了,并且同步到门店了,此时两边数据一致
当门店在在界面上正在修改,总部的数据也修改了,并且总部的数据又一次同步到门店了,而门店界面上的数据还是上一次同步的数据,当保存后,又覆盖了新同步的数据,等再门店同步回总部的时候确实门店最新修改的数据。如何处理?
希望大侠们能给点意见。最好是有参考的设计或者解决方案。
小弟感激不尽啊!
------解决方案--------------------这个可以做数据锁,如果门店在修改数据时,界面加载数据后,对改条数据进行锁定。确保数据在门店提交之前数据不能进行修改;还有在数据同步时需判断数据以最新的为准
------解决方案--------------------对于第一个问题,你不和业务确定好数据冲突的规则,估计谁也提不出方案来.即:两边都修改后,同步时,以谁的
为主.
第二个好说, 你只需在显示信息的时候,把最后更新时间一起带过去. 保存时,最后更新时间与数据库的最后更新时间比较,如果一致,说明此次更新有效,不一致,则提示"数据已被同步更新,是否覆盖?" 让用户选择如何处理.
------解决方案--------------------同求,帮顶。
------解决方案--------------------
如果门店 不能 覆盖总部的数据,那怎么双向呢?
还是说 总部修改过的数据 只能总部改,门店不可以改
------解决方案--------------------以数据来源的唯一性为标志,同一时间内多个用户修改同一个数据时,只能有一个用户修改的数据有效,其他的无效,这个是工业统计学中的一个基本论点。
这个不是技术问题,是管理上的问题,也是管理上非常忌讳的事情。
可以制定系统数据修改规则来明确数据来源的唯一性。
------解决方案--------------------
至少,数据中有一个“版本号”,例如版本108。门店数据除了有一个“版本号”以外,还记录着“上一次同步时门店版本号、上一次同步时总部版本号”。注意,仅仅可能在各个门店的数据那里多处这两个版本号来!
当数据同步时,首先判断总部和门店这里的数据,哪一个是新数据。如果两边都是新数据,那意味着“冲突、无法同步”。如果仅仅是门店是新数据,那么就复制到总部;如果仅仅是总部的是新数据,那么就复制到门店。
对于冲突的数据,应该产生一个独立的“对照表”给系统维护人员或者管理人员,由人工判断保留哪一个数据。
------解决方案--------------------不要因为一方“修改了”就胡乱复制到另一方。只要避免胡乱复制数据,就自然知道应该比较数据了。
------解决方案--------------------这跟什么“加锁”之类的纯技术名词儿其实没有关系。如果你做一个单机的小软件“自己玩一玩”,尽可以弄一些技术。而如果你做一个网络软件,并且多人协作,你就不能随便弄什么技术。比如说一个人他操作时眼睛迷糊了,要上眼药水,然后闭目养神休息一会儿,那么他休息时是不是系统里所有人(不管门店还是总部的其他人)都得排着队等他休息完毕了才能继续操作电脑?那样的软件就是荒唐的了。所以这其实正常来说根本不可能弄什么“加锁”,只不过不从实际出发来设计用户体验的人,满脑子只有一点技术。