我们的数据库变得太大了,我们需要基于过滤器(即创建的日期字段)将较旧的记录归档到归档数据库中。完成此任务的最快、最简单的方法是什么?只要代码易于理解和维护,大多数语言都是可以接受的。
这将需要是一个可以计划为定期运行的任务,例如每周。
发布于 2015-02-10 11:42:23
您可以使用此策略:
1)设置单向过滤复制,参见http://wiki.apache.org/couchdb/Replication#Filtered_Replication。您的过滤器函数必须检测并拒绝较新的文档和删除。
2)可选地在目标数据库中添加validate_doc_update函数。它还可以拒绝删除-以确保不会有del操作意外通过。就像这样
validate_doc_update: function(newDoc, oldDoc, uCtx, sec) {
if (oldDoc && newDoc._deleted) throw ({forbidden:'Can’t delete from archive'});
}3)在源存储桶中创建view索引,拉取每周刷新的单据列表。
4)设置重复任务,执行复制,如果成功,则批量删除文档,如果成功,则执行源DB压缩。
使用_bulk_docs可以更好地执行批量删除-您可以发布_deleted属性设置为true的文档数组。为了确保源数据库即使在压缩之后也不会隐藏已删除的文档,必须将_revs_limit设置为1 (http://docs.couchdb.org/en/latest/api/database/misc.html#db-revs-limit)。
为了确保文档在处理过程中不会丢失,您最好保持复制的日期范围比删除日期范围大得多。例如,如果您在每个星期天删除超过28天(4周)的文档,则必须首先复制超过20天(3周减去1天)的文档。
https://stackoverflow.com/questions/28422644
复制相似问题