CouchDB中的并行/冗余复制

Dan*_*n S 7 rest replication synchronization couchdb database-replication

我有多个CouchDB服务器,我想彼此保持同步,我使用这些服务器共享大文件(例如> 100 MB).为了使它们保持同步,我让每个CouchDB实例从每个其他实例执行连续拉式复制.

这是一个例子:我有三个CouchDB服务器A,B和C,所有这些服务器都有相互连续的拉式复制,如下所示:

------- <------------- -------
|  A  | -------------> |  B  |
-------                -------
  ^ |                   | ^
  | |                   | |
  | V                   | |
------- <---------------- |
|  C  | -------------------
-------
Run Code Online (Sandbox Code Playgroud)

有人将文档上传到服务器A,附件为500MB.B和C都开始从A复制文档,B在C完成之前完成复制:

-------    doc         -------
|  A  |--------------->|  B  |
-------                -------
   |
   | doc
   V
-------
|  C  |
-------
Run Code Online (Sandbox Code Playgroud)

我的问题是,然后C会开始从B复制相同的文件(因为C也有从B的连续拉式复制),而它仍然从A传输文件?

-------                -------
|  A  |                |  B  |
-------                -------
   |          doc         |
doc|    |------------------
   |    |
   V    V
  -------
  |  C  |
  -------                           
Run Code Online (Sandbox Code Playgroud)

我猜这会发生,因为AFAIK,CouchDB复制实际上并没有将复制的文档存储到目标(使用_bulk_docs API),直到从源[1]完全提取文档(包括附件).我担心这种情况会发生,因为它会带来多余的带宽,并且会浪费大量带宽.

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

Ste*_*ögl 1

根据最近对 CouchDB users@ 列表的讨论以及描述复制算法的本文档,复制知道目标上已经存在哪个附件。但是,如果附件非常大,并且两端在其中任何一个完成之前就开始复制,则附件将被多次传输。