2012-11-22 36 views
2

需要一些關於如何最好地解決這個問題的建議。基本上,我們在數據庫中有幾個表格以及用於刪除數據的表格的存檔版本(例如,Booking和Booking_archive)。這兩個表中的表結構完全相同,除了歸檔表中的兩個額外列:DateDeleted和DeletedBy。在SQL中歸檔數據

我已經刪除了這些存檔表,並且只是將DateDeleted和DeletedBy列添加到實際表中。我的計劃是對該表進行分區,以便將歸檔信息與未歸檔的信息分開。

這是最好的方法嗎?我只是不喜歡有兩張表來區分歸檔和非歸檔數據的想法。

這樣做的任何其他建議/指針?

+0

使用表名進行「分區」將在某個時間變得複雜。如果您*可以*分區,請使用分區。你正在使用哪個DBMS? –

+0

我正在使用SQL Server 2005(可能升級到2008 R2)。 – Umair

回答

4

歸檔的目的是爲了提高性能,所以我認爲最好將數據分成另一個表。事實上,我會盡可能在獨立的服務器上創建一個歸檔數據庫,並將歸檔的數據保存在那裏。這將產生最大的性能收益。亞軍架構是同一臺服務器上的第二個「歸檔」數據庫,其中有完全重複的表。

即使使用分區,您仍然會出現表鎖問題和硬件限制,從而降低了您的速度。單獨的表或dbs將消除前者,而單獨的服務器或每個分區的一個驅動器可以解決後者。

至於存儲存檔日期,我不認爲我會打擾做生產數據庫。不妨在archive-db表上設置你的時間戳記,所以當你插入記錄時,它會在歸檔時用日期時間自動標記它。

+0

我同意性能增益,但我們數據庫中的歸檔數據並不算太差,也許還有大約數十萬行。然而,對於大型表格,可能需要一個單獨的表格(或者您建議的單獨數據庫)... – Umair

+0

如果它「不是那麼糟糕」,那麼真的,爲什麼要歸檔呢? MS-SQL可以處理它。只需升級硬件,直到需要歸檔數據。爲什麼要爲自己創造額外的頭痛? –

+0

對於現在,我會把它全部保存在一張表中。直到需要獨立的結構。謝謝! – Umair

4

中的解決方案依賴於:

  1. 有這樣存檔表
  2. 表數什麼是數據的到達率到存檔表?
  3. 你想在軟件獨立服務器/硬件

基於以上投資 - 各種選擇可能是:

  1. 相同的數據庫,不同架構的同一個服務器上
  2. 存檔數據庫相同的服務器
  3. 存檔數據庫在不同的服務器上

如果是歸檔數據並且沒有機會返回主表,則不要進行分區。 您也可以在歸檔數據(保留期限或到期日期)上添加生命週期管理列,以便可以有效管理歸檔數據生命週期。