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

时间:2015-07-06 04:06:20

标签: php xml dom

您好我在PHP中创建一个读取原子文件的组件并获取进程的xmls列表,我需要解析它们并将数据插入数据库。

对于每种类型的XML(新闻,分数,日程安排),我都会这样做

  1. 获取XML列表以进行处理
  2. 在数据库上插入XML URL并将进程状态设置为= 0
  3. 循环列表
  4. 打开XML URL保存到磁盘
  5. 过程
  6. 放置文件状态= 1
  7. 下一步
  8. 事情是我的机器上有很多ram和内核,但是列表不断增长,待处理的待处理文件总体上越来越大。

    我想知道如何处理让我们说10个文件同时我有ram和核心处理,但如果我处理一个待定的列表将永远变得更大。

    我很欣赏一些想法并为我的英语道歉

2 个答案:

答案 0 :(得分:1)

您将数据库用作队列。这通常是不鼓励的(有更好的软件可以做到这一点),并且您在示例中遇到了典型的问题:

您获得的流程状态字段已使用值0进行初始化。然后,您使用值0处理每个条目。让我们说处理一个条目需要10分钟。并且每分钟插入一个URL。因此,您需要并行处理10个URL以应对插入速率。让我们通过:

播放
  • 因此,在第一分钟,您插入第一个URL,然后开始处理它。当10个处理器采用状态为0的第一个URL时,所有10个处理器都处理第一个URL。

  • 在第二分钟,您插入第二个网址,但仍然会处理第一个网址的十倍。

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

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

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

答案 1 :(得分:0)

您可以在第4步尝试类似divide and conquer 的内容。以下是parallel batch processing的简单实现。

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