Python 将数据从XML文件大容量加载到MySQL的性能

Python 将数据从XML文件大容量加载到MySQL的性能,python,mysql,xml,xml-import,Python,Mysql,Xml,Xml Import,将80GB的XML数据导入MySQL需要5天以上的时间吗 我目前正在导入一个大约80GB大小的XML文件,我使用的代码就在这里,虽然一切正常,但它已经连续运行了近5天,甚至还没有完成 表的平均大小大致如下: Data size: 4.5GB Index size: 3.2GB Avg. Row Length: 245 Number Rows: 20,000,000 如果需要更多信息,请告诉我 服务器规格: 注意:这是一个linode VPS 英特尔至强处理器L5520-四核-2.27GHZ 4

将80GB的XML数据导入MySQL需要5天以上的时间吗

我目前正在导入一个大约80GB大小的XML文件,我使用的代码就在这里,虽然一切正常,但它已经连续运行了近5天,甚至还没有完成

表的平均大小大致如下:

Data size: 4.5GB
Index size: 3.2GB
Avg. Row Length: 245
Number Rows: 20,000,000
如果需要更多信息,请告诉我

服务器规格:

注意:这是一个linode VPS

英特尔至强处理器L5520-四核-2.27GHZ 4GB总Ram

XML示例

谢谢



在对这个问题进行了更多的研究之后,这似乎是一般的,我发现这描述了提高进口率的方法。

这(可能)与您的速度问题无关,但我建议再次检查iterparse的行为是否符合您的逻辑。在开始事件发生时,它可能加载了节点的文本值,也可能没有加载(这取决于它所解析的数据块中是否包含该文本值),因此您可以获得一些相当随机的行为。

在尝试类似的操作后,我有3条快速建议,但没有看到您的代码

  • 优化代码以获得高性能是一篇很好的文章
  • 调查
  • 重写代码以利用多个cpu,这是python本机无法做到的
  • 做这些事情大大提高了我从事的类似项目的速度。
    也许如果您发布了一些代码和示例xml,我可以提供更深入的解决方案。(编辑,抱歉,没有听到要点…

    一件非常有用的事情是减少提交频率,而不是每行提交一次。我建议从每几百行提交一次开始,然后从那里进行调优

    还有,你现在正在做的事情,你在做一个存在性检查——扔掉它;这大大增加了需要运行的查询数量。相反,在重复密钥更新时使用
    (一个MySQL扩展,不符合标准)自动执行重复的
    插入操作


    <>最后,考虑将您的工具从XML转换为适合于使用<代码> MySqLimPosie/Cuth>工具的文本格式,并使用该大容量加载程序。这将清晰地将XML解析所需的时间与数据库摄取所需的时间分开,并通过使用为此目的而设计的工具(而不是
    INSERT
    UPDATE
    命令,
    mysqlimport
    使用专门的
    LOAD DATA INFILE
    扩展)加快数据库导入本身的速度.

    您是否尝试过分析代码以查看时间花在哪里?您可以尝试更改事务日志,这样不会使事情陷入困境:您是否在一个小测试中尝试了代码以确保其工作正常?没有,我没有,但是我说过,一旦我让导入顺利地运行整个文件,我就会这样做因为我并不急于停止当前导入的运行。我只是更想知道这是否正常。我疯狂地在大约50MB大小的小型导入上测试了这一点,导入不到5秒,我也知道它是有效的,因为我可以进入MySQL,看到数据不断地被导入,并在Top上观看导入。代码发布在一个要点中,我在问题的第二句中引用了一个链接。我已经阅读了文章#1,系统运行在一个四核上,这个四核已经相当均匀地分配了mysql/python的负载,所以重写以利用多核真的有帮助吗?啊,一个bug,谢谢!应根据导入类型排除存在性检查,该导入类型被错误地从工具的最新更新中删除,我还将查看mysqlimport工具。将其标记为已接受,因为发现了一个bug,并提供了一个有助于提高性能的提示:)