、ありがとうございました。 CloudantのレプリケーションはCouchDBと100%互換です。この インスタンスでは、TouchDBのログは、不完全なJSONからTouchDBへの が渡されたiOSネットワークスタックを示します。この場合、レプリケーションが失敗したために、誰が を非難したのかは明らかではありません。コストの問題については
[1] https://github.com/couchbaselabs/TouchDB-iOS/issues/241
、ワンショットプルレプリケーションは_changes
フィードそれが起こるたびに、プラス 複製するために必要なその他の要求にGETになります。この_changes
リクエストは、Cloudantアカウントに対してHTTPリクエストとして とカウントされます。
ただし、これ以上の要求があるかどうかは、 の場合は、リモートサーバーからの変更の数によって異なります。
それは_changes
呼の数が関与する他の呼(例えば、多くの 添付ファイルがある場合は特に変更自身の コンテンツを取得して)の数に 比べ非常に小さいことを覚えておくことも重要です。この質問はTouchDBに固有のものであり、私はそのコードベースの特定 行動に言及しながら
は、要求にこの答えのお得な情報は、CouchDBのレプリケーション プロトコルを話す任意の2つのシステム間でのレプリケーションに を関与[2]。
[2]
http://www.dataprotocols.org/en/latest/couchdb_replication.htmlはのは不自然な例を見てみましょう:TouchDBデータベース が対象となる複製するための1更新 への第2の窓10ごとに、ソース・データベース。連続した複製と5分間のアンケートを行いましょう。 コールカウンティングを簡単にするため、添付ファイルを 画像から取り出してみましょう。また、デバイスには一定のネットワーク接続があるものとします。
連続している場合、TouchDBはすべて、 _changes
フィードで更新を受信します。これにより、longpoll
接続が閉じます。 TouchDBは変更を実行し、 ソースデータベースからの更新を要求します。リモートサーバー上の1つ以上のGET要求 これが起こっている間、TouchDBは別のlongpoll
要求を開く必要があります。 〜_changes
だから5分の間におそらく の_changesへの呼び出しと、ドキュメントを取得して のチェックポイントを記録するためのすべての呼び出しで終わるでしょう。
5分ごとにワンショットレプリケーションと比較してください。 は、1回の_changesフィード呼び出しで30個の更新の通知を受け取ります。 TouchDBは、最適化を実装して、[3]それはあなたが のような連続する場合では不可能すべての30件の文書を(得るために、単一の 呼び出しで終わるかもしれないので、1-回転域用の更新された文書を取得するために _all_docs呼び出すことによって、あなた一回の変更を受けました)。次に、チェックポイント文書 を記録します。最高5つ未満のHTTPコール、最大でも の約3分の1、継続的なケースとしては、追加の_changes
リクエストを避けました。
は、[3] https://github.com/couchbaselabs/TouchDB-iOS/wiki/Replication-Algorithm#performance
は、それはあなたがソース データベースへの期待の更新頻度にダウンしています。ワンショットレプリケーションでは、作成するリクエストの数をより適切に制御できるため、より円滑な価格を提供する可能性があります( )。
さらに、モバイルデバイスで定期的に発生するネットワーク切断のため、接続がどの程度頻繁に切断されるかが問題です。 ユーザが(_replicatorデータベースを介して追加された場合)ユーザーがオンラインになるたびに、TouchDBの連続レプリケーションが実行されます。これは、予測不可能なコストのさらなる原因である です。
しかし、変更のより迅速な可視性のメリットは確かに不確実性に値する かもしれません。
"CloudantはTouchDBの連続レプリケーションと互換性がありません。"何故なの? – garbados
マイクは彼の返答で非互換性の問題を指摘した。まだ解決されていない未解決の問題です。 TouchDBの著者やCloudantのサポートは、問題の原因を特定することはできませんでしたが、比較的容易に再現することができました。 – airpaulg