相互に同期を維持したい複数のCouchDBサーバーがあり、これらのサーバーを使用して大きなファイル(たとえば、> 100 MB)を共有しています。それらの同期を維持するために、各CouchDBインスタンスに他のインスタンスからの継続的なプルレプリケーションを実行させます。
次に例を示します。3つのCouchDBサーバーA、B、およびCがあり、それらはすべて相互に継続的なプルレプリケーションを持っています。
------- <------------- -------
| A | -------------> | B |
------- -------
^ | | ^
| | | |
| V | |
------- <---------------- |
| C | -------------------
-------
誰かが500MBの添付ファイルを含むドキュメントをサーバーAにアップロードします。BとCは両方ともAからのドキュメントの複製を開始し、BはCが行う前に複製を終了します。
------- doc -------
| A |--------------->| B |
------- -------
|
| doc
V
-------
| C |
-------
私の質問は、 CがAからドキュメントを転送している間に、CはBから同じドキュメントの複製を開始しますか(CもBからの継続的なプル複製を持っているため) ?
------- -------
| A | | B |
------- -------
| doc |
doc| |------------------
| |
V V
-------
| C |
-------
AFAIK、CouchDBレプリケーションは、ドキュメント(添付ファイルを含む)がソースから完全にフェッチされるまで(_bulk_docs APIを使用して)レプリケートされたドキュメントを実際にターゲットに保存しないため、これが発生すると思います[1]。冗長で帯域幅の大きな浪費になるので、これが発生するのではないかと心配しています。
[1] https://github.com/couchbaselabs/TouchDB-iOS/wiki/Replication-Algorithm