功能概要:數據定時更新,可查詢歷史數據。詳細說明:1、現在有個排行榜需要幾分鐘更新一次,所以我使用了windows服務定時運行;一次的數據量在30萬左右,這樣可能到下次更新時本次的任務沒有運行完成,所以遇到這種情況就等待下次任務觸發時再運行更新。 2、當運行更新時,不斷有數據插入到榜單表,為了不影響 ...
功能概要:數據定時更新,可查詢歷史數據。
詳細說明:1、現在有個排行榜需要幾分鐘更新一次,所以我使用了windows服務定時運行;一次的數據量在30萬左右,這樣可能到下次更新時本次的任務沒有運行完成,所以遇到這種情況就等待下次任務觸發時再運行更新。
2、當運行更新時,不斷有數據插入到榜單表,為了不影響當前顯示的榜單數據,於是在榜單表加個狀態status(0/更新中,1/顯示中)。
3、當更新運行完成時,更新 status=status+1,這樣更新中的數據變為顯示中,顯示中數據變為歷史(歷史一會會講到)。
這個排行榜可以按日期查詢,就是可以選擇查看昨天,前天等等。這樣就必須每天保存榜單數據,而每天會產生很多份榜單數據,我想到取當天最後一次的數據,但怎麼確定最後一次的數據又是個問題,因為最後一份數據可能跨日期,那就取最後一份的上一份?也不行,一份數據是幾十萬,去按日期查詢肯定是相當慢;是不是可以每份數據存個版本號?這又要想辦法實現版本號的遞增,跨日期清零問題等等。再想想其實一天內我只需要一份完整的數據,每次更新後我可以把上份刪掉了,然後在每天另存一份即可。有了這個思路,我在榜單表中的status欄位再加個狀態(2/歷史)。
現在,當更新運行完成時,更新 status=status+1,status會出現2個值(1/顯示中,2/歷史),那如果再運行更新呢,會出現第3個值 3(這個值看起來可以做版本號了,呵呵,因為是遞增的)。但是status=3這個數據是我們不需要的,那每次更新完乾脆刪除status=3的數據好了。
現在我創建一個榜單歷史表,結構與榜單表一樣,但沒有狀態status欄位,這個表的數據如何更新呢?因為榜單是按日查詢的,所以就每天插入一份即可,與其在服務中加邏輯,不如直接在資料庫中寫個job,定在每天23:59執行,取狀態status=2的數據即可了。