我在 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 后它起作用了,但我更喜欢更大的批量大小。