您的位置:首页 > 其它

关于数据的异步传输之我见 转载请注明!

2011-06-09 14:19 169 查看
数据传输需求:

将A服务器的Oracle数据库数据(注,该表的数据量巨大,检索都比较慢,不考虑再优化),抽取符合要求的数据通过网络传输到异地的B数据库服务器。那么如何保证数据传输的正确性,可靠性呢?

根据理解,主要有以下几点需要关注的问题:

1、直接从A服务器抽取数据通过网络传输到B,由于整个过程花费时间过长,容易导致Session失效,不合适。

2、整个过程任意一个过程发生异常,处理起来比较复杂,无法或者说很难准确定位异常的发生的具体时间和具体的数据。

3、B服务器入库过程中,如果需要检查数据的重复性,也是额外的时间消耗。

4、整个过程不能在一个事务中完成,否则,就会出现2的过程。

5、其它问题,无法保证数据的可靠性、有效性;即使能够保证也要花费较大的代价(时间、空间)去完成。

解决方案:

根据要求,我们可以将整个过程分为五个阶段,各个阶段都相对独立,只有少量的数据交互。



通过上图,我们增加临时表和缓存技术,

整个过程是清晰的,透明的。

具体的实现:

三、具体的实现
1事务一:A服务器数据表到临时表的过程,如下图所示(这里,我们将下面的从原始表到临时表的状态定义为“OtoT”——Origine
to Temp):



2事务二:A临时表到服务端缓存的过程,如下图所示(这里从临时表到缓存的计数器定义为TtoC——Temp
to Cache):



在临时表取数据的过程中,通过参数设置可以定义批次的数据量,假设定义的数据量为100,那么每次从临时表取100条数据,并压缩成一个byte[]数据流。计数器是按照byte[]的个数决定的,而非原始数据100决定。
3事务三:A端缓存到B端缓存过程如下图所示(B端缓存的计数器为CtoC):



4事务四:B段缓存到B端临时表的过程如下图所示:



5事务五:B临时表到目的表过程如下图所示(这里,我们将下面的从临时表到目的表的状态定义为“TtoT”——Temp
to Target):



转载请注明:www.blog.csdn.net/coolwzjcool
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: