记录:从SQL Server数据库导出数据上传到服务器,存储到MySQL数据库

绪论

最近在做数据报表相关的业务模块,遇到很多问题,好烦。
事情是这样的:数据来源于其它两个厂商,数据库和服务都在内网,使用的数据库分别是甲厂商SQL server和乙厂商PostpreSQL。我们服务在外网,内外不通,需要定期从内网拷贝数据到外网。所以要先写一个数据导出客户端,还有上传文件接口。客户端可以参考我的这篇文章 《Qt:一键导出客户端》

过程

  1. 甲厂商数据库选出了49张表,部分表字段在160+,部分表数据量在一百万以上,比较好的就是表之间比较独立,没什么外键关联。所以我们数据库也要建立这些表,问题在于我们数据库是MySQL,字段上需要调整。在网上找到破解版DB2DB可以直接从SQL server把表结构和数据导入到MySQL,但是中间也有错误发生,所以还需要去对照调整一下字段类型,不过这已经节省了我们很多时间。
  2. 由于使用工具导数据时候有错误,为了防止缺失数据,所以需要把这些表数据都删除,使用其它方式导入数据。还有为了防止导入重复数据时发生主键冲突,我们需要修改每个表,单独创建主键。
  3. 之后可以使用一键导出客户端进行数据导出,一开始我打算导出数据使用excel,分成49个sheet页,但是速度太慢,一个表100条数据就花了大约70秒。后来改用导出txt文件模式,49张表,每个100条,时间大约8秒。试着导出两年的数据,不到两个G。
  4. 需要注意的是,导出数据时要注意编码,还有SQL service数据库特殊字段类型,还有出现空值的情况。
  5. 导入数据时,使用了批量数据导入,每张表弄了一个集合,但是依然出现了内存溢出,所以进行了一个逻辑判断,当读取100条数据时就批量存一次,完美解决。

(若有什么错误,请留言指正,3Q)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值