2012-08-06 21 views
0

這裏我的問題很簡單:我有一個php腳本,它從不同的api中檢索大量的csv文件,將它們存儲在數據庫(MySQL)中並將它們顯示給我的用戶。我必須每3分鐘查詢一次這些API以獲取重要數據。 只使用最後的數據,不需要獲取歷史數據。每3分鐘運行一次cron作業還是隻需要3分鐘就可以完成一個php腳本?

我的問題是要避免查詢這些api並在我的數據庫中插入大量數據(如果沒有人在這裏查看頁面的話)。

這不是一個速率限制的問題,只是想減少無用的請求並插入數據庫。

我的問題是:

  • 是更好地利用cron作業每3分鐘檢索數據並存儲它們或
  • 運行PHP腳本,如果一個頁面加載3分鐘有自上次更新後傳遞?

在第一種情況下,即使沒有人在這裏看到它們,每個用戶都將擁有最後的值,並且數據將始終被檢索。
在第二種情況下,每3分鐘一個用戶將檢索所有數據(因此他的頁面將比其他頁面稍慢),但如果沒有人訪問該站點,則不會存儲無用的數據。

注意:
檢索和插入數據大約需要10秒。

感謝您的見解!

+1

使用cron作業看起來更穩固的解決方案 – Gntem 2012-08-06 10:39:27

+0

取決於您的流量+檢索數據需要多長時間。你能量化這些嗎? – darma 2012-08-06 10:44:47

+0

需要10秒才能檢索數據並將其插入數據庫中。交通非常不規律,每天大約有1000個獨特的IP:在上午9點到下午4點(美國遊客)很多,有些從早上3點到上午11點(歐洲),其餘時間很少... – Romain 2012-08-06 12:32:56

回答

3

你應該做兩者的結合。

如果您的網站上沒有流量,則無需保持數據最新。

如果您的網站有流量,您需要保持最新的數據,但是三分鐘的時間對您來說已經足夠了。

因此,如果在最近的X分鐘內有活動,則需要三分鐘才能獲取數據。

如果不是,第一個用戶將看到一條消息,表明數據正在準備中,只需要10秒。然後您可以自動刷新網站。

目前沒有能夠在您的計算機上開箱即用的處理系統。克朗可以幫助你完成工作,但不是一個人。

請與您的系統管理員聯繫,並讓您建議您操作的平臺上提供什麼以滿足您的需求。


其實這看起來很像緩存。 CSV數據的生命週期爲3分鐘,因此您只需緩存api響應。如果您使用能夠提供某些邏輯(如清漆)的緩存服務器,則可以相對容易地配置預取。嘗試找到一些現有的組件,只需要配置和重新使用,而不是自己動手。

+0

我會研究清漆和緩存系統,這聽起來很棒! 「數據正在準備中」是一個好主意,我會在用戶等待時使用它。謝謝! – Romain 2012-08-06 12:29:50

+0

如果您可以通過與用戶進行公平交流來解決問題,那麼這不僅對於可用性,而且對於您編寫的軟件來說都是非常好的。想象一下用戶想要什麼,提供它。 – hakre 2012-08-06 12:30:37

1

來看這一行:

Note: 
Retrieving and inserting data take about 10 seconds. 

的cronjob將是最好的。我不認爲訪問者會很高興每隔3分鐘等待10秒的頁面負載。如果我是唯一一個訪問您的站點並且每隔3分鐘重複實現一次腳本的人,該怎麼辦......

如果時間是1或2秒,那麼您可以以其他方式做到這一點。

+0

我沒想到孤獨的訪客(但它仍然可能!)...是啊,這將是他的恥辱:/ – Romain 2012-08-06 12:22:32

1

我若您的問與答理解正確的話,你可以考慮讓這2項不同的任務:

一)獲取數據並將其存儲

二)處理數據

做一)每3分鐘做b)根據請求

現在單獨檢查b)的延遲,然後考慮是否值得緩存結果集。

讓它完成2個不同的任務將有一定程度的好處,使您能夠避免獲取多個文件的延遲問題。在處理來自上次成功獲取的數據時,它也可以讓您在數據獲取失敗的情況下回退「此數據超過3分鐘」。

+0

功能'這個數據是3分鐘以上'是一個非常好的主意!實際上,我做了兩個不同的任務,第一個單獨完成10秒,而第二個非常快(幾毫秒)。我會看到緩存系統,如果它是值得的...謝謝! – Romain 2012-08-06 12:25:28

+0

實際上,csvs的獲取和存儲是一種緩存形式。 – Cups 2012-08-06 13:03:17

相關問題