2012-07-24 14 views
4

我爲我們的員工組建了一個接口,用於上傳他們需要的行業統計信息的產品列表(目前一次手動執行一次) 。
然後每個產品將通過web服務api提供給我們的統計引擎。
我會回覆。統計引擎將從我的api請求「下一個受害者」。PHP中的編碼理論:需要引導多個隊列的流量(複用)

用戶上傳的每個列表將有50到1000個產品,並且將成爲它自己的隊列。
現在,隊列/列表可能會被添加(&通過完成刪除)aprox每天10-20次。
如果成功,流量可能會在幾個月後增加到每天700-900個列表。

我們只是打算採用簡單的循環法來將流量均勻地分配到各個隊列中。
複用器將搶掉清單A頂部項目,然後列表B,然後名單C依此類推,直到周圍循環回列表A再次......牢記列出/隊列可隨時添加/刪除。

我面臨的問題只是概念化這個管理。
我想過將每個隊列存儲爲一個平面文件並通過關係數據庫(MySQL)管理輪換。思考如何做到相反。想到要麼完全平面文件或完全關係數據庫......底線,我很靈活。
無論如何,當我嘗試用循環旋轉的方式將一個可變的參與者列表(我剛剛從一個快速假期中恢復過來,並且我不認爲我的大腦已經將它帶回家了)時,我的大腦就像蒸氣鎖住了一樣;

有沒有人做過這樣的事情?
你是怎麼處理的?
如果你不得不再做一次,你會有什麼改進?

任何&所有提示/建議/建議是受歡迎的。

注意:由於來自我們統計的引擎/工具的每個請求將被隔開數秒,如果不是幾分鐘,我需要保持這種無狀態。

+0

Add'l info:** 1)**當特定隊列/列表中的最後一項發佈到統計引擎時,我們的通知程序將觸發通知用戶他們可以查看其結果(不需要狀態檢查.. 好極了!!)。 ** 2)** Stat的引擎採用單一產品,運行統計並將它們加載到我們的緩存池中。 – mOrloff 2012-07-24 23:52:50

回答

0

經過一個良好的夜間睡眠,我現在有我的智慧(我希望:)。
一個簡單的解決方案是針對優先級的平面文件。
每行只有一個List/Queue ID的文本文件。
飼料列表的一端,並添加其他...簡單。

批評歡迎;○)

由於@Trylobot和@Chris_Henry用於反饋。

1

列表數據當然應該存儲在數據庫中。你的PHP端應該有一個給出系統狀態的視圖,以及添加列表的表單。

由於每個請求都成爲它自己的隊列,並且所有的請求隊列在優先級上被認爲是相等的,所以表的理想數量可能是三個。一個列出請求及其相對於另一個的優先級(以確定誰在循環中下一個)和處理狀態,另一個列出每個請求的待處理的內容(列表項)和第三個表格,列出來自每個隊列的處理項目的

您還需要一個執行實際處理的腳本,該腳本不是由用戶請求驅動的,而是由定期執行的系統調度作業(調整爲任何您所期望的範圍)執行。這當然也可以在PHP中。這是您可以設置每次10個清單檢查和更新的位置。

的處理會是這樣的:

  1. 從最高優先級隊列最多隻能選擇10個項目的下一組。
  2. 處理它們,完成時更新它們的數據庫狀態。
  3. 更新上述隊列的優先級,以便它現在是最低優先級。

如果添加新隊列,則會添加最低優先級。

優先級可以用整數表示。

您的用戶需要耐心等待他們的列表進行處理,然後查看或下載結果。您可以在您的視圖頁面上爲此設置一個自動刷新腳本。

+0

Thx一堆..很多組件R已經完成了。我面臨的障礙僅僅是下一個項目的優先次序(不幸的是,每次有2個B 1)。正如我理解你的建議(因爲它適用於我的界限),這個想法只是有一個優先事項..我喜歡它..好,簡單:)。我主要關心的是更新該表中** ALL **記錄的優先級值** EACH **處理記錄的時間。如果我每次都要爲900條記錄這樣做,那不會是資源上不必要的負擔嗎? – mOrloff 2012-07-24 23:28:18

+0

爲了澄清,使用這種Priorities Tbl方法,我會優先考慮隊列/列表。然後,一旦我的多路複用器知道下一個要打的列表,它將從該列表/隊列中檢索下一個項目。 – mOrloff 2012-07-24 23:42:48

+0

我認爲選擇MIN()優先級,然後用MIN() - 1 – 2012-07-25 20:08:17

0

聽起來好像你正在試圖執行Gearman已經做得很好的東西。對於每個上傳/請求,您只需發送一份工作給Gearman服務器即可排隊。

Gearman可以配置爲持久性的(以防萬一到了地獄),這將消除您在關係數據庫中記錄請求的需求。

然後,您可以根據需要啓動儘可能多的工人。我知道你建議連續運行所有的工作,你仍然可以做,但你也可以並行化工作,這樣,如果所有工作都是以串行方式處理的,那麼你的用戶就不會坐得太久了時尚。

+0

Gearman更新優先級最高的行也行得通。甜,謝謝...我會研究一下。 – mOrloff 2012-07-25 12:47:38