日期:2014-05-18  浏览次数:20424 次

分布式系统结构讨论
项目情况:总店和分店的模型.
总店:主要负责:人员及权限等管理,基础数据,以及与其它系统的接口,综合分析查询.
分店:主要负责:本店的进销存.
(总店与分店是专线联接,但要求分店在网络故障时可以单独运行)
(分店有硬件操作,比如IC卡读写等,不太可能直接联到总店操作一切数据)

现在我考虑两种方式:
一.以总库为主
数据库:
总店:只建一个总店的数据库.
分店:每个分店一个数据库.
操作方式:
总店的相关数据用MQ传给分店,写入分店的表中.
分店的进和销的数据再用MQ传给总店,写入总店的表中,在总店的数据库中处理.
分析:
---------这是目前采用的方式,这样处理,大量的数据同步采用了人工方式,用MQ来操作,目前已经因为数据同步的问题而烦.

二.以分店为主
数据库:
总店:建一个总店的数据库,同时再为每个分店建一个分店的镜像数据库(不做操作,只是同步每个分店的数据库).
分店:建一个总店的镜像数据库(不做操作,只是同步总店的数据库),建自己单独的分店的数据库.
操作方式:
1.总店只操作对外的接口和必须在总店集中处理的数据,处理完成后,用数据库的镱像或发布订阅方式下发给每个分店.
2.分店收到总店分发的数据后,在分店所建的总库镜像数据库中用触发器把相关数据传给当前分店数据库相关表中.
3.分店的业务处理,只在分店的数据库中进行.
4.分店的业务数据,用数据库的镱像或发布订阅方式下发给总店的当前分店的镜像数据库中.
5.总店收到分店分发的数据后,在这个分店的镜像数据库中用触发器把相关数据传给总店数据库相关表中.
6.数据的综合分析,以及对外输出接口,就在总店的数据库中进行.
分析:
---------这是我刚刚的想法.

疑问:
1.不知道 "以分店为主 "是否比 "以总库为主 "要好?
2. "以分店为主 "中不知道总店与分店的数据分发用镱像或发布订阅方式是否比MQ好?
3. "以分店为主 "中触发器是否可靠?
3.除了以上方式,是否还有更好的处理方式?

请广泛讨论,谢谢.

------解决方案--------------------
不建议用触发器, 它有实时性要求, 如果网络有故障, 则很容易出问题(错误处理控制不好的话, 还会搅乱数据)


可以考虑复制/订阅

镜像不太现实, 镜像端是不可用的, 通过数据库快照也只能看到某个时间点的数据

如果网络不太稳定, 速度不太好, 用消息队列应该是不错的选择(楼主的MQ就是这个吧)

当然, 如果没有实时性的要求, 则可以考虑ftp+压缩+定时同步, 当然, 这个要求手工写同步处理, 实现起来有些麻烦.
------解决方案--------------------
你这种情况采用合并复制应该是最好的选择了。
------解决方案--------------------
同意邹老大的说法

用复制来操作同步分店与总店之间的数据,可以将分店的数据同步的总店
------解决方案--------------------
具体操作可以参考SQL的联机帮助中的复制功能

也可以参考:
http://blog.csdn.net/sxycgxj/archive/2006/01/06/571949.aspx
http://blog.csdn.net/sxycgxj/archive/2005/09/30/492765.aspx
------解决方案--------------------
分店可以做为发布服务器,总店做为订阅服务器