2016-12-26 79 views
0

我有一個叫做「ticket」的模型,它有一個開始時間和結束時間。我希望能夠在前端按時間分類/劃分門票。將有3個類別:過去(now> end_time),當前(start_time <現在< end_time),將來(現在< start_time)。現在代表真正的UTC時間。我正在考慮在票據模型中包含「過去」,「當前」或「未來」值的「州」字段。我需要一種基於時間更新票據狀態的方法。根據時間更新數據庫中的條目

每分鐘運行一個cron作業會是一個合適的解決方案嗎?它將迭代所有條目並檢查狀態是否應該更新,然後在必要時執行更新。此解決方案是否可擴展?有更好的解決方案嗎?

如果這是必要的信息,我正在考慮將Firebase用於數據庫和Google App Engine以用於cron作業。

+0

這將是真的很難回答,因爲它不是真正的每本身編碼的問題,這是很模糊的,因爲它完全取決於使用情況是什麼你的票狀態。即如果當前時間大於票價時間,會發生什麼情況?用更多*編碼具體細節*更新您的問題,所以我們可以提供幫助。還請回顧[如何提出一個好問題](http://stackoverflow.com/help/how-to-ask)以及[創建可驗證的示例](http://stackoverflow.com/help/mcve) – Jay

回答

0

在大多數情況下,將數據保存到數據庫的方法是錯誤的,數據庫會隨時間而失效,但可以從相同記錄的數據計算得出。如果日期得到更新但cronjob還沒有運行或日期接近現在,也存在不一致的風險。

我建議你總是通過使用日期字段來計算你的數據庫查詢中的信息。在MySQL這樣的工作與此類似:

SELECT 
    (IF (end_time < NOW()) THEN 'past' ELSE IF (start_time < NOW()) THEN 'current' ELSE 'future') AS state 
FROM table 

或者你可以直接獲取start_timeend_time領域,並在你的應用程序處理的狀態。如果要按狀態查詢條目,則還可以使用過濾條件中的日期列。

這樣就不需要讓cron作業更新狀態。