在CouchDB数据库之间批量移动文档

时间:2015-02-10 01:34:23

标签: couchdb

我们的数据库变得太大,我们需要根据过滤器(即创建的日期字段)将旧记录存档到存档数据库。什么是实现这一目标的最快最简单的方法?只要代码易于理解和维护,大多数语言都是可以接受的。

这可能是一项可以安排定期运行的任务,例如每周

1 个答案:

答案 0 :(得分:2)

您可以采用此策略:

1)设置单向过滤复制,请参阅http://wiki.apache.org/couchdb/Replication#Filtered_Replication。您的过滤器功能必须检测并拒绝较新的文档和删除。

2)Optionaly将validate_doc_update函数添加到目标数据库。它还可以拒绝删除 - 以确保不会意外地通过del操作。像

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

3)在源存储桶中创建视图索引以获取每周清除的文档列表。

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天)的文档。