CouchDB自动存档

时间:2014-05-28 09:37:31

标签: javascript couchdb

我有一个使用本地存储(PouchDB)的角度应用程序,它可以自动与远程服务器上的CouchDB数据库同步。

由于我想限制我的应用程序大小,我希望能够根据条件从CouchDB自动归档。

这是我想象的:

  • 我在localDB中保存了一个与我的CouchDB同步的文件
  • 几天后,我告诉我的localDB存档此文件
  • 我的localDB删除文件,CouchDB自动将文件复制到另一个内部数据库(不与localDB同步),然后再将其删除。

你可以说我可以在我的应用程序中执行此操作,但问题是当应用程序脱机使用时,它无法直接访问远程CouchDB以复制到另一个数据库。

所以我的问题是,CouchDB能否根据doc中的值(例如archived = true)自动将文档复制到另一个数据库(在同一个CouchDB中)?如果没有,你会建议什么?

2 个答案:

答案 0 :(得分:3)

要保留每个文档的最后一个未删除版本,您可以在"数据"之间建立连续复制。和"备份" couchdb数据库具有阻​​止_deleted文档复制的过滤器函数,例如:

function(doc, req){
    return !doc._deleted
}

要专门保留archive属性设置的文档,您需要调整过滤器功能:

function(doc, req){
    return !doc._deleted && doc.archive
}

但是,现在归档文档包含两个步骤:

  1. 使用设置到localDB的archive属性保存它,触发其复制到您的"数据"数据库(从而触发其复制到"备份"数据库)
  2. 实际上从localDB中删除文档,将删除传播到您的"数据"数据库(具有过滤功能,防止删除传播到"备份"数据库)确认复制到"数据"数据库,因为在couchdb replication protocol中可能会快速转发。

答案 1 :(得分:1)

我不认为CouchDB拥有您正在寻找的确切解决方案。但是,另一种方法是删除文档。 CouchDB存储完整的修订历史记录(默认情况下最多1000个修订版),但是当它复制时,它只会复制一个存根:{_deleted: true}