在 StackOverflow 中,您可以獲得一些基于streaks的徽章,并且您可以從這些徽章中想象一些跟蹤條紋的其他用例:
- 每天訪問該網站 30 天。
- 每天投票 30 個帖子,連續 7 天。
- ETC..
您將如何在任何型別的資料庫中跟蹤和實作這一點?(不管是哪一個,SQL、NoSQL 等等。)
第一個難題/問題是,您是在 cron/后臺作業/任務中執行此操作,還是在對資料庫的每次更改(例如,每次頁面查看或投票)中執行此操作?
第二個難題是,根據之前的解決方案,您如何有效地查詢資料庫的狀態以確定是否滿足條件,以及如何在新計算中不計算之前的“物件操作”?
所以讓我們專注于選票,因為這有點復雜。假設我們正在跟蹤“UTC 日”。
如果我們使用“檢查每個資料庫更改”解決方案(第 1 部分),那么在下一次投票時,在保存到資料庫后,查詢該用戶自過去 UTC 日期以來的所有投票。如果投票數 >= 30,則創建一個新的“連續”記錄并計為 1。然后在下一次投票(同一天)時,我們不知何故需要知道我們已經計算過了,嗯,所以需要修改方法。所以也許我們跟蹤當天的“last_vote_id”,所以我們有(偽代碼):
table vote_streaks {
date last_date;
int last_vote_id;
int last_date_count;
int total_streak_count;
}
然后在下一次投票/同一天,我們檢查last_date我們跟蹤投票的時間(今天)和last_date_count(假設我們此時有 30 票),總連勝為 1,我們知道我們應該忽略第 31 票為那一天。然后在第 2 天,last_date不匹配today,因此我們last_date_count在將其設定為 1 之前將其重置為 0。我認為這樣的事情可能有用嗎?我說不清楚。
如果我們采用這種方法來執行 cron/后臺作業,那么我們將在 UTC 日開始后的某個時間查詢每個用戶的所有投票(限制 30)。如果我們可以以此為基礎建立連勝(這更容易做到),那么我們就可以獲得連勝。但是如果在作業程序中出現一些問題并且它中斷并且必須重新啟動怎么辦?我無法想象如何解決這個問題,但它似乎比其他實時方法復雜得多。
這個一般是怎么解決的?同樣,不需要進入實際 SQL/NoSQL 表的雜草(除非您愿意,偽代碼很好)。或者,如果您知道特定的解決方案(例如 StackOverflow 如何實作它),而不是通用解決方案,那也可以。
uj5u.com熱心網友回復:
您需要在此處跟蹤的最小資料將是用戶最近操作的日期和當前的連續計數。
當用戶完成條紋動作時,您需要檢查最近動作的日期。如果最近的操作發生在不到一天的時間內,但現在已經是不同的一天,則增加連續計數;如果超過兩天,則將連續計數重置為零;否則你更新最近的動作時間戳
檢查條紋時,您還需要檢查最近的操作時間戳。如果時間戳最后一次更新是在最后一天內,則連續計數有效,否則實際連續計數為零。
或者,您可以簡單地創建一個檔案資料庫并根據事務日志進行完整的連續計算。這對于長期使用的用戶來說會變得很昂貴,盡管它是最容易實作的。根據您期望人們有多長的連續性,這可能是可接受的,也可能是不可接受的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/497256.html
