首页 新闻 会员 周边

大数据量导入导出问题

0
悬赏园豆:5 [已解决问题] 解决于 2014-10-14 12:56

现在将oracle 数据导出到mdb 。每个oracle 表 都弄成datareader 然后逐条插入 mdb。每个datareader遍历完都关闭,链接也关闭。然后导入下个表的时候重新建立一个datareader ,由于数据量大 这样性能很差。求优化方法。 task? 能用吗? 还是从链接处理方式上优化。求解。。。

差生的主页 差生 | 初学一级 | 园豆:3
提问于:2014-10-08 10:15
< >
分享
最佳答案
0

你需要经常干这事?在我的想象中,这事一年干个一次差不多了。一次花个三五天也没有问题啊,看数据量。

如果需要经常干,比如,那应该也只有第一次数据多点,后面应该只是增量备份吧?

性能差是指备份数据慢,还是指影响到数据库服务器的正常使用,这两个可是要使用完全不同的解决方案的。

如果你的服务器是生产服务器,肯定性能要受其他应用的影响。

如果是脱机服务器,内存多点,CPU好点,硬盘好点,本机备份而非通过网络备份等都可以加快备份的速度的。

收获园豆:5
爱编程的大叔 | 高人七级 |园豆:30839 | 2014-10-08 10:22

现在是 导出个几万条数据 都卡个二三十分钟都完不了 肯定是我写的代码有问题。所以想问问 我上边的思路有什么 需要改进的地方?

差生 | 园豆:3 (初学一级) | 2014-10-08 11:11

@差生:几万条数据,也得看是不是数据里面的字段内容多少啊,你别里面有个图片,那就可怕了。

如果是普通的文本的话,20~30分钟几万条数据确实不应该,有这个时间,差不多可以导出500M以上的MDB了,这时候基本上MDB也快爆了。

如果只是要数据,不要求可还原啥的,将ORACLE数据弄到MDB里面,其实不需要编程的,用ACCESS直接就可以导入ORACLE的数据表(包含数据)的。

如果是编程,你提供的信息不够,有可能代码里面有哪一句性能特别差的。

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-10-08 11:21

@爱编程的大叔: 可以加你 Q 帮下我吗 ?

差生 | 园豆:3 (初学一级) | 2014-10-08 11:29

@差生: 一般不加Q的,你的问题离我太远。

如果可以,你完全可以把问题代码完整贴出来让其他高手看看的,比我厉害的比比皆是。

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-10-08 11:32

@爱编程的大叔: 嗯 ,那你能告诉我 读取 和 插入的时候应该注意些什么吗? 比如在数据库链接问题上,还有 这个有必要用异步来提高性能吗?

差生 | 园豆:3 (初学一级) | 2014-10-08 11:47

@差生: 相对于数据库来说,代码的性能应该是更高的(除非写得很差)。

瓶颈应该是在数据库服务器,所以多线程(异步)只会增加复杂性,个人感觉没有必要。

在代码读取及赋值上,你可以考虑使用AUTOMAPPPER之类的工具(AutoMapper性能还是比较差的,

如果你很在乎性能的话,好象有其他的MAPPER工具性能方面很不错)

你可能就是在数据读取-赋值这块上出问题了。

另外MDB数据文件大了也容易出事。

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-10-08 12:19

@爱编程的大叔: 应该是的,读取都用的datareader,每个表的数据操作都用了自己独立的datareader 用完就关了 操作下个表的时候又开的。 插入就是 在while(datareader.reader()){ insert into tablename (列1,2,3...)values(值1,2,3...)}这样的

差生 | 园豆:3 (初学一级) | 2014-10-08 13:24
其他回答(2)
0

显示打开事务

世界万物 | 园豆:276 (菜鸟二级) | 2014-10-08 16:27
0

像你这个应该分页取出数据,报错时把错误异常信息写在日志里面,根据日志再下载数据。

唯我独萌 | 园豆:537 (小虾三级) | 2014-10-08 16:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册