2013-06-23 12 views
1

我正考慮將更改/數據庫記錄更改存儲爲git/hg存儲庫,而當前數據仍駐留在數據庫中。如果有人需要有變化的歷史,我將不得不在回購中查找它。使用代碼版本控制系統存儲數據庫記錄更改歷史記錄的任何明顯缺陷

可能有一個文件夾爲每個集合,文件名將鏡像「_id」(主鍵)。因此,我會查找相關信息的特定文件。假設有1個主關鍵字段(即沒有複合材料)。我使用的數據庫是mongodb,因此無論如何記錄都是以文檔格式存在的。我只需要將JSON存儲在一個文件中。

對我的好處是:版本控制系統非常適合超時存儲/差異/更改。我可以從基本 - >當前查詢特定版本和更改列表。

缺點:除了新穎之外,我想不出任何東西。 如果歷史高度追捧(但在我的情況下),IO訪問可能會成爲問題。對於較慢的歷史數據檢索,我很確定。它預計在任何情況下都是罕見的事件。

所以我的問題是:是否有一些明顯的缺點,我忽略了?

謝謝。

澄清: 我想要做這種方式的原因是,我希望歷史發展和潛在地必須保持的時間(最好)的無限量。我可以通過保持改變來改善這一點,但這是額外的努力,而不是微不足道的。

需要考慮的另外一件事是mongodb的速度來自內存中的索引。如果它必須保持實際+歷史的索引,那麼我需要比我需要的多2至3倍的RAM。截至目前,這是一個溢價(可能並不總是),但仍然是。

回答

0

而不是將數據導出到JSON(通過BSON,因爲這是mongodump提供的),我建議您爲MongoDB中的每個集合創建「存檔」集合。然後,您可以將過期版本的文檔移動到此歸檔集合中,格式與您在普通集合中使用的格式相同。只要您在文檔中存儲日期,就可以輕鬆檢索早期版本,而無需使用諸如GIT/HG存儲庫等繁瑣的解決方案。無論如何,比較版本是您可能需要可視化的東西,因此無論如何,使用JSON表示文檔而不是真實文檔並不是真正的好處。

+0

這就是我現在正在做的事情。我將舊記錄的完整副本寫入歷史記錄,並在當前集合中保留新記錄。鑑於RAM是一個約束,我寧願讓RAM保留實際收集的索引,而不是妥協,保留部分實際和歷史部分。目前幾乎沒有數據,但是當所有事情都說完之後,我預計歷史可能會變得更大。 – Nasir

+0

但操作系統只會保留經常使用的RAM中的索引和數據。如果您幾乎沒有查閱過舊的數據,那麼這些文檔就不適合RAM。您可以選擇*多個*檔案集合,但是,f.e.每個月或每年一個。但是,這當然使搜索更難... – Derick

+0

好點。謝謝。 – Nasir

相關問題