40个表里面有150万条数据转移 效率难题!跪求 解决方案

lsd1020lsd 2012-04-16 02:11:34
各位大侠

最近我用C# 开发了一套程序,用于把sqlserver2008数据库里面的数据 全部导入到mysql 里面去
我的sqlserver2008 数据库40个表里面有150万条数据,经过筛选后,有条件的导入到 mysql数据库里面。
目前的转换时间 全程是7个小时,导入的方法我写的是 读出的sqlserver放入到DataTable,然后循环 一条一条的插入到mysql,不成功的insert语句要写入log记录(客户要求:不成功的insert语句必须记录)。请问 大家 有没有什么好的解决方案,加快效率!
...全文
144 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
李世东 2012-08-29
  • 打赏
  • 举报
回复
块拷贝
足球中国 2012-04-16
  • 打赏
  • 举报
回复
sql有opendatasource效率N快。
cheng2005 2012-04-16
  • 打赏
  • 举报
回复
如果只是执行一次,那么7小时就7小时呗。没必要纠结。

如果是长期使用。
那么首先要分线程
1,读取,单线程读取应该就可以,
2,处理,这个地方逻辑稍微复杂一点就用多线程处理,处理成功的,插入完成队列,不成功的插入日志队列。(此过程是关键,这个过程中都是内存操作,加速的关键)
3,插入数据库,这地方看你的数据库设计了,一般来说使用多线程,5-10个线程不同的从完成队列里面取数据写数据库就可以了。你可以批量插入,不一定要单条插入。
4,日志线程,专门处理日志,有一个线程慢慢跑就可以了。

主要注意的就2,3其中的多线程该加锁的地方来个锁,别起冲突就行了。
直观感觉不应该这么慢。
magic009 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
不要插入每一条数据就执行到数据库(把需要添加的数据转到内存中 再一次性执行数据库)数据量大时就用多线程解决
[/Quote]

同意
lsd1020lsd 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

不要插入每一条数据就执行到数据库(把需要添加的数据转到内存中 再一次性执行数据库)数据量大时就用多线程解决
[/Quote]
一个块语句,不能记录哪一条insert语句 不成功,只能一起成功 一起失败,我需要的结果是,批量执行,有问题的insert语句 写入log记录即可
lsd1020lsd 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

块拷贝
[/Quote]
这是工作,老板给钱了 就得干呀
yanggangqiang520 2012-04-16
  • 打赏
  • 举报
回复
不要插入每一条数据就执行到数据库(把需要添加的数据转到内存中 再一次性执行数据库)数据量大时就用多线程解决
yyz985 2012-04-16
  • 打赏
  • 举报
回复
7小时的东西,有必要花3天去优化吗
8536105 2012-04-16
  • 打赏
  • 举报
回复
块拷贝

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧