图1中节点A和节点B之间进行数据传输,中间有防火墙隔离。大多数的防火墙禁止了直接的T C P/IP端口的访问,这就意味着采用TCP/IP方式进行的数据传输将无法在节点A和节点B之间进 行。而与此同时,大多数的防火墙都开放了http端口80,这就意味着,通过HTTP协议进行的数据传输无需考虑漫长网络路途中无数的防火墙。这种情形下,J2EE应用服务器,如Apusic应用服务器提供了一种供客户端Java程序进行访问的http Tunnel的技术。客户端程序只要简单地调用Java API中的URLConnection对象就可以向服务端发送数据。
抛开防火墙,采用一些专业的数据传输组件,如金蝶中间件的Apusic iMTS,亦可实现良好的数据传输能力。
Apusic iMTS的数据传输过程如图2所示
Apusic iMTS的应用场景如图3所示
数据传输技术中,还有一种可能的方法是采用JMS技术进行传输。JMS是Java的消息服务,一般的J2EE应用服务器都提供了JMS服务。JMS提供了基于主题和队列的两种消息传送方式。基于主题的消息传送指的是多个客户端预定某个主题的消息,然后大致实现点到多点的消息/数据传送,每个客户端都可得到该主题的消息。基于队列的消息传送即服务器以队列的方式发送消息,某一客户端获得该消息时该消息即从该队列中移除。一些应用服务器提供了所谓增强的JMS消息能力,如IBM的消息中间件,大致的原理和功能应用范围与此类似。可以看出,采用基于JMS的数据传输技术,除了较难绕过防火墙外,受限于传输的数据类型(简单的Java对象)和效率等,并不适合用于数据库间的数据复制/整合传输。
3数据平衡技术
所谓数据平衡技术是指数据在2个数据库间的同步。如图4所示。
图4中数据库A为主数据库,数据库B为分数据库。业务数据b主要通过业务系统录入到分数 据库B中,但因为一些特定的原因,业务数据b也可以通过业务系统录入到数据库A中。数据库B中的业务数据b定期更新到数据库A中,与此同时,也应将数据库A上业务系统录入的业务数据b更新到数据库B中。
很显然,这种数据平衡过程需要着重考虑数据长度不一致问题、主键问题及数据结构不一 致问题等。
主键问题主要产生在采用递增数字为主键的场合,如在Oracle中用sequence为主键值。由 于数据库主键的约束,这时不管A至B,还是B至A,数据更新都不会完全成功。怎么办?修改数据库A上表的主键,将其改为UUID形式的字符,同时在A上建立映射表,将A上的表的主键与B上表的主键一一对应。
在数据结构不一致的情况下,应将数据库A中的结构设为最简,并在数据库B中数据合并至 A时用规定的分隔符进行组合。显然,在A上的业务系统应该将结构展示为B上的数据结构,其他跟A上数据表相关的业务系统应该考虑到这种特殊处理场景。
4结语