在MongoDB中實現數據版本控制的方法您能否分享一下您如何在MongoDB中實現數據版本控制?(我問過關于Cassandra的類似問題。如果你有任何想法,哪個數據庫更好,請分享)假設我需要在簡單的地址簿中對記錄進行版本控制。(地址簿記錄存儲為平面json對象)。我期待歷史:將很少使用將一次性使用以“時間機器”的方式呈現它單個記錄的版本不會超過幾百個。歷史不會過期。我正在考慮以下方法:創建新的對象集合以存儲記錄的歷史記錄或對記錄的更改。它將為每個版本存儲一個對象,并引用地址簿條目。這些記錄如下:{
'_id':'新id',
'user':user_id,
'timestamp':時間戳,
'address_book_id':'地址簿記錄的ID'
'old_record':{'first_name':'Jon','last_name':'Doe'......}}可以修改此方法以存儲每個文檔的版本數組。但這似乎是沒有任何優勢的較慢的方法。將版本存儲為附加到通訊簿條目的序列化(JSON)對象。我不確定如何將這些對象附加到MongoDB文檔。也許是一個字符串數組。(使用CouchDB進行簡單文檔版本控制后建模)
3 回答

梵蒂岡之花
TA貢獻1900條經驗 獲得超5個贊
潛入這個問題的第一個重要問題是“你想如何存儲變更集”?
比較速度?
整個記錄副本?
我個人的方法是存儲差異。因為這些差異的顯示實際上是一個特殊的動作,所以我會將差異放在不同的“歷史”集合中。
我會使用不同的集合來節省內存空間。您通常不希望簡單查詢的完整歷史記錄。因此,通過將歷史記錄保留在對象之外,您還可以在查詢數據時將其保留在常用內存中。
為了讓我的生活更輕松,我會讓歷史文檔包含時間戳差異字典。像這樣的東西:
{ _id : "id of address book record", changes : { 1234567 : { "city" : "Omaha", "state" : "Nebraska" }, 1234568 : { "city" : "Kansas City", "state" : "Missouri" } }}
為了讓我的生活變得非常簡單,我將使用我用來訪問我的數據的DataObjects(EntityWrapper,無論如何)。通常,這些對象具有某種形式的歷史記錄,因此您可以輕松地覆蓋save()
方法以同時進行此更改。
看起來現在有一個處理JSON差異的規范。這似乎是一種更健壯的方式來存儲差異/變化。
- 3 回答
- 0 關注
- 1332 瀏覽
添加回答
舉報
0/150
提交
取消