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

在CouchDB数据库之间批量移动文档,couchdb,Couchdb,我们的数据库变得太大,我们需要根据过滤器(即创建的日期字段)将较旧的记录归档到归档数据库中。最快最简单的方法是什么?只要代码易于理解和维护,大多数语言都是可以接受的 这需要是一项可以定期运行的任务,例如每周运行。您可以采用以下策略: 1) 设置单向筛选复制,请参阅。您的筛选功能必须检测并拒绝更新的文档和删除的文档 2) 可选地向目标数据库添加validate\u doc\u update功能。它还可以拒绝删除,以确保删除操作不会意外通过。差不多 validate_doc_update: func

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


这需要是一项可以定期运行的任务,例如每周运行。

您可以采用以下策略:

1) 设置单向筛选复制,请参阅。您的筛选功能必须检测并拒绝更新的文档和删除的文档

2) 可选地向目标数据库添加
validate\u doc\u update
功能。它还可以拒绝删除,以确保删除操作不会意外通过。差不多

validate_doc_update: function(newDoc, oldDoc, uCtx, sec) {
  if (oldDoc && newDoc._deleted) throw ({forbidden:'Can’t delete from archive'});
}
3) 在源bucket中创建视图索引,获取单据列表进行每周清理

4) 设置执行复制的重复任务,如果成功,则批量删除文档,如果成功,则执行源数据库压缩

使用
\u bulk\u docs
可以更好地执行批量删除–您可以发布
\u deleted
属性设置为true的文档数组。为确保源数据库即使在压缩后也不会隐藏已删除的文档,必须将
\u revs\u limit
设置为1()


为了确保文档在复制过程中不会消失,您最好使复制的日期范围比删除日期范围大得多。例如,如果您每个星期天删除超过28天(4周)的文档,则必须首先复制超过20天(3周减去1天)的文档。

或者您可以采用对备份数据库的连续复制-如上所示过滤删除-以确保备份包含文档的所有版本,不仅仅是每周一次的最新版本。