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

数据传输需求:

 

将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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值