在PHP中同时处理多个XML文件

在PHP中同时处理多个XML文件,php,xml,dom,Php,Xml,Dom,您好,我正在用PHP制作一个组件,它读取一个atom文件并获取一个XML列表,我需要解析它们并在数据库中插入数据 对于每种类型的XML(新闻、分数、时间表),我都会这样做 获取要处理的XML列表 在数据库上插入XML URL并将进程状态设置为0 环游列表 打开XML URL保存到磁盘 过程 放置文件状态=1 下一步 问题是,我的机器上有很多ram和内核,但列表不断增长,待处理的文件越来越多 我想知道我该如何处理,比如说在处理ram和内核的同时处理10个文件,但如果我一次处理一个文件,待处理的列表

您好,我正在用PHP制作一个组件,它读取一个atom文件并获取一个XML列表,我需要解析它们并在数据库中插入数据

对于每种类型的XML(新闻、分数、时间表),我都会这样做

  • 获取要处理的XML列表
  • 在数据库上插入XML URL并将进程状态设置为0
  • 环游列表
  • 打开XML URL保存到磁盘
  • 过程
  • 放置文件状态=1
  • 下一步
  • 问题是,我的机器上有很多ram和内核,但列表不断增长,待处理的文件越来越多

    我想知道我该如何处理,比如说在处理ram和内核的同时处理10个文件,但如果我一次处理一个文件,待处理的列表就会越来越大


    我很感谢你对我的英语提出的一些想法和建议

    你可以在你的第4步中尝试一些类似a的东西。下面是的一个简单实现


    您也可以尝试平行卷发。PHP类为运行多个并发CURL请求提供了一个简单的接口。

    您将数据库用作队列。通常不鼓励这样做(有些软件做得更好),在您的示例中,您遇到了一个典型的问题:

    您得到的进程状态字段用值
    0
    初始化。然后用值
    0
    处理每个条目。假设处理一个条目需要10分钟。每分钟插入一个URL。因此,您需要并行处理10个URL以应对插入率。让我们通过以下方式来实现:

    • 因此,在第一分钟插入第一个URL并开始处理它。由于10个处理者使用状态为
      0
      的第一个URL,因此所有10个处理者都处理第一个URL

    • 在第二分钟内插入第二个URL,但仍然处理了第一个URL的十倍

    • 在第三分钟,您插入第三个URL,但仍然处理第一个URL的十倍

    等等。你明白了。该状态未正确管理。当您自己设计队列系统时,您需要注意它是否适用于并行需求。您应该为此创建一个组件,并使用假数据和日志彻底测试它,以便跟踪和验证它的操作。然后用这样一个系统来做真正的事情。它可能不会做你想要的一切,但它应该工作得更加健壮

    或者,为已经创建、已经测试并经过工作验证的队列获取组件


    非常感谢您的帮助,我试图了解如何实现这一点,因为CURL和xml下载速度很快,xml处理速度不够,因为每个xml都非常大,节点也非常多,谢谢!!!