2015-02-10 30 views
1

我們的數據庫變得太大,我們需要根據過濾器(即創建日期字段)將較舊的記錄歸檔到歸檔數據庫。什麼是最快和最簡單的方法來實現這一目標?只要代碼易於理解和維護,大多數語言都可以接受。在CouchDB數據庫之間批量移動文檔

這將需要是一個可以安排定期運行的任務,例如,每週。

回答

2

您可以使用此策略:

1)設置單向過濾的複製,見http://wiki.apache.org/couchdb/Replication#Filtered_Replication。您的過濾器功能必須檢測並拒絕較新的文檔和刪除。

2)Optionaly將validate_doc_update函數添加到目標數據庫。它也可以拒絕刪除 - 以確保沒有刪除操作可以通過意外。類似於

validate_doc_update: function(newDoc, oldDoc, uCtx, sec) { 
    if (oldDoc && newDoc._deleted) throw ({forbidden:'Can’t delete from archive'}); 
} 

3)在源桶中創建視圖索引以獲取每週清除的doc列表。

4)設置重複任務,執行復制,如果成功,批量刪除文檔,如果成功執行源數據庫壓縮。

使用_bulk_docs可以更好地執行批量刪除 - 您可以將_deleted屬性設置爲true的文檔數組POST。爲確保源數據庫即使在壓縮後也不會存儲已刪除的文檔,您必須將_revs_limit設置爲1(http://docs.couchdb.org/en/latest/api/database/misc.html#db-revs-limit)。

爲確保在過程中沒有文檔消失,最好將複製的日期範圍顯着擴大,然後刪除日期範圍。例如,如果刪除每個星期日超過28天(4周)的文檔,則必須首先複製20天以上(3周減1天)的文檔。

+0

謝謝,這將需要一些調查.. – Dave 2015-02-10 23:07:43

+1

或者,也許你可以採用連續複製到備份數據庫 - 過濾刪除如上所示 - 這將確保備份包含文檔的所有版本,而不僅僅是最新版本每週一次。 – 2015-02-18 02:38:01

相關問題