问题
将大型(> 1GB)XML 文件转储到 MySQL 数据库的最快方法是什么?
数据
有问题的数据是 StackOverflow Creative Commons Data Dump。
目的
这将在我正在构建的离线 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 及更高版本中可用。这个限制主要是因为我希望这个项目对我以外的人有用,我不想强迫人们使用 MySQL 的 Beta 版本。 - 我希望将数据加载内置到我的应用程序中(即没有说明“在运行此应用程序之前使用 'foo' 将转储加载到 MySQL 中。”)。
- 我正在使用 MySQL 连接器/网络,因此
MySql.Data
命名空间中的任何内容都是可以接受的。
感谢您提供的任何指示!
到目前为止的想法
将整个 XML 文件加载到列中,然后使用 XPath 解析它的存储过程
- 这不起作用,因为文件大小受 max_allowed_packet 变量的限制,默认情况下设置为 1 MB。这远低于数据转储文件的大小。