【问题标题】:couchdb gen_server call timeout during purge清除期间的 couchdb gen_server 调用超时
【发布时间】:2017-06-02 19:23:45
【问题描述】:

我正在对使用 java 程序运行 couchdb 清除的持续时间进行分析。 couchdb 连接和调用使用 ektorp 处理。对于少数文档进行了清除,我收到了成功响应。

但是当我清除 ~ 10000 或更多时,我收到以下错误:

    org.ektorp.DbAccessException: 500:Internal Server Error
    URI: /dbname/_purge
    Response Body: 
    {
      "error" : "timeout",
      "reason" : "{gen_server,call,
....

在使用 curl 命令检查数据库状态时,实际清除已发生。但是这个超时不允许我在我的 java 程序中监视清除方法的实际时间,因为这会引发异常。

在一些研究中,我相信这是由于 erlang gen_server 进程的默认超时值。无论如何我可以解决这个问题吗?

我已尝试更改 StdHttpClient 的超时值,但无济于事。

HttpClient authenticatedHttpClient = new StdHttpClient.Builder()
                    .url(url)
                    .username(Conf.COUCH_USERNAME)
                    .password(Conf.COUCH_PASSWORD)
                    .connectionTimeout(600*1000)
                    .socketTimeout(600*1000)
                    .build();

【问题讨论】:

    标签: java erlang timeout couchdb purge


    【解决方案1】:

    CouchDB 开发人员在这里。您不应该对大量文档使用清除。这是为了从数据库中删除意外添加的数据,例如信用卡或社会安全号码。这不适用于一般操作。

    因此,您不能提出 gen_server 超时 :)

    【讨论】:

    • 感谢您的回复,这基本上是一段时间内收集的已删除数据的情况。因此寻找一种一次性清除选项来释放磁盘空间。一个相关问题:是否有可能通过清除大量已删除的文档导致数据损坏?
    • 对于时间序列数据,我们建议每个 $interval 一个数据库,因此您可以简单地删除以前的间隔数据库。数据损坏:不,CouchDB 中的所有内容都是 append_only 和 fsync() 安全的。
    猜你喜欢
    • 1970-01-01
    • 2020-08-20
    • 2014-05-12
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 2011-07-19
    相关资源
    最近更新 更多