couchdb视图是否复制?

couchdb视图是否复制?,couchdb,Couchdb,我指的不是存储在_designdocs中的视图源(那些复制的,因为它们只是文档)。我的意思是,视图结果(计算出的btree)也要复制,或者只复制常规文档(这就是我现在的理解) 有问题的情况是: 流量激增,我想启动一个临时服务器,并将数据集的一部分复制到新服务器上。这些(要复制的)文档的视图已在旧服务器上计算,因此不需要在新服务器上重新计算。。。所以我希望这些旧的计算结果和文档的一部分一起传输 另一种情况是使用后端集群计算复杂视图,然后将这些结果复制到一组前端服务器上,这些服务器实际上被用户请求击

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

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


另一种情况是使用后端集群计算复杂视图,然后将这些结果复制到一组前端服务器上,这些服务器实际上被用户请求击中。

计算结果不会被复制

以下是一些额外的想法:

  • 当您对服务器进行分区并启动第二台服务器时,如何分配读/写操作并合并视图结果?这个设置需要一些思想的代理,我建议您仔细研究一下

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


让我知道这是否有帮助

正如蒂尔所说,结果是不可复制的。要了解更多细节,您实际上不希望复制它们。您应该记住的一般CouchDB范例是,每个安装都被视为一个独立的节点-这就是为什么_id、_rev和序列号如此重要的原因。这使得每个节点都可以在不考虑任何其他节点的情况下工作:如果您的一个节点发生故障,那么所有其他节点都将继续启动,而不需要考虑任何其他节点

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

  • 用户将更改写入web服务器a
  • 用户向web服务器B发出读取请求,因为负载平衡器认为B是更好的选择。用户得到他们的结果
  • Web服务器A通过复制将更新的文档发送到Web服务器B
  • 如您所见,用户获得了他们文档的早期版本,因为web服务器B还不知道该更改。这可以用…来打败

    • 粘贴会话,以便它们的所有读写操作都进入同一服务器。这可能最终会打败负载平衡器
    • 将CouchDB节点从web服务器移到它们自己的框中。如果您继续这样做,那么您可能想看看couchdb lounge项目()
    • 你的用户真的在乎结果是否过时吗?您的用例可能是这样的:您的用户不会注意到他们的结果是否没有反映他们刚才所做的更改。确保你真的从这项工作中获得了显著的价值
    干杯