亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在MongoDB中實現數據版本控制的方法

在MongoDB中實現數據版本控制的方法

達令說 2019-08-23 14:56:51
在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個贊

潛入這個問題的第一個重要問題是“你想如何存儲變更集”?

  1. 比較速度?

  2. 整個記錄副本?

我個人的方法是存儲差異。因為這些差異的顯示實際上是一個特殊的動作,所以我會將差異放在不同的“歷史”集合中。

我會使用不同的集合來節省內存空間。您通常不希望簡單查詢的完整歷史記錄。因此,通過將歷史記錄保留在對象之外,您還可以在查詢數據時將其保留在常用內存中。

為了讓我的生活更輕松,我會讓歷史文檔包含時間戳差異字典。像這樣的東西:

{
    _id : "id of address book record",
    changes : { 
                1234567 : { "city" : "Omaha", "state" : "Nebraska" },
                1234568 : { "city" : "Kansas City", "state" : "Missouri" }
               }}

為了讓我的生活變得非常簡單,我將使用我用來訪問我的數據的DataObjects(EntityWrapper,無論如何)。通常,這些對象具有某種形式的歷史記錄,因此您可以輕松地覆蓋save()方法以同時進行此更改。

看起來現在有一個處理JSON差異的規范。這似乎是一種更健壯的方式來存儲差異/變化。


查看完整回答
反對 回復 2019-08-23
?
回首憶惘然

TA貢獻1847條經驗 獲得超11個贊

我使用下面的包用于meteor / MongoDB項目,它運行良好,主要優點是它將歷史/修訂存儲在同一文檔中的數組中,因此無需額外的出版物或中間件來訪問更改歷史記錄。它可以支持有限數量的先前版本(例如,前十個版本),它還支持更改連接(因此在特定時間段內發生的所有更改將由一個修訂版覆蓋)。

nicklozon /流星收集,修訂

另一個聲音選項是使用Meteor Vermongo(這里


查看完整回答
反對 回復 2019-08-23
  • 3 回答
  • 0 關注
  • 1332 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號