您好我在PHP中创建一个读取原子文件的组件并获取进程的xmls列表,我需要解析它们并将数据插入数据库。
对于每种类型的XML(新闻,分数,日程安排),我都会这样做
事情是我的机器上有很多ram和内核,但是列表不断增长,待处理的待处理文件总体上越来越大。
我想知道如何处理让我们说10个文件同时我有ram和核心处理,但如果我处理一个待定的列表将永远变得更大。
我很欣赏一些想法并为我的英语道歉
答案 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请求提供了一个简单的接口。