如果将80GB的XML数据导入MySQL需要5天以上才能完成吗?
我目前正在导入一个大小约为80GB的XML文件,我正在使用的代码在gist中,虽然一切正常,但它已连续运行了近5天而且它甚至没有接近完成......
平均表格大小大致为:
Data size: 4.5GB
Index size: 3.2GB
Avg. Row Length: 245
Number Rows: 20,000,000
如果需要更多信息,请告诉我们!
服务器规格:
注意这是一个linode VPS
Intel Xeon Processor L5520 - 四核 - 2.27GHZ 4GB Total Ram
XML示例
https://gist.github.com/2510267
谢谢!
在研究了更多关于这个问题之后,这似乎是平均的,我发现这个answer描述了提高进口率的方法。
答案 0 :(得分:2)
有一件事有助于提供更多的事情,而不是每次一次。我建议从每几百行开始一次提交,然后从那里调整。
此外,你现在正在做的事情是你做存在检查 - 转储那个;它大大增加了您需要运行的查询数量。相反,使用ON DUPLICATE KEY UPDATE
(MySQL扩展,而不是符合标准)来复制INSERT
自动做正确的事。
最后,考虑构建工具以将XML转换为适合与mysqlimport
工具一起使用的文本形式,并使用该批量加载器。这将干净地将XML解析所需的时间与数据库摄取所需的时间分开,并通过使用为此目的而设计的工具(而不是INSERT
或UPDATE
命令,{{{{{{ 1}}使用专门的mysqlimport
扩展名。)
答案 1 :(得分:0)
这可能(可能)与您的速度问题无关,但我建议仔细检查iterparse的行为是否符合您的逻辑。在启动事件发生时,它可能已经或可能没有加载节点的文本值(取决于它是否恰好适合它所解析的数据块),因此您可以获得一些相当随机的行为。
答案 2 :(得分:0)
在没有看到你的代码之后,我有3个快速的建议。尝试类似的东西
做这些事情大大提高了我工作的类似项目的速度。 也许如果您发布了一些代码和示例xml,我可以提供更深入的解决方案。 (编辑,抱歉错过了要点......)