我目前正在处理大量(数千个来自1KB - 6MB的文件)XML文件,并将它们加载到目标数据库中。目前,我正在使用SQLXMLBULKLOAD COM对象。我遇到的最大问题之一是COM对象在我们的事务环境中并不总是很好。还有其他问题,比如性能;这个过程真正开始窒息接近〜2MB的文件,如果不是在某些情况下(几小时),则花费几分钟加载到表中。
所以现在我正在寻找一种替代品,其中似乎有两种口味:
1)类似于OPENXML,其中XML作为XML数据插入到SQL Server
中或
2)解析XML并在内存中解析,并作为行集加载到数据库中。
这两种方法都存在缺陷,我知道在得出任何结论之前,我将不得不开始对原型解决方案进行一些基准测试。 OPENXML方法是非常有吸引力的IMO,主要是因为它承诺一些非常好的性能数字(其他人声称从几小时到几毫秒)。但它存在将数据存储为XML的缺点 - 在我的特定场景中不理想,因为目标表已经存在,并且许多其他进程依赖于查询和SPROCS那些查询这些表作为普通行集数据。
无论我选择何种解决方案,我都必须满足以下要求:
1)必须接受任何XML文件。客户端(在商业意义上)只需要为数据提供XSD和适当的目标数据库/表。
2)个别文件(绝不大于约6MB)必须在1分钟内处理(理想情况下甚至比这快得多)。
3)插入的数据必须能够容纳现有的查询和SPROCS(即,最终必须以正常的行集数据结束)
所以我的问题是,你对这种情况有什么经验,你有什么想法和见解?
我并不完全反对类似OPENXML的解决方案,只要数据在某些时候最终可以作为普通的行集数据。我也对您可能遇到的第三方解决方案感兴趣,这是我们流程的重要部分,如果它为我们提供最好,最稳定的解决方案,我们愿意花一些钱。
我也不反对“滚动你自己”的建议,或Codeplex上的事情等等。我遇到了LINQ to XSD项目,但找不到关于它的能力是什么的文件(就像我感兴趣的事情(
)答案 0 :(得分:0)
我将重新审视您使用SQLXMLBULKLOAD COM时遇到的性能问题。我以前用过这个组件加载500MB xml文件。您可以发布用于调用组件的代码吗?