2017-10-25 5 views
1

私のデータを1つのCloudantインスタンスから別のものに移動する処理中です。データを移動する良い方法として、私は連続複製のために複製文書を作成しました。それらのほとんどはすべてのドキュメントを複製します(私はフィルタを使用しなかったので期待どおりですが)いくつかのドキュメントをスキップします。クラウドレプリケーションで一部のドキュメントがスキップされる

問題のある2つのデータベースには、新しい文書のみが保存されます(更新なし、削除なし)。より大きいdb(> 30 Mioドキュメント)の調査の後、特定の日付の後に作成された文書だけがスキップされることに気付きました。この日以降のほとんどの日は、作成された文書の約1/3を逃しています。 通常、レプリケーション文書のエラーが頻繁に消えて再び表示され、ステータスが「トリガされました」に切り替わることがありました。

worker_diedエラーメッセージは{[{<<"error">>,<<"too_large">>}, {<<"reason">>,<<"the request entity is too large">>}]}と報告されています。 ソースデータベースに問題がないことを示します。

この問題を解決するにはどうすればよいですか?

答えて

1

IBM Bluemix Publicの古いインスタンス、専用またはMetered Cloudantアカウントから新しいインスタンスにレプリケートしているようです。古いインスタンスでは、最大要求サイズは64Mですが、新しいインスタンスではこの制限は1Mに縮小されます。この相違はおそらく問題です。

複製中は、ソースに書き込まれるとドキュメントがバッチ処理されます。ドキュメント自体が1Mより小さい場合は、1M要求制限サイズでスクイーズするようにバッチサイズを調整できる必要があります。バッチサイズはデフォルトで500に設定されていますが、これはworker_batch_sizeパラメータを使用して変更できます。ドキュメントのいくつかは、1Mは、その後、あなたは運の出ていることも大きい場合

https://console.bluemix.net/docs/services/Cloudant/api/advanced_replication.html#performance-related-options

を参照してください。

+0

あなたの返事をありがとう。専用のCloudantインスタンスが異なるバッチサイズを使用することはわかりませんでした。私は 'worker_batch_size = 1'で別のレプリケーションを見ていました。それはおそらく数日間実行されますが、結果が正しい場合は私はそれで生きることができます。 –

+0

それが動作するかどうか教えてください – xpqz

0

ありがとう、xpqz、正しい方向に私を導いてくれました。 worker_batch_sizeを単独で減らしても、1MBを超えるドキュメントがあるため問題は解決しませんでした。 1MBを超えるすべてのドキュメントをスキップするために別のフィルタを追加した後、すべての小さなドキュメントが複製されました。 残念ながら、Cloudantは大きな文書をスキップして移動することはありませんが、同じ大きな文書を何度も複製することを再試行し、その後のすべての文書は決して複製されません。

  • サイズのフィルタを用いてDDを作成する:

    "フィルタ":{ "doc_size":「関数(DOC、REQ){\ Rは\ N(JSON.stringify(DOC場合).LENGTH> 1048575){\ Rの\ nはfalseを返す; \ rをする\ n} \ R \ nはtrueを返し、\ rをする\ n} "}

  • 複写ドキュメントにフィルタを追加する:

    "フィルタ":"/doc_size "、

+0

他人を助けることができるように答えを受け入れることは自由に感じてください。ありがとう! – xpqz

関連する問題