2011-02-16 88 views
3

有人可以请指导我解决这个问题吗?在C中处理巨大的xml文件的方法#

在我的机构中,我们处理巨大尺寸(最大1 GB)的xml文件并将详细信息插入到数据库表中。按照当前的设计,我们使用XmlReader解析xml文件,并用所需的数据形成一个xml字符串,然后将其传递到存储过程(xml数据类型),以便将详细信息插入到db中。

现在的问题是我们不确定是否会有更好的方法比这个更好?所以请建议.Net 3.5和/或sql server 2005提供的任何新功能是否可以比我们的方法更好地处理这个问题。

任何帮助在这reagrd将不胜感激。

谢谢。

+3

1GB的XML?这是巨大的。 – 2011-02-16 08:46:31

+1

是“不[ab]使用xml的那个”一个有效的答案? – 2011-02-16 09:22:35

+0

@Filip Ekberg:那是多么巨大? – BoltClock 2011-02-16 09:26:56

回答

1

你是否在乎XML文件中的所有内容?如果没有,您可以使用StreamReader并从XML获取文本,并将其传递到数据库。

如果您需要验证XML是否正确,最好使用XmlReader

但是,仅仅将1GB的XML转储到数据库中似乎有点奇怪,这个XML数据的目的是什么?它有很多嵌套元素吗?也许你可以反序列化它,并将每个对象存储在appropriet表中,这样会导致更容易理解的设计。

有你能想到的几件事情,使你的软件的设计更容易/更好:

  • 才会有超过一个XML文件中的数据库occure一次?
  • 数据如何在应用程序之间共享?
  • 您是否考虑过使用MemoryMappedFile
  • 是否可以将XML反序列化为实体,并将它们存储在应用程序中?
0

我怀疑如果有任何性能问题,它会与存储过程和数据库的东西,而不是读取文件。

为什么要将XML文件存储在数据库表中?我建议使用不同的解决方案将是适当的,但不知道更多的细节,确切地说,你正在尝试做什么很难提供建议。

0

如果XML中的每个第一级元素是一个记录,即

<rootNode> 
    <row>...</row> 
    <row>...</row> 
    <row>...</row> 
</rootNode> 

然后,你可以创建一个IDataReader FPGA实现,它读取XML(通过XmlReader),并提出了各自的记录,需进口使用SqlBulkCopy。非常像我的旧回答here

优点:

  • SqlBulkCopy获取数据到数据库
  • 剥成记录最快的方式让适当使用的数据库,允许索引和正确的打字
  • 它不依赖于以原子方式通过网络的巨大BLOB(对于xml数据类型是必需的)