从运程Teradata数据库到本地SQL Server数据库的离线快速数据压缩传输方案

需求是从美国总部的Teradata数据库每天定时传几百MB的增量数据到中国分部的SQL Server数据库,需要在两个小时以内完成。考虑到直接采用数据库直连的方式传输,由于网络不稳定和网络带宽较低,很难完成这样的快速数据传输的需求,我们采用离线压缩传输的方式实现。所以解决这个问题的思路有两个方向,一是对传输的数据分割成多块,以便可以实现断点续传,并进行数据压缩,二是选择传输速率较快的数据链路来传输分块的压缩数据。
具体的实现方案为先在美国借用或架设一台跳板服务器,因为是美国的服务器连接同在美国的Teradata数据库速度比较快并且连接稳定。首先,编写C#一个编写程序调用TeradataDataReader对象来读取Teradata数据库的增量记录,接着将读取的记录分批写入多个DataTable对象,然后将DataTable对象序列化成XML字符串,将字符串使用UTF-8编码为字节数组并使用LZ4压缩算法来压缩,压缩以后的数据保存为文件,上传到企业级网盘Box。这里是考虑到LZ4压缩算法能很好的支持多线程环境,获得更高的压缩和解压速度,比较适合运行在服务器操作系统上。另外,内存压缩数据的方式减少了程序运行过程中磁盘的I/O,提高了运行效率。还有,考虑到Box网盘在中国和美国的网络下读写速度都比较快,所以使用它作为数据临时存储的区域。之后,将压缩以后的数据文件从Box网盘中取出,传输到中国的SQL Server服务器,编写程序解压缩文件为字节数组,使用UTF-8解码为XML字符串,再反序列化为DataTable对象,然后将DataTable对象分批用SqlBulkInsert对象导入stage表,最后将增量数据合并到ods表。由于数据库保存的都是文本、数字和日期信息,数据的压缩率较高,数据传输优化的效果较为明显。
最后,我们使用SQL Server Agent Job作为数据压缩传输的自动化控制程序,同时使用C#应用程序的appconfig配置文件来配置各种数据传输的参数。具体操作上,在美国的跳板服务器上安装SQL Server,创建一张表用来存储增量数据的最后更新时间戳作为增量更新数据的凭据,并使用SQL Server Agent Job来调用将数据从Teradata数据库抽取并分割文件上传到Box网盘的应用程序。在中国的数据仓库服务器上也安装SQL Server,并使用SQL Server Agent Job调用美国服务器的SQL Server Agent Job完成Teradata数据库的增量数据的抽取、压缩和上传数据文件到Box网盘,接着等待这个SQL Server Agent Job完成,然后启动本地服务器的C#程序来完成从Box网盘下载数据文件、解压缩和导入SQL Server数据库并进行历史数据合并的操作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值