将多个xml文件导入到Sql Server 2008的最佳方法是什么,这些文件的数量非常大(例如:30000),具有不同的模式?
我目前正在遍历每个文件,将数据加载到datatable
并使用SqlBulkCopy
插入数据,但这需要花费大量时间(大约1.5小时)。
答案 0 :(得分:3)
这不应该花这么长时间。根据我的估计,你获得了大约600MB的数据;你应该能够毫不费力地接近10MB / s或至少 1MB / s - 这意味着1-10分钟应该很容易实现。
怎么做:
没有更多细节,很难准确,但我可以推测:
SqlBulkCopy
通常很快,因此您的插入可能不是瓶颈。你可以比数据表快一点,但它可能不是问题。DataTable
可以拥有"索引&#34 ;;即主键和约束。这些实施效率非常低 - 这些肯定会导致问题。SqlBulkCopy
速度很快,但许多行的情况最佳。{li>如果您每SqlBulkCopy
只复制一个文件,则意味着30000个调用,并且数据库端可能至少有30000个fsyncs。您应该只使用一个SqlBulkCopy
。XmlDocument
并使用大量低效循环和/或XPath查询它),您可能会遇到CPU负载问题。考虑到这一点,我将按此顺序查看以下内容
DataTable
的效率低下)SqlBulkCopy
个实例 - 只使用一个(每个帖子)订单的灵感来自于检查此问题的难度。磁盘负载不太可能存在问题,但检查起来很简单,因此您最好从消除这种可能性开始。数据库架构问题不太可能,但它们需要更多的工作来识别(它是哪个索引,我是通过删除它来影响另一个工作流吗?)所以我要检查最后一个。<\ n / p>