J'utilise une simple fetch par lots et mettre à jour sur couchdb.requête couchdb temporisation lors de l'exécution dans un lot avec mises à jour en continu
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();
}
Le getMsisdnsFrom est une requête de canapé, et il commence à temps après quelques temps. Je sais que le divan indexe les vues seulement quand une lecture est faite, mais puisque je ne fais que mettre à jour les enregistrements il ne devrait pas affecter les index. De plus, puisqu'il s'agit d'une utilisation attendue, obtenir un ensemble d'enregistrements, modifier et obtenir l'ensemble suivant, je ne m'attends pas à ce qu'il expire.
J'ai essayé avec les deux fois par lots 1000 et 5000.
Message d'exception est: Exception dans le thread "principal" org.ektorp.DbAccessException: java.net.SocketTimeoutException: Lire a expiré
EDIT : Cela a fonctionné après que j'ai réduit la taille de lot à 100, mais j'aurais préféré une taille de lot plus élevée. La mise à jour des documents les force à être réindexés.
oui je sais, mais 100 est une taille très mauvaise pour la base de données. Je me demandais s'il y avait une erreur dans la façon dont je l'utilisais. Mais il semble que c'est la seule option. Merci. – nutsiepully