rest - CouchDB 中的并行/冗余复制

标签 rest synchronization couchdb replication database-replication

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

最佳答案

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

关于rest - CouchDB 中的并行/冗余复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14115398/

相关文章:

php - Newsletter2Go REST API - 如何将新收件人添加到列表中?

json - 使用处理程序进行 Couch DB 批量更新

go - 如何在 golang 中使用 couch db 查询限制

sharepoint - 以文档为中心的系统的基本原理是什么?

javascript - 苏格拉底,苏打水,休息,JS : How to query number of rows?

rest - Grails REST XML API定义

c++ - std::condition_variable 内存写入可见性

java - 如果多个线程写入单个映射,则使用哪个映射实现

java - 使用 curl 发布, postman 工作但 java 给出 SSL 错误

java - 跨类同步