2011-02-09 73 views
2

許多應用程序累積二進制灰塵 - 隨着時間積累的記錄,永遠不會看到白天的光。我們的應用程序會保存聊天記錄,並且只顯示最近5天的此類記錄。一段時間後運行清理操作是否是一個好主意,將這些舊記錄移動到「歷史記錄」表中。歷史表將永遠不會被使用,只是允許我們運行內部統計數據,同時(我認爲)在主表中剩餘的記錄上實現更好的性能。另外,如果我們建立一個歷史表,那麼我們是否需要複製我們的表,或者是否存在隱藏的MS SQL函數,它會自動創建「影子表」。你如何處理舊記錄?

+0

實際上,我對將數據移動到歷史數據庫存儲的推薦流程非常感興趣。我們有很多主鍵鏈接,這意味着大量的奇數位數據需要移動,我也相信大量使用「for」循環。似乎有點笨重。 – 2011-02-09 03:49:46

回答

1

沒有MS SQL函數會自動創建這樣的影子表。它與分區密切相關,但它確實會將存儲分割(快速/慢速),同時仍將數據保存在一個表中。

你在找什麼是直接存檔和清除。一個簡單的策略是夜間任務

  1. 更新靜態查找表(即主表引用)歷史表date < getdate()-6
  2. 移動記錄
  3. 刪除被感動

如果記錄此表有其他表的外鍵鏈接to,您會發現這些表不太可能需要清除,除非它們太快增長(很少)。另一方面,如果其他表格具有FK,則這是另一回事。在這種情況下,您必須移動所有依賴子項,然後移動主項,然後按相反順序刪除。

+0

我有點不清楚人們在實踐中是如何做到這一點的。我是否創建了多個「存檔」表格,其後綴是「ConversationsOld」,「LogsOld」,「UsersOld」等,然後將數據移入它們? – 2011-02-09 04:49:40

1

cyberkiwi對於「沒有魔力」是正確的,他的推薦對於簡單的數據是很好的。數據複雜時,歸檔變得複雜。您可能會發現在歸檔時需要對數據進行非規範化處理,以便可以刪除或修改原始行引用的數據。