概要
レプリケーションは、2 つのデータベース(レプリケーション元とレプリケーション先)を対象としたインクリメンタルな一方向のプロセスです。
レプリケーションの目的は、レプリケーション・プロセスの終了時に、レプリケーション元のすべてのアクティブなドキュメントがレプリケーション先のデータベースにも存在するようにし、さらにレプリケーション元で削除されたすべてのドキュメントをレプリケーション先でも(もし存在すれば)削除された状態にすることです。
レプリケーション・プロセスではドキュメントの最新リビジョンだけがコピーされるので、レプリケーション元のデータベースだけに存在するそれ以前のすべてのリビジョンは、レプリケーション先のデータベースにはコピーされません。
レプリケーションの実行
レプリケーションは、_replicate URL に対して POST リクエストを送信することでトリガされます。このとき、ボディの JSON オブジェクトには、メンバとして source と target を含めます。
POST /_replicate HTTP/1.1
{"source":"example-database","target":"http://example.org/example-database"}
source と target には、両方にローカル・データベースを指定したり、両方にリモート・データベースを指定したりできるほか、ローカル・データベースとリモート・データベースの任意の組み合わせを指定できます。
ローカル CouchDB インスタンスが admin アカウントで保護されている場合には、次に示すようにフル URL 形式を使用する必要があります。
POST /_replicate HTTP/1.1
{"source":"http://example.org/example-database","target":"http://admin:password@127.0.0.1:5984/example-database"}
レプリケーション先データベースはすでに存在している必要があり、暗黙のうちに作成されることはありません。レプリケーション元とレプリケーション先のデータベースの名前が同じである必要はありません。
ローカル source データベースとリモート target データベースを指定したレプリケーションはプッシュ・レプリケーションと呼ばれ、リモート source データベースとローカル target データベースを指定したレプリケーションはプル・レプリケーションと呼ばれます。CouchDB 0.9 以降ではプル・レプリケーションの方がはるかに効率的に動作し、エラーに対する耐障害性も高いので、ほとんどの場合、特にドキュメントが大きい場合やサイズの大きな添付ファイルがある場合には、プル・レプリケーションを使うことを勧めます。