我有多个CouchDB服务器,我希望彼此保持同步,我使用这些服务器共享大文件(例如> 100 MB)。为了使它们保持同步,我让每个CouchDB实例从每个其他实例执行连续拉式复制。
这是一个例子:我有三个CouchDB服务器A,B和& C,所有这些都有相互连续的拉复制,如下:
------- <------------- -------
| A | -------------> | B |
------- -------
^ | | ^
| | | |
| V | |
------- <---------------- |
| C | -------------------
-------
有人将文档上传到服务器A,附件为500MB。 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
答案 0 :(得分:1)
根据recent discussion on the CouchDB users@ list和this document describing the replication algorithm,复制知道目标上已存在哪个附件。但是,如果附件非常大并且两端都在其中任何一个完成之前开始复制,则附件将被多次传送。