【问题标题】:do couchdb views replicate?couchdb 视图会复制吗?
【发布时间】:2010-07-07 00:27:11
【问题描述】:

我不是指存储在 _design 文档中的视图源(那些复制,因为它们只是文档)。我的意思是视图结果(计算出的 btrees)也复制,或者只复制常规文档(这就是我现在理解的方式)。

有问题的场景是:
流量激增,我想启动一个临时服务器,并将数据集的一部分复制到该新服务器上。那些(要复制的)文档的视图已经在旧服务器上计算过了,所以不需要在新服务器上重新计算......所以我希望那些旧的计算结果与文档的一部分一起传输.

另一种场景是使用后端集群来计算复杂的视图,然后将这些结果复制到一组实际受到用户请求的前端服务器上。

【问题讨论】:

    标签: couchdb


    【解决方案1】:

    正如 Till 所说,结果不会被复制。有关更多详细信息,您实际上不希望它们被复制。您应该记住的一般 CouchDB 范例是,每个安装都被视为一个独立的节点——这就是 _id、_rev 和序列号如此重要的原因。这允许每个节点在不考虑任何其他节点的情况下工作:如果您的一个节点出现故障,那么所有其他节点将继续在世界上无忧无虑地运转。

    当然,这引入了您可能不习惯的关于一致性的新注意事项。例如,如果您有多个 Web 服务器,每个服务器上都有自己的 CouchDB 节点,并且这些节点在它们之间运行复制以使每个实例保持最新,那么节点之间将存在延迟。这是一个示例流程:

    1. 用户将更改写入 Web 服务器 A。
    2. 用户向 Web 服务器 B 发出读取请求,因为您的负载平衡器认为 B 是更好的选择。用户得到他们的结果。
    3. Web 服务器 A 通过复制将更新后的文档发送到 Web 服务器 B。

    如您所见,用户获得了其文档的先前版本,因为 Web 服务器 B 还不知道该更改。这可以用...击败。

    • 保持会话,以便它们的所有读取和写入都转到同一服务器。这最终可能会破坏您的负载平衡器。
    • 将 CouchDB 节点从 Web 服务器移到它们自己的盒子上。如果你选择这个,那么你可能想看看 couchdb-lounge 项目 (http://tilgovi.github.com/couchdb-lounge/)。
    • 您的用户是否真的关心他们是否获得过时的结果?您的用例可能是您的用户不会注意到他们的结果是否反映了他们刚刚所做的更改。确保您确实从这项工作中获得了显着的价值。

    干杯。

    【讨论】:

      【解决方案2】:

      计算结果不会被复制。

      这里有一些额外的想法:

      • 当您对服务器进行分区并使用它启动第二台服务器时,您如何分配读/写和合并视图结果?此设置需要一些想法的代理,我建议您查看CouchDB-Lounge

      • 如果你在做master-master,你可以使用DRDB保持服务器同步。它已被证明可以与 mysql 主-主复制一起使用,我不明白为什么它在这里不起作用。这也意味着计算结果在两台服务器上自动同步。

      如果这有帮助,请告诉我!

      【讨论】:

        猜你喜欢
        • 2011-12-26
        • 2011-07-27
        • 2011-04-22
        • 1970-01-01
        • 2014-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多