7

我有多个 CouchDB 服务器,我希望彼此保持同步,并且我使用这些服务器来共享大文件(例如 >100 MB)。为了使它们保持同步,我让每个 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 也从 B 连续提取复制),而它仍在从 A 传输文档?

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

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

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

4

1 回答 1

1

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

于 2013-10-23T15:34:53.773 回答