我有一个分隔文件,我用它通过.net应用程序在sql server表中插入/更新记录。 该文件包含约80000条记录,并且每天都进行处理。 我的问题:当我旋转80000行的每一行时,是否保持打开数据库的连接是安全的或者明智的,还是应该关闭连接并重新打开循环的每次迭代?这听起来很麻烦。 但是,我担心长时间保持开放连接,锁定并不必要地占用内存。 什么是更具扩展性,安全和明智的方式来做到这一点?在.net中长时间运行数据库操作
回答
首先,不应该每行打开/关闭连接。对于80,000行,这将会花费很长时间,并会增加开销。你可以考虑批处理行(重新设置每10-500行连接)。幸运的是,有更好的选择:
其次,从.Net应用程序插入/更新多行到数据库的正确方法是使用SQLBulkCopy methods,而不是INSERT或UPDATE命令。您应该使用SQLBulkCopy将数据行加载到暂存表/暂存表中,然后使用SQL存储过程对en-mass中的实际表进行插入/更新。
如果您担心SQLBulkCopy的持续负载,它具有内置的批处理选项。
使用这种技术,数据的初始上传应该是至少快5倍,而实际的表插入/更新应该只是几秒钟的事情。
我曾经需要导入数据。但我必须在其上运行一些小型业务规则。 另外在我的要求是导入尽可能多的行,但如果有任何失败,记录它(但不要失败整个导入)。
我写下面的例子。
我向下传递的记录N个(N = 1000示例)〜XML来存储的过程。
N应该是可配置的,以找到一个“甜蜜点”。但是,一次一个太慢,而且一次有8万个似乎很多。 1,000(行)x 80“运行”....是一个很好的起点,恕我直言。
因此,如果您的导入是“哑”,那么先前建议的“SQLBulkCopy”可能是最好的方法。 但是,如果您有任何检查或验证,那么我的样本可能是一个很好的建议。
.......
另一种选择:
http://msdn.microsoft.com/en-us/library/ms162802.aspx 的Bcp.exe
但是,这是不是真正的 “点网码”。
所以这是一个VS2005的例子。男人,我变老了!如果我今天这样做,我会的。 (1)使用VS2010(至少)。 (2)更改EnterpriseLibrary v5,它已经具有OleDb的可用性,并且(3)将我的TSQL更改为不使用OPENXML,而是使用“节点”语法。示例:http://pratchev.blogspot.com/2007/06/shredding-xml-in-sql-server-2005.html – granadaCoder 2013-02-11 21:15:10
- 1. 数据库更新 - 长时间运行操作失败
- 2. 异步操作 - 确定操作是否长时间运行
- 3. 长时间运行文件操作和执行超时
- 4. 中止数据库表的长时间运行过程:想法?
- 5. VBA行操作执行时间太长
- 6. Web(asp.net)环境中的长时间运行操作(线程)
- 7. Azure Worker执行长时间运行操作失败
- 8. 在JavaScript中运行一个长操作?
- 9. Quartz.Net中的长时间运行作业
- 10. Android的长时间运行的服务和数据库
- 11. 使用长时间运行的数据库迁移脚本
- 12. django长时间运行的进程数据库连接
- 13. Servlets,长时间操作
- 14. 如何处理长时间运行的Web服务操作?
- 15. C#Winform的:与异步长时间运行操作等待
- 16. ,是长时间运行的静态操作的瓶颈吗?
- 17. ASP.NET MVC和长时间运行的操作
- 18. 斯卡拉演员:长时间运行io操作
- 19. ASP.NET Web API +长时间运行操作取消
- 20. 使用AJAX进度条长时间运行Plone操作
- 21. C/C++ - 模拟长时间运行操作
- 22. 从Windows服务处理长时间运行的操作
- 23. 使用MOSS Publishing Infrastructure支持长时间运行的操作
- 24. 存储在数据库中的平均操作时间
- 25. 如何取消AJAX长时间运行的MVC操作客户端(在JavaScript中)?
- 26. Android数据库操作执行时间的变化
- 27. 长时间运行的作业Spring
- 28. 警告正在主线程上执行长时间运行的分析操作?
- 29. 在忙于长时间运行的操作时Ping应答WCF服务
- 30. 在SQL Server中执行长时间运行的作业
请定义'很长时间':小时?这是在一个事务中运行吗?你指的是什么锁?你在哪里使用内存,在SQL或在应用程序服务器?我不敢要求详细说明更具可扩展性和安全性...... – rene 2013-02-11 19:27:50
目前我用于测试的样品只需要大约一个小时即可完成。但是,如果实际文件增长时,我将它移到生产它会更长。我没有使用单个事务。 – 2013-02-11 19:33:02
你的sqlserver超时了吗?它可以处理一个额外的工人吗?订单是否重要? – rene 2013-02-11 19:40:20