Параллельная / избыточная репликация в 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 и это документ, описывающий алгоритм репликации репликация знает, какое вложение уже присутствует на цели. Если, однако, вложения очень велики и оба конца начинают репликацию до того, как один из них закончит, вложение будет передано несколько раз.