2016-02-04 38 views
0

我正在爲Android客戶端開發使用GAE的服務,並且需要定期刷新應用程序數據,例如每分鐘一次。使用Google App Engine進行高頻數據刷新

從結構上看,這是應用程序的工作原理:

  • 用戶啓動應用程序和服務在GAE上運行獲取市場數據
  • 的GAE服務本身調用外部Web服務來獲取市場數據,過濾的結果,並會將用戶的顯示
  • 的市場價格,應該得到更新一次一分鐘

我知道GAE提供cron作業自動化SC但是根據我的理解,它不適合於這種高頻率任務(或者甚至不支持)

我可以用於此用例的最佳實踐/工具是什麼?

此外,建議在後臺更新數據而不管應用程序是否打開?或者只是在用戶啓動後立即更新?

[編輯]我還想知道每分鐘拉數據是正確的方法,還是應該推動服務?

預先感謝您。

+0

如果服務拉着數據是不針對任何用戶運行cron作業加載每分鐘應該沒問題。每個用戶請求都從這個緩存數據中獲取數據。你仍然可以控制你的cron何時可以運行。它只需要一天運行嗎? –

+0

因此,如果我希望我的用戶數據在緩存中每分鐘更新一次,即使應用程序處於非活動狀態,它是否會在後臺默默發生?或僅在應用程序啓動時更新? –

回答

1

"it's not suitable for such high frequency tasks (or not even supported)" - 這不完全正確。

Cron作業可以在間隔低至運行1分鐘,見The schedule format

時間表舉例如下:

every 12 hours 
every 5 minutes from 10:00 to 14:00 
every day 00:00 
every monday 09:00 
2nd,third mon,wed,thu of march 17:00 
1st monday of sep,oct,nov 17:00 
1 of jan,april,july,oct 00:00 

如果您不需要運行循環作業在特定的時間,但是 反而只需要定期運行它,使用表格:

every N (hours|mins|minutes) ["from" (time) "to" (time)] 

因此,對於一週分鐘時間,你可以使用:

every 1 minutes 

如果您需要低於1個分鐘的間隔,你可以使用the deferred library - 任務都可以入列的時刻與以秒爲單位的時間值被延遲:

deferred.defer的(do_something_expensive 「Foobie bletch」,12, _countdown = 30,_queue = 「myQueue中」)

最後一個問題的答案實際上取決於您希望應用程序的行爲方式:當客戶端應用程序啓動時讓數據立即可用於客戶端應用程序,或讓客戶端應用程序等待直到後端收集數據。

如果您只是將收集到的數據中繼到客戶端,那麼沒有任何「慣例」(當然,除了持續更新的成本更高外)。但是,如果您計劃也提供處理歷史數據的結果,那麼您可能需要持續更新(或者可能僅在市場營業時間內)。

更新:

Task Queues優於延遲的庫,延期功能可使用可選countdowneta參數taskqueue.add()

  • 倒計時 - 時間這個任務應該運行或租用的將來幾秒鐘。默認爲零。如果 指定了eta,則不要指定此參數。

  • eta - A datetime.datetime它指定任務應該運行的絕對最早時間。如果指定了倒數參數 ,則不能指定此參數。該參數可以是時間 區域感知或時區初始,或設置爲過去的時間。如果參數 設置爲無,則默認值是現在。對於拉取任務,工作人員不能在eta 參數所指示的時間之前租用任務。

+0

謝謝,這很有用。一般來說,不斷更新背景常用的數據?或者只是在用戶啓動應用程序時進行更新? –

+0

這取決於你有多少用戶。如果你總是有人在使用應用程序,那麼檢查單個會話是沒有意義的。如果你的用戶非常少,那麼在24小時內運行更新是沒有意義的。 –

+0

不知道我明白你的意思是「沒有點檢查個別會議」。您是否建議我每分鐘推送一次更新給用戶,而不是客戶每分鐘提取一次數據? –

相關問題