Параллельная / избыточная репликация в CouchDB

у меня есть несколько серверов CouchDB, которые я хочу синхронизировать друг с другом, и я использую эти серверы для обмена большими файлами (например, >100 МБ). Чтобы синхронизировать их, каждый экземпляр CouchDB выполняет непрерывную репликацию тяги друг от друга.

вот пример: у меня есть три сервера CouchDB A, B, & C, все из которых имеют непрерывные репликации тяги друг от друга, как так:

------- <------------- -------
|  A  | -------------> |  B  |
-------                -------
  ^ |                   | ^
  | |                   | |
  | V                   | |
------- <---------------- |
|  C  | -------------------
-------

кто-то загружает документ на сервер A с вложением 500 МБ. B и C начинают репликацию документа из A, и B завершает репликацию до того, как C делает:

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

мой вопрос:затем C начнет репликацию того же документа из B (так как C также имеет непрерывную репликацию тяги от B),пока она еще передачи документа от?

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

Я бы предположил, что это произойдет, так как AFAIK, репликация CouchDB фактически не хранит реплицированные документы в целевой объект (используя API _bulk_docs), пока документы (включая вложения) не будут полностью извлечены из источника[1]. Я беспокоюсь об этом, так как это было бы избыточным и большой тратой пропускной способности.

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

1 ответов


по словам последние обсуждения в CouchDB users@ list и это документ, описывающий алгоритм репликации репликация знает, какое вложение уже присутствует на цели. Если, однако, вложения очень велики и оба конца начинают репликацию до того, как один из них закончит, вложение будет передано несколько раз.