2011-05-12 65 views
5

我聽說過cron job,並不認爲它的實際創建會很難做到,但我擔心這會如何與大腳本。Cron在使用PHP的大型數據庫上工作,需要建議

在我的項目中,我不會過多討論題目,我會堅持關於我的情況的基礎知識。我需要製作一個腳本,每天對遠程網站上的數據執行CURL獲取,並使用它更新我網站上每個特色成員的數據庫。簡而言之,這個時候大約需要執行1000次腳本,但隨着時間的推移它將會變得更大。

正如你所猜測的,這需要很長時間才能完成,所以我很擔心執行的過程如何以不中斷的方式工作。

我的第一個想法是可能會將用戶分成組,並且每次都會對少量用戶進行處理,但不知道這是如何管理的(當我得到某種形式的就此確認)。

所以,對我的問題。你認爲我有什麼辦法可以做到這一點嗎?你有沒有建議如何使它有效地工作?所有的幫助,我可以得到讚賞。感謝您的時間。

+0

我李關於將用戶分成大小的組的想法。另外,增加php腳本的最大腳本執行時間以阻止它在完成之前退出。 – Detect 2011-05-12 17:45:09

+0

我們說多久了? – 2011-05-12 17:50:23

+3

爲什麼不嘗試它,然後再考慮優化。不成熟的優化是萬惡之源。 – 2011-05-12 17:51:48

回答

1

使用php和mysql的更大的cron-jobs需要被分割,因爲你沒有辦法讓他們'很好',(減少他們的os優先級)。即使你的腳本很好,mysql的請求也會在沒有這個擔心的情況下執行。

從你描述有兩個方面的考慮:

  • 網絡帶寬的擁塞
  • 數據庫吞吐量擁塞

我推薦一個支離破碎的解決方案,你打電話給你腳本更經常,並讓腳本只執行一小部分工作。如果i/o-bandwith或cpu-usage高於任何可能影響訪問者響應時間的限制,則應進一步取消該工作(推遲到下一次運行)。

問候, /噸

0

一個辦法:

我通常反對把數據庫中的邏輯,但在這種情況下,stored procedure可能的幫助。它會以更快的速度運行你的工作(因爲它是一個很大的工作),並且你希望鎖定表格。這樣,如果調用存儲過程的腳本在原始作業結束之前被cron命中,它將不會在第一次運行時編輯數據庫。

0

的實際時間我不能給出一個 直接的答案,但基於之前 經歷這將花費更長的 那麼最大執行時間

所以解決這個問題。有一個原因,你可以有一個不同的php.ini命令行界面。然後你可以簡單地專注於處理一個腳本中的所有用戶。