转:http://blog.csdn.net/fangaoxin/article/details/5752526
对于大型企业,业务分布在世界各地,为了改善当地业务服务能力,不得不在当地部署数据库以提高性能,而各个区域之间的数据交互或者同步,成为不可不面对的问题。其间要解决的技术问题主要有:
1、同步数据的提取。从数据库里提取出需要同步的数据,这包括增、删、改三类动作对数据造成的改变。在数据表安装触发器是提取同步数据的简单有效的手段,而且触发器对应用层而言是透明的,应用程序感觉不到触发器的存在。
2、同步数据的可靠传输。数据传输可以用队列来实现,例如有MSMQ、IBM MQ Series等。
3、数据冲突与操作冲突的规避、发现和解决。数据冲突是指两个节点合并数据时,出现约束冲突的情况;而操作冲突是指两个节点同时发生对同一条记录发生操作,导致在双向同步时难以决定两个操作执行的先后顺序。
触发器安装在各个要同步的数据表上,记录对表的增删改操作。所有操作共同记录在一张操作日志表上,以便保证操作发生的顺序。数据发送服务提取操作日志表上的数据,通过消息队列传输到远程服务器,远程服务器接收队列数据后,写入到远程数据表里,从而完成数据同步。
在方案中,本地和远程节点在结构上是对等的,是发送方同时也是接收方,由以下几个部分组成:
1、 数据库服务器:Oracle / SQL Server / DB2 等
2、 操作日志:记录数据表的增删改操作
3、 消息队列:消息队列服务,负责通讯,例如发送和接收消息
4、 抽取发送服务:从操作日志表提取数据,写入消息队列
5、 接收写入服务:从消息队列读取数据,写入到数据库
6、 配置管理服务:配置同步任务、管理监控系统执行情况
7、 配置管理工具:管理配置工具的客户端
8、 适配器:消息队列适配器,减少队列依赖
9、 异常信息库:存放一些无法处理的冲突和意外错误,供管理员处理