CouchDB中的并行/冗余复制

时间:2013-01-01 23:56:47

标签: rest synchronization couchdb replication database-replication

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

1 个答案:

答案 0 :(得分:1)

根据recent discussion on the CouchDB users@ listthis document describing the replication algorithm,复制知道目标上已存在哪个附件。但是,如果附件非常大并且两端都在其中任何一个完成之前开始复制,则附件将被多次传送。