繁体   English   中英

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

[英]Process Multiple XML files at the same time in PHP

你好,我正在用 PHP 制作一个组件,它读取原子文件并获取进程的 xml 列表,我需要解析它们并将数据插入数据库。

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

  1. 获取要处理的 XML 列表
  2. 在数据库上插入 XML URL 并放置进程状态 = 0
  3. 循环遍历列表
  4. 打开 XML URL 保存到磁盘
  5. 过程
  6. 放置文件状态 = 1
  7. 下一步

问题是我的机器上有很多内存和内核,但列表不断增长,待处理的待处理文件总是越来越大。

我想知道如何在处理 ram 和内核的同时处理 10 个文件,但是如果我在某个时间处理一个待处理的列表,则它总是会变大。

我感谢一些想法并为我的英语道歉

您可以在步骤 4 中尝试诸如分治之类的方法。这是并行批处理的简单实现。

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

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

您获得的进程状态字段已初始化为值0 然后处理值为0每个条目。 假设处理一个条目需要 10 分钟。 然后每分钟插入一个 URL。 所以你需要并行处理10个URL来应对插入率。 让我们玩这个:

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

  • 在第二分钟,您插入第二个 URL,并且您仍然处理第一个 URL 的十倍。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM