簡體   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