2010-12-05 71 views
0

有關如何建模我的mysql模式以在版本控制下存儲用戶內容的工具或任何指南?與svn存儲庫類似,但代碼我需要版本所有用戶對象。就像用戶在這個日期2年前拍過的照片一樣。他有什麼設置等等。是的,我可以將備份副本存儲在表中,但問題是由於不同類型的對象,涉及數百和數百個表。我現在每天都會接受shanpshots,並計劃在稍後進行每次編輯時實施。所以基本上我想知道svn倉庫如何在數據庫中存儲內容,或者windows如何在某些數據庫中存儲還原點,以便我可以模擬用戶數據的模型。只有我的要求是我需要使用MySQL的主數據庫。我看到它的方式是:用戶數據的版本控制存儲庫

活動數據和歷史數據。活動數據具有當前副本。歷史數據按日期/時間索引。但仍然每天爲每個用戶維護數百個表數據,這意味着365 x用戶數x我需要版本的錶行數。我不知道如果在3NF中使用mysql來檢測它是否是最好的選擇?

+0

浩好像你需要先重構分貝的方案。你能告訴我們目前的計劃嗎? – 2010-12-05 02:02:32

回答

0

您可以簡單地將timpstamp字段與每個數據庫條目一起使用。然後進行延遲刪除而不是刪除數據,即具有「刪除」字段,該字段再次可以存儲刪除的時間戳。這些組合將允許你做歷史查詢。

當您從歷史快照開始實現此功能時,可以基於您看到條目的第一個/最後一個快照估計時間戳,並據此修正數據庫條目。

+0

但是如何控制表呢?以您的個人資料爲例。它有10個表中的50個字段。我在365天的時候拍了shapshot,我有1000萬用戶。所以在1年後,我將有每桌30億和6.5億行? – Brian04 2010-12-05 02:06:02

0

版本控制是一個不平凡的問題。它已經以多種方式得到解決,但正確地重做它本身並不是微不足道的。 Eric Sink寫了一個關於他自己的版本控制軟件的發展非常好的博客,它給出了一些關於複雜性的一些想法

您的特定問題將是數據量,因爲許多文件將是二進制文件,而不是有效存儲由VC系統,因爲它們主要是爲了處理文本而設計的。很快,除非你有一個非常好的差異引擎,否則你將會得到太多的數據來處理。

我的建議是專注於將您的軟件與某些人已經完成的工作進行接口,例如Subversion,Git,Mercurial或其他優秀的源代碼控制工具。您可以使用這些庫作爲您的存儲庫來存儲和版本化所有文件,並在ontop上構建您的軟件以便理解這一切。

要構建高效的版本控制系統,您需要真正瞭解自己在做什麼,爲什麼不重用專家創建的內容。

如果您仍然呱對自己做它,你可以做遜於Eric Sinks Source Control How-To