2009-04-14 62 views
0

我有一個涉及網絡投票系統的項目。當前值和相關數據存儲在幾個表中。歷史數據將是該項目的重要方面,因此我還創建了審計表,以便將當前數據定期移至該表中。有效使用差異的版本控制數據庫

我覺得這個策略效率很低。即使我每天只存檔數據,即使只有1或2個用戶在某一天進行更新,行數也會變得很大。

我能想到的下一個選擇是隻存儲已更改的條目。這意味着必須構建邏輯來自動創建給定日期的視圖。這意味着更少的存儲行,但相當複雜。

我最後的想法不太傳統。由於歷史數據將用於報告目的,因此網絡用戶無需快速訪問。我在想,我的分貝可能沒有歷史數據。 DB僅表示當前狀態。然後,每天,整個數據庫可以加載到對象中(用戶數量相對較少),然後序列化爲XML或JSON。這些文件可能與前一天有差異並存儲。事實上,SVN可以爲我做到這一點。當我想要獲得給定過去一天的數據時,系統必須檢索當天的版本並反序列化爲對象。這顯然是一個代價高昂的操作,但這裏的性能並不是問題。我正在考慮使用LINQ來解決這個問題,我認爲這可以簡化一些事情。序列化過程必須非常有條理才能使差異更好地工作。

你會採取哪種方法?

感謝

回答

0

你告訴我們關於你的系統的一切就是它涉及投票。只要您存儲投票時間戳,您應該能夠在任何時間點生成一份描述投票狀態記錄的報告......不是嗎?例如,假設我有一個系統可以記錄喜歡的功能(眼睛,笑容,屁股,...)。如果我想知道某個特定日期的特定功能有多少票,那麼我只需將該功能的所有選票與小於或等於該日期的時間戳進行比較。

如果你想有其他事情的歷史,那麼你會遵循類似的方法。

我認爲這是它完成的方式。

alt text http://i41.tinypic.com/xer5zn.jpg

0

你有沒有使用真正的版本控制系統,而不是試圖鞋拔子在其位置數據庫的考慮?我自己對git很有偏見,但有很多選擇。他們都對版本之間的差異提供了很好的支持,並且他們傾向於針對這種工作負載進行優化。

+0

所以你建議我序列化/反序列化和提交數據git動態? – 2009-04-14 13:56:01

+0

我並不十分理解你的問題陳述,但git的設計目標是將性能作爲主要設計目標之一 - 如果它與你的應用程序相匹配,它可能會比你嘗試的任何其他方法更快 – 2009-04-14 19:26:31

1

如果你基本上知道如何資料修改存儲在關係數據庫中,然後我會看看維基百科是如何做到這一點。

維基是關於保持詳細的修訂歷史記錄。他們使用簡單的關係數據庫進行存儲。

考慮維基百科的資料數據庫schema