2012-02-18 97 views
2

我目前正在加载大量(从1KB到6MB的数千个文件)XML文件,并将它们加载到目标数据库中。目前,我正在使用SQLXMLBULKLOAD COM对象。我遇到的最大问题之一是COM对象在我们的事务环境中并不总是很好玩。还有其他问题,例如表现;该进程真的开始窒息在接近〜2MB的文件上,需要几分钟(如果不再在某些情况下(小时))加载到表中。加载XML文件

所以现在我正在寻找替代方案,其中似乎有两种形式:

1)喜欢的东西OPENXML,其中XML插入为XML数据到SQL Server

2)解析内存中的XML,并作为行集加载到数据库中的解决方案。

这两种方法都有缺陷,而且我知道在我得出任何结论之前,我将不得不开始做一些原型解决方案的基准测试。 OPENXML方法非常有吸引力的IMO,主要是因为它承诺一些非常好的性能数字(其他人声称从几小时到几毫秒)。但是它有将数据存储为XML的缺点 - 在我的特定场景中不理想,因为目标表已经存在,并且许多其他进程依赖查询和SPROCS将那些表作为普通行集数据进行查询。

我选择什么解决方案,我必须满足以下要求:

1)必须接受任何XML文件。客户(在商业意义上)只需要提供一个XSD,并为数据提供适当的目标数据库/表。

2)单个文件(从不大于〜6MB)必须在1分钟内处理(理想情况下甚至比这更快)。

3)插入的数据必须能够适应现有的查询和存储过程(即必须最终落得正常行集数据)

所以我的问题是,你有没有在这种情况下的经验,什么是你的想法和见解?

我并不完全反对类似OPENXML的解决方案,只要数据最终可以作为普通行集数据在某个点。我也对您可能遇到的第三方解决方案感兴趣,这是我们流程的重要组成部分,如果我们为我们提供最佳和最稳定的解决方案,我们愿意花费一些钱。我也不反对“自己动手”的建议,或Codeplex上的事情等。我遇到了LINQ to XSD项目,但找不到有关其功能的文档(只是作为我感兴趣的东西的一个例外)

+0

是否有任何理由不使用SSIS,因为这是它的设计目的? – Lloyd 2012-02-18 14:39:59

+0

我并不反对SSIS,这是我们正在考虑的一种选择。我不是一个SSIS的人,你能告诉我什么是优点吗? – Didaxis 2012-02-18 14:51:56

+1

我更喜欢SSIS,因为如果软件包或其他参数发生变化,那么没有配置文件或重新编译项目只是修改或更新BMO IDE中的SSIS包。下面是我之前跟进的一些SO链接... http:// stackoverflow。com/questions/7203492/imports-and-validating-xml-file-using-ssis-or-just-plain-t-sql http://stackoverflow.com/questions/6956409/ssis-reading-multiple-xml-files -from-folder/6957825#6957825 – Lloyd 2012-02-18 14:58:54

回答

0

我会重温一下SQLXMLBULKLOAD COM的性能问题。我以前使用过这个组件来加载500MB的xml文件。你可以发布你用来调用组件的代码吗?

+0

你可以说大致需要多长时间来加载500MB的XML文件?我见过的大多数'SqlXMLBulkload'贴子都抱怨性能(每MB大约几分钟?)。所以得到一个相反的数据点会很好。不删除约束(或不使用临时表)可能是我猜测的一个问题。 – 2013-06-07 23:10:21

+0

对不起,这是很久以前。我不记得要等很长时间。 – 2013-06-10 06:57:11