项目中大数据量插入,您是如何做的。

took123 2011-11-28 09:32:25
工作几年了,长进不大。在项目中总遇到这样的情况。

刚开始工作:
两个数据库,将一个库中的数据插入到另外一个库中。(肯定不能在数据库操作,因为有业务逻辑。)我就通过SQL先到一个库查询得到DataSet,再循环这个DataSet插入到另外一个库中。数据量不大几百条吧,速度还可以。总想优化下,但不知道啥合适的方案。

现在工作中:
比以前难度加大。同样是两个数据源,同样不能数据库同步。因为一个是webService获取的XML.我先将XML变成实体类。然后在查本地数据库,查询结果是同样的实体类。这实体类有个主键。

然后我就循环、嵌套循环。判断本地库中是否有不存在的XML中的数据。取出结果后。

我再循环插入数据库,天啊。。百万条数据,插入好慢啊。开多个线程效果也不是特别明显。

加入您在项目中遇到这种情况您会怎么处理呢?

谢谢
...全文
2389 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
jxww2008 2011-12-05
  • 打赏
  • 举报
回复
你可以试试SQL 的OPENXML
TonyXQQ 2011-12-03
  • 打赏
  • 举报
回复
WebService就是这个德性没办法
jAmEs_ 2011-12-02
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 took123 的回复:]

但如果说我大量插入换成大量更新呢 这个如何处理
[/Quote]
sqlbulkcopy到临时表,update
grart 2011-12-02
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 sp1234 的回复:]

今天不是有人发帖,只要弄几个智力测验题,老板就发工资了。不用搞开发了。
[/Quote]人家不懂上来问问么,何必那么小心眼呢。
yanyuchonglou 2011-12-01
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 liuhaijun1018 的回复:]
一天有两亿7千万条怎么弄
[/Quote]

一秒3125条,你的数据分析可能需要重来吧。
pcshell123 2011-12-01
  • 打赏
  • 举报
回复
sqlbulkcopy 的确很好用 对LZ的第二个问题同样很感兴趣 如果是大量更新怎么办 大量更新肯定设计到逻辑 还可能反复需要查询数据库,不知道有没有好的思路
sxcong 2011-11-30
  • 打赏
  • 举报
回复
大数据量插入用NoSql最合适
其实就算对传统数据库,哪怕是MySql,百万条数据根本就不算什么。
你的问题其实是处理和存储的逻辑没有协调好,和SqlBulkCopy什么的没关系。
处理的速度慢,插入的速度快,但你是在循环中等处理完再去插入,感觉上就是数据库操作慢了。提高速度的访问就是开个线程池来处理数据,处理一批后,比如一万条,触发事件,让写线程去写数据库,这时可以用事务或上面说的SqlBulkCopy什么的。有可能整体速度并没有提高太多,但很明显数据库的压力小多了。

不管是Sql server,Mysql,更不用说Oracle,单纯地insert,update处理个百万条数据是很轻松的事情。如果有感觉很耗时,很慢的情况,都是耗在了逻辑处理上。把逻辑处理和数据库的访问的关系处理好效率就自然提高了。
liuhaijun1018 2011-11-30
  • 打赏
  • 举报
回复
一天有两亿7千万条怎么弄
samyou 2011-11-30
  • 打赏
  • 举报
回复
不懂。
gogodiy 2011-11-29
  • 打赏
  • 举报
回复
SSIS包很好用。
一直在冬眠 2011-11-29
  • 打赏
  • 举报
回复
我前几天也做了这个大量数据的插入和更新,很是头疼,我没有使用sqlbulkcopy批量插入,以前也不知道有这么个东西。正好可以学习下。
我就在程序里直接根据条件判断,有这条数据就更新,没有就插入。将这个判断和更新插入语句拼接到程序里,然后将拼接好了的字符串一次性传给数据库处理,不过也不是很快,我这里是3万多条数据差不多用了3-5分钟。楼主,你不嫌慢的话可以参考一下。
took123 2011-11-29
  • 打赏
  • 举报
回复
但如果说我大量插入换成大量更新呢 这个如何处理
赵4老师 2011-11-29
  • 打赏
  • 举报
回复
大量更新的话:
暂停服务,删除索引,更新,重建索引,继续服务。
或者
拷贝数据到新表,在新表上更新,建立索引,将旧表改名为临时名字,再将新表改名为和旧表同名。
giszinc 2011-11-28
  • 打赏
  • 举报
回复
如果是ORACLE呢???
jhdxhj 2011-11-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 shiyuyao1987 的回复:]
使用sqlbulkcopy批量插入,速度很快的
[/Quote]
做个记号
山东蓝鸟贵薪 2011-11-28
  • 打赏
  • 举报
回复
可能是语句有问题吧
萧炎 2011-11-28
  • 打赏
  • 举报
回复
自己写代码 自动生存sql语句
比如写一个方法
public void write(string str)
{

}
这个方法的目的就是在本地生成一个txt记事本 ,然后将str添加到这个记事本中
这个str就是你手动生成的sql比如
write("insert XX values("+a+","+b+")")........
叫我三三 2011-11-28
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20110628/16/f623c173-749a-48ee-86ac-e1c5fdbe1976.html
DENQH 2011-11-28
  • 打赏
  • 举报
回复
1.SqlBulkCopy
2.不直接和数据库对比,所有操作在dataset中完成,再用dataApater.update
黄亮 2011-11-28
  • 打赏
  • 举报
回复
SqlBulkCopy

拼接Sql
加载更多回复(13)

110,536

社区成员

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

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

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