java - 在连续更新的批处理中运行时 couchdb 查询超时

标签 java database nosql couchdb ektorp

我在 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 是沙发查询,几次后开始超时。我知道 couch 仅在读取完成时索引 View ,但由于我只更新记录,因此它不应该影响索引。此外,由于这是预期的用途,获取一组记录,修改并获取下一组,我不希望它超时。

我试过批处理时间 1000 和 5000。

异常消息是:线程“main”中的异常 org.ektorp.DbAccessException:java.net.SocketTimeoutException:读取超时

编辑:在我将批量大小减少到 100 后它起作用了,但我更喜欢更大的批量大小。

最佳答案

这个 java.net.SocketTimeoutException 是一个非常低级的异常,听起来您可能只需要增加套接字超时值,以便 Java 等待读取完成。

djc也是正确的,所有更新都会导致受影响节点的重新索引,但是您可以避免批量大小为 100 的超时这一事实意味着重新索引不会导致重大问题。

问题是批量大小对于您的套接字超时来说太大了,减少第一个或增加第二个。

关于java - 在连续更新的批处理中运行时 couchdb 查询超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11516713/

相关文章:

node.js - Couchdb 大小管理

database - 我应该如何在数据库中存储稀疏决策树(移动列表)?

database - 批处理/拆分 PostgreSQL 数据库

java - 生成int唯一id作为android通知id

c# - Xamarin C# - Android - 防止 AlertDialog 在 PositiveButton 单击时关闭

sql - 数据库可选参数错误

database - Cassandra,查询主键,跳过聚类列(timeuuid)

cassandra - 如何仅使用分区键更新 cassandra 中的行?

java - 如何将多个对象写入可序列化文件并在程序再次使用时读取它们?

java - 用空字符串替换所有非字母数字字符