CouchDB中的并行/冗余复制

7
我有多个CouchDB服务器,想要让它们相互同步,并且我使用这些服务器来分享大文件(例如>100MB)。为了保持它们的同步,我让每个CouchDB实例从其他实例进行持续拉取复制。
以下是一个示例:我有三个CouchDB服务器A、B和C,它们都从彼此进行持续拉取复制,如下所示:
------- <------------- -------
|  A  | -------------> |  B  |
-------                -------
  ^ |                   | ^
  | |                   | |
  | V                   | |
------- <---------------- |
|  C  | -------------------
-------

有人将一个带有500MB附件的文档上传到服务器A。B和C都从A开始复制该文档,而B在C之前完成了复制:

-------    doc         -------
|  A  |--------------->|  B  |
-------                -------
   |
   | doc
   V
-------
|  C  |
-------

我的问题是,由于C还从B进行连续拉取复制在C仍在传输来自A的文档时,C是否会开始复制相同的文档从B
-------                -------
|  A  |                |  B  |
-------                -------
   |          doc         |
doc|    |------------------
   |    |
   V    V
  -------
  |  C  |
  -------                           

我猜这种情况会发生,因为据我所知,CouchDB复制并不会将目标上的复制文档存储(使用_bulk_docs API),直到文档(包括附件)已经完全从源获取[1]。我对这种情况感到担忧,因为这将是冗余的,并且浪费大量带宽。

[1] https://github.com/couchbaselabs/TouchDB-iOS/wiki/Replication-Algorithm


你看过BigCouch的复制功能吗?这样就不用手动操作了。 - ryan1234
我已经查看了BigCouch,但是我正在创建随时加入和离开的移动自组网。据我所知,对于BigCouch,您必须静态地设置所有内容以进行集群和复制。但感谢您的建议! - Dan S
我正在使用BigCouch和可连接到集群的移动设备开展项目,效果非常好。这个想法是在移动设备上安装Couchbase Mobile(或TouchDB),然后在负载均衡器后面有一组BigCouch机器集群。设备连接并引用数据库,数据被复制下来。但也许您的用例有些不同。 - ryan1234
1个回答

1
根据CouchDB用户列表上的最近讨论描述复制算法的文档,复制过程知道目标端已经存在哪些附件。但是,如果附件非常大,在两端都开始复制之前,附件将被多次传输。请注意,保留HTML标签。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接