使用C#将XML文件加载到MySQL的最快方法是什么?

Age*_*rum 12 c# xml mysql load-data-infile

将大型(> 1GB)XML文件转储到MySQL数据库的最快方法是什么?

数据

有问题的数据是StackOverflow知识共享数据转储.

目的

这将用于我正在构建的离线StackOverflow查看器,因为我希望在我无法访问互联网的地方进行一些学习/编码.

我希望在项目完成后将其发布到StackOverflow成员的其余部分以供自己使用.

问题

最初,我一次读取XML /写入DB一条记录.这需要大约10个小时才能在我的机器上运行.我正在使用的hacktastic代码现在将500条记录抛出到一个数组中,然后创建一个插入查询以一次加载所有500条(例如" INSERT INTO posts VALUES (...), (...), (...) ... ;").虽然速度更快,但仍需要数小时才能运行.显然这不是最好的方法,所以我希望这个网站上的大脑会知道更好的方法.

约束

  • 我正在使用C#构建应用程序作为桌面应用程序(即WinForms).
  • 我使用MySQL 5.1作为我的数据库.这意味着诸如" LOAD XML INFILE filename.xml"之类的功能在此项目中不可用,因为此功能仅在MySQL 5.4及更高版本中可用.这种约束很大程度上是因为我希望该项目对我以外的人有用,而且我宁愿不强迫人们使用Beta版本的MySQL.
  • 我希望将数据加载到我的应用程序中(即没有指令"在运行此应用程序之前使用'foo'将转储加载到MySQL中.").
  • 我正在使用MySQL Connector/Net,因此MySql.Data命名空间中的任何内容都是可以接受的.

感谢您提供的任何指示!


到目前为止的想法

将整个XML文件加载到列中的存储过程,然后使用XPath对其进行解析

  • 这不起作用,因为文件大小受max_allowed_pa​​cket变量的限制,默认情况下设置为1 MB.这远远低于数据转储文件的大小.

Shi*_*iji 12

这有两个部分:

  • 读取xml文件
  • 写入数据库

对于读取xml文件,此链接http://csharptutorial.blogspot.com/2006/10/reading-xml-fast.html显示,使用流读取器可以在2.4秒内读取1 MB,即2400秒或对于1 GB文件,40分钟(如果我的数学工作这么晚).

从我所读到的,获取数据到MySQL的最快方法是使用LOAD DATA.

http://dev.mysql.com/doc/refman/5.1/en/load-data.html

因此,如果您可以读取xml数据,将其写入LOAD DATA可以使用的文件,然后运行LOAD DATA.总时间可能少于您正在试验的小时数.