2016-09-27 60 views
0

讓我提供了一個例子,使我的問題明確:如何跟蹤到期

  • 我們有一個節點的應用程序,在這種情況下,我們的客戶訂閱。默認的是,我們訂購一個新客戶進行試用(例如說30天的試用期),在db記錄中會有一個試用期限。
  • 試用期滿後,我們想給客戶轉移到一個免費的計劃

可以看出,後端需要認識到試用期結束時的試用期已結束。如何追蹤到期日期?通常的做法是什麼?

好吧,對於最後一個問題,我可以回答,也許一般的做法是在每次登錄之前檢查到期日並相應採取行動。另一種可能性是有一個類似cron的工作,發生在到期結束的確切時間。

哪個更好,如何處理類似cron的解決方案?

有什麼建議嗎?

回答

0

最好的方法是在登錄過程中檢查到期日期。我們通過這樣做的好處是減少了數據庫的開銷,並且不需要外部腳本,也不需要觸發器,這確保了更好的可維護代碼。

+0

是的,但我不喜歡用戶從未註銷並始終刷新其會話的可能後門的想法,因此登錄不會啓動,用戶可能會永遠進入更高級別的計劃。 –

+0

你有一個非常有效的點。在這種情況下,你幾乎必須有一個請求過濾器來檢查你的所有傳入請求。這將是一個強大的解決方案。 – rushi

1

在大多數情況下,cron工作更可取。有兩個原因:

  • 通常你會想其他動作與相關的到期,發送電子郵件到他們的帳戶已過期的用戶,例如,這將沒有任何意義有已經發生時,他們抵達並登錄。
  • 您會希望將您的數據庫記錄更新爲其他用途,比如說拉統計數據或計費運行。

爲了澄清上述第二項:假設你想發送電子郵件,宣佈更改用戶帳戶(比如隱私政策更新),但你不想要的電子郵件發送給用戶提供了一個過期賬戶。從數據庫中選擇所有活動賬戶要容易得多,而不需要檢查到期日期。您可能會說,「這很容易添加到我的代碼中」,但是:如果您有另一個使用此數據庫的系統,或者通過RPC查詢您的系統的系統,或者您只是shell並運行一些raw SQL?您突然需要在許多可能的系統(或者只是在您的代碼庫中的地方)複製到期檢查代碼,並且檢查active==True要簡單得多。

有關工作信息,我從另一個類似的問題簡要stack overflow post