【问题标题】:Can you specify a CouchDB replication filter on the receiving database?你能在接收数据库上指定一个 CouchDB 复制过滤器吗?
【发布时间】:2016-03-11 00:49:21
【问题描述】:

这里有一篇很棒的文章 (https://momentum.spindance.com/2016/02/couchdb-replications/),其中包含有关 CouchDB 复制的有用信息。查看文档很容易找到对复制过滤器的引用(例如http://docs.couchdb.org/en/1.6.1/couchapp/ddocs.html)。

但是,它们似乎都涉及过滤提要将发出的更改。我希望一个主 CouchDB 发出所有文档,然后几个从属只存储适合其 ID 范围的文档。

是否可以在设计文档中使用过滤器来做到这一点?

否则,这可以通过从属服务器上的验证文档更新功能和主服务器上的推送复制来完成吗?

从属和主控实际上具有误导性,因为信息将被插入到“从属”中,每个从属都需要有一个信息子集。

【问题讨论】:

    标签: couchdb


    【解决方案1】:

    The documentation for this 似乎没有进入新的 wiki,但是是的,您可以通过在复制文档中提供 doc_ids 属性来进行命名文档复制。

    更新以下 OP 评论

    抱歉,我意识到我没有回答您的核心问题。不,您不能在接收器上安装过滤器。过滤是在整个文档上完成的,所以即使你可以 Couch 也需要接收器上的所有完整文档,然后它才能过滤它们,所以即使你能够做到这一点,你也会传输所有文档。

    顺便说一句,您可以在接收器上设置第二个数据库,从主数据库复制所有文档,然后让 定义过滤器,将您的过滤复制复制到接收器上的其他数据库.

    ...是的,对于命名文档复制,您必须提供所有 ID,不,该数据的大小没有限制。

    还有一点你可能没有想到,过滤功能只是设计文档的一部分,所有文档(包括设计文档)都可以复制。因此,如果您愿意,您实际上可以在接收器上创建过滤器,然后将它们复制到主服务器,然后在过滤复制中使用接收器中的它们。

    【讨论】:

    • 谢谢,这很简单。例如,如果我有 50k 个文档:10k 到 DB1,10k 到 DB2,10k 到 DB3,等等。它们将具有顺序 ID。看起来我必须为每个数据库指定每个 ID?或者我可以做范围。出于这个原因,过滤功能似乎更好。如果我在接收数据库上定义过滤器功能,你可以在复制文档上这样做吗?或者,您可以按照文档建议的方式指定 10 000 个字段吗?
    • 哦,对不起,我意识到我实际上并没有回答你的问题。我现在已经更新了我的答案。
    • 最后一段特别有用。谢谢
    • 是的,我在写剩下的部分时才恍然大悟,祝你好运。
    • 您好,还有一个问题。如果我要使用命名复制,则该复制需要每月更新一次。即每个月都会删除现有的复制并用具有不同 id 的新复制替换,其中大部分是重叠的。在这种情况下会发生什么?理想情况下,复制将停止,然后添加新复制,然后复制将继续进行,仅复制新复制的 ID。是这样吗?
    猜你喜欢
    • 1970-01-01
    • 2014-01-11
    • 2011-10-28
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多