c# - 加载 XML 文件

标签 c# .net xml sql-server-2008 xsd

我目前正在加载大量(1KB - 6MB 的数千个文件)XML 文件,并将它们加载到目标数据库中。目前,我正在使用 SQLXMLBULKLOAD COM 对象。我遇到的最大问题之一是 COM 对象在我们的事务环境中并不总是表现良好。还有其他问题,比如性能;这个过程真的开始阻塞接近 ~2MB 的文件,需要几分钟,如果不是在某些情况下更长(几小时)加载到表中。

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

1) 类似于 OPENXML,其中 XML 作为 XML 数据插入到 SQL Server 中

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

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

无论我选择哪种解决方案,我都必须满足以下要求:

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

2) 必须在 1 分钟内处理单个文件(绝不会超过 ~6MB)(理想情况下甚至比这快得多)。

3) 插入的数据必须能够容纳现有的查询和 SPROCS(即,最终必须作为普通的行集数据结束)

那么我的问题是,您有遇到过这种情况吗,您的想法和见解是什么?

我并不完全反对类似 OPENXML 的解决方案,只要数据在某个时候可以作为普通行集数据结束即可。我也对您可能有经验的第 3 方解决方案感兴趣,这是我们流程的重要组成部分,如果它能为我们提供最好和最稳定的解决方案,我们愿意花一些钱。

我也不反对“自己动手”的建议,或 Codeplex 上的东西,等等。我遇到了 LINQ to XSD 项目,但找不到太多关于它的功能的文档(就像我感兴趣的事情的考试)

最佳答案

我会重新审视您在使用 SQLXMLBULKLOAD COM 时遇到的性能问题。我以前用这个组件加载过 500MB 的 xml 文件。你能发布你用来调用组件的代码吗?

关于c# - 加载 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9341977/

相关文章:

c# - 如何使用 C# 从 XML 中提取标签到 XLS

c# - 如何避免两种方法中的代码重复?

c# - 重新发送 HttpRequestMessage - 异常

c# - 将文件附加到 iCalendar

C# 字符串比较等于 false

xml - 使用 xmllint 添加属性

c# - 微软 Visual Studio : How to exclude certain Project Folders from publishing?

android - 布局中均匀分布的按钮

python - 解析时转义错误的 XML

c# - LINQ 等效于 std::partition