私は単純なバッチ フェッチを使用して、couchdb で更新します。
int batchSize = 5000;
String startKey = "";
List<FrontLineWorker> frontLineWorkers;
while (true) {
frontLineWorkers = allFrontLineWorkers.getMsisdnsFrom(startKey, batchSize);
if (frontLineWorkers.size() < batchSize) break;
for (FrontLineWorker frontLineWorker : frontLineWorkers) {
// process record, only updates record
}
startKey = frontLineWorkers.get(frontLineWorkers.size() - 1).getMsisdn();
}
getMsisdnsFrom はカウチ クエリであり、数回後にタイムアウトし始めます。ソファは読み取りが完了したときにのみビューをインデックス付けすることを知っていますが、レコードを更新するだけなので、インデックスには影響しません。また、これは予想される使用法であり、レコードのセットを取得し、次のセットを変更して取得するため、タイムアウトすることはないと思います。
バッチ時間 1000 と 5000 の両方で試しました。
例外メッセージは次のとおりです: スレッド「メイン」での例外 org.ektorp.DbAccessException: java.net.SocketTimeoutException: 読み取りタイムアウト
編集:バッチサイズを100に減らした後は機能しましたが、バッチサイズを大きくした方がよかったでしょう。