2012-04-01 91 views
0

我有一個守護進程,執行以下操作發送一批請求

  • 檢索從MySQL數據庫網站成員(我用LIMIT 1000檢索一次1000行)
  • 發送關於這些成員的信息第三方服務器
  • 標誌各構件爲已經處理
  • 休眠2秒
  • 檢索下一批次的1000「未處理」的成員和發送到第三方服務器。 等。

我想知道一個php守護進程(我正在使用系統守護進程庫)是完成上述任務的最佳方法。

我擔心浪費太多的內存(如PHP是已知的是)

我也擔心發送多個請求到第三方服務器,因爲在高流量的日子,可以有很多的nonreceipts。

除了可用於完成此任務的守護程序,還有其他工具嗎?考慮到可能需要在mysql表中處理超過100K行,並且該任務對時間敏感,我可以實施哪些方法來提高效率。另外,我應該考慮在什麼時候增加更多的服務器?

謝謝!

+0

因此,您的系統每2秒鐘可以生成1000個新條目?考慮批量加載更有效率(我認爲這是可用的MySQL)。只是每小時ftp文件1x。沒有一個值得尊敬的數據庫應該能夠打破100K行的負載。祝你好運。 – shellter 2012-04-01 23:06:55

回答

1

cron應該是與第三方服務器做同步工作的非常好的選擇。 考慮以下「改進」:

1)一個鎖定文件,用於防止多個作業並行啓動並從其他正在運行的進程中獲取額外資源。並且還要避免重複的數據處理。

2)如果您還沒有在您身邊實施「信息更新」和「同步時間」檢查。例如,如果用戶A自同步以來沒有遭受任何更改,則不會再同步他。

3)考慮您需要多長時間才能使數據同步,以及它是否必須成爲選擇查詢中的實時因子。結合用戶/時間分佈和其他因素,遷移最終會有一段時間,因爲腳本不會同步多個帳戶。

4)做你自己的內存清理解封變量,斷開鏈接文件,甚至重複使用相同的變量,所以你不必是一個1週一次只使用腳本內的垃圾變量。小心這個,因爲它可能會導致代碼混淆。

也可以考慮使用較小的數據集,當你把它們發送到php進行處理。數據庫喜歡大數據集,php不支持。

0

我建議你使用Perl,因爲它具有更多的內存和性能高效率,並且它具有更多功能來與系統集成並作爲後臺進程運行。

現在該何時該添加更多服務器了。我假設第三方服務器有足夠的資源來處理許多記錄。因此,如果您的資源耗盡,我建議使用MySQL複製將您的數據庫複製到其他服務器並在上面運行上述守護進程。