工作几年了,长进不大。在项目中总遇到这样的情况。刚开始工作:
两个数据库,将一个库中的数据插入到另外一个库中。(肯定不能在数据库操作,因为有业务逻辑。)我就通过SQL先到一个库查询得到DataSet,再循环这个DataSet插入到另外一个库中。数据量不大几百条吧,速度还可以。总想优化下,但不知道啥合适的方案。现在工作中:
比以前难度加大。同样是两个数据源,同样不能数据库同步。因为一个是webService获取的XML.我先将XML变成实体类。然后在查本地数据库,查询结果是同样的实体类。这实体类有个主键。然后我就循环、嵌套循环。判断本地库中是否有不存在的XML中的数据。取出结果后。我再循环插入数据库,天啊。。百万条数据,插入好慢啊。开多个线程效果也不是特别明显。加入您在项目中遇到这种情况您会怎么处理呢?谢谢

解决方案 »

  1.   

    使用sqlbulkcopy批量插入,速度很快的
      

  2.   

    SqlBulkCopy 类,它可以通过让DataSet或是DataReader中大量的数据通过数据流直接进行装载,然后可以将这些记录添加到指定的数据表中
    我一般大数量处理都是用这个类去处理,你可以尝试下
      

  3.   

    第一个问题你可以用sqlblucicopy函数 ADO.NET的,效率非常高,适合大数据量的同步,我测试过,几万条的EXCEL导入,效率提升了几十倍吧 。
    第二个问题 我木有看懂 ,随手帮你顶下吧!
      

  4.   

    SqlBulkCopy 恩 。以前没听说了,我学习下  先谢谢了
      

  5.   

    SQL SERVER提供了SQL订阅功能,需要开启SQL 代理
      

  6.   

    1.SqlBulkCopy 
    2.不直接和数据库对比,所有操作在dataset中完成,再用dataApater.update
      

  7.   

    http://topic.csdn.net/u/20110628/16/f623c173-749a-48ee-86ac-e1c5fdbe1976.html
      

  8.   

    自己写代码 自动生存sql语句
    比如写一个方法 
    public void write(string str)
    {
       
    }
    这个方法的目的就是在本地生成一个txt记事本 ,然后将str添加到这个记事本中
    这个str就是你手动生成的sql比如
    write("insert XX values("+a+","+b+")")........
      

  9.   

    研究了一上午SqlBulkCopy  还是真不错但如果说我大量插入换成大量更新呢 这个如何处理
      

  10.   

    最近在开发SSIS包,用这个,很快能将大量数据插入到表中,再用C#方法调用
      

  11.   

    数据插入和修改过程中,资源消耗最大的是IO,而不是逻辑运算(如果是远程访问网络问题除外)。 因此,尽量减少IO过程或者提高IO能力才是最重要的,另外便是减少数据传递次数,增加计算机对于IO的使用率。要么升级设备,要么实现拼接SQL语句一次批量修改(减少传递次数),要么多线程(条IO使用率),要么继续等待。所有治标不治本的方法的话,楼主可以不考虑。
      

  12.   

    SqlBulkCopy 确实不错。我程序改进后从原先的3000条数据局一分半优化到现在的几秒钟。但这这适用于插入操作。如果我大批量更新有什么好用的方法吗?
      

  13.   

    我前几天也做了这个大量数据的插入和更新,很是头疼,我没有使用sqlbulkcopy批量插入,以前也不知道有这么个东西。正好可以学习下。
    我就在程序里直接根据条件判断,有这条数据就更新,没有就插入。将这个判断和更新插入语句拼接到程序里,然后将拼接好了的字符串一次性传给数据库处理,不过也不是很快,我这里是3万多条数据差不多用了3-5分钟。楼主,你不嫌慢的话可以参考一下。
      

  14.   

    大数据量插入用NoSql最合适
    其实就算对传统数据库,哪怕是MySql,百万条数据根本就不算什么。
    你的问题其实是处理和存储的逻辑没有协调好,和SqlBulkCopy什么的没关系。
    处理的速度慢,插入的速度快,但你是在循环中等处理完再去插入,感觉上就是数据库操作慢了。提高速度的访问就是开个线程池来处理数据,处理一批后,比如一万条,触发事件,让写线程去写数据库,这时可以用事务或上面说的SqlBulkCopy什么的。有可能整体速度并没有提高太多,但很明显数据库的压力小多了。不管是Sql server,Mysql,更不用说Oracle,单纯地insert,update处理个百万条数据是很轻松的事情。如果有感觉很耗时,很慢的情况,都是耗在了逻辑处理上。把逻辑处理和数据库的访问的关系处理好效率就自然提高了。
      

  15.   

    sqlbulkcopy 的确很好用   对LZ的第二个问题同样很感兴趣   如果是大量更新怎么办  大量更新肯定设计到逻辑    还可能反复需要查询数据库,不知道有没有好的思路