Database-Design
CouchDB 和文件版本控制
我目前正在使用 CouchDB 開發一個 wiki 風格的應用程序,並且正在嘗試實現文件版本控制方案。在我看來,有兩種方法可以做到這一點:
- 將每個版本儲存為單獨的文件
- 將舊版本儲存為單個文件的附件。
現在,我有一種#1 的工作形式。當使用者編輯文件並保存時,後端首先將之前的修訂複製到新文件中,然後保存新版本。每個文件都有一個“歷史”數組,其中包含每個版本的數據(舊版本的文件 _id、時間戳、編輯器等)。
由於對於經常更新的文件,這個歷史數組可能會變得很長,所以我有一個視圖可以在正常讀取期間獲取一個沒有歷史記錄的文件(以及另一個用於獲取歷史記錄的視圖)。
我的問題是:我對自己目前的做法感到不安,一直在考慮改用“依戀”的方法。但我不確定。我希望比我更了解 CouchDB 的人(我只在這工作了幾週——這是我第一個使用 CouchDB 的項目……和 NoSQL)可以告訴我每個項目的優缺點方法。或者是否有其他一些我忽略的版本控制方案?
僅儲存更改將是一個好主意,因為將較舊的文件作為單獨的文件或附件儲存到數據庫的最終修訂版中會給數據庫伺服器帶來成本。
每當您更改文件中的鍵值時,請添加一個名為
_h_i_s_<key_name>
. 在新創建的(或上次更新期間創建的)中,在每次編輯/更新後附加如下對象:-{ key_name: "Hello", _h_i_s_key_name:{time_of_update:value_of_key_name_before_update}, .... }
要麼
{ key_name: "Hello", _h_i_s_key_name:[{time:time_of_update,value:value_of_key_name_before_update}, {time:time_of_last_update,value:value_of_key_name_before_last_update}], .... }
從長遠來看,這種方法將節省大量磁碟空間和複製頻寬。
在沒有任何 CouchDB 知識的情況下。儲存每個版本雖然可能與其前身略有不同,但這是一種儲存浪費。我建議只儲存更改。
您可能想查看此處或搜尋數據版本控制。