我有多个 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