绪论
最近在做数据报表相关的业务模块,遇到很多问题,好烦。
事情是这样的:数据来源于其它两个厂商,数据库和服务都在内网,使用的数据库分别是甲厂商SQL server和乙厂商PostpreSQL。我们服务在外网,内外不通,需要定期从内网拷贝数据到外网。所以要先写一个数据导出客户端,还有上传文件接口。客户端可以参考我的这篇文章 《Qt:一键导出客户端》。
过程
- 甲厂商数据库选出了49张表,部分表字段在160+,部分表数据量在一百万以上,比较好的就是表之间比较独立,没什么外键关联。所以我们数据库也要建立这些表,问题在于我们数据库是MySQL,字段上需要调整。在网上找到破解版DB2DB可以直接从SQL server把表结构和数据导入到MySQL,但是中间也有错误发生,所以还需要去对照调整一下字段类型,不过这已经节省了我们很多时间。
- 由于使用工具导数据时候有错误,为了防止缺失数据,所以需要把这些表数据都删除,使用其它方式导入数据。还有为了防止导入重复数据时发生主键冲突,我们需要修改每个表,单独创建主键。
- 之后可以使用一键导出客户端进行数据导出,一开始我打算导出数据使用excel,分成49个sheet页,但是速度太慢,一个表100条数据就花了大约70秒。后来改用导出txt文件模式,49张表,每个100条,时间大约8秒。试着导出两年的数据,不到两个G。
- 需要注意的是,导出数据时要注意编码,还有SQL service数据库特殊字段类型,还有出现空值的情况。
- 导入数据时,使用了批量数据导入,每张表弄了一个集合,但是依然出现了内存溢出,所以进行了一个逻辑判断,当读取100条数据时就批量存一次,完美解决。
(若有什么错误,请留言指正,3Q)