【问题标题】:How to read data in batches using JDBI?如何使用JDBI批量读取数据?
【发布时间】:2022-10-21 06:06:35
【问题描述】:

我想从表中读取所有数据。该表有 400 万行,每行 25 列。我将 fetch size 设置为 1_000,以免 JVM 因大量数据而过载。但查询本身因超时异常而失败。

JDBI 是否提供了一个“游标”,可以批量读取数据从而避免语句超时? JDBI 有没有其他方法可以在没有语句超时的情况下读取这个 JDBI?

代码:

 var handle = jdbi.open()
 handle
   .createQuery("SELECT * FROM TEST_TABLE")
   .setFetchSize(1_000)
   .mapToMap()

例外:

query execution canceled due to statement timeout [statement:"SELECT * FROM TEST_TABLE", arguments:{positional:{}, named:{}, finder:[]}]
    at org.jdbi.v3.core.statement.SqlStatement.internalExecute(SqlStatement.java:1796)
    at org.jdbi.v3.core.result.ResultProducers.lambda$getResultSet$2(ResultProducers.java:64)
    at org.jdbi.v3.core.result.ResultIterable.lambda$of$0(ResultIterable.java:57)
    at org.jdbi.v3.core.result.ResultIterable.iterator(ResultIterable.java:43)

【问题讨论】:

    标签: kotlin jdbc cockroachdb jdbi


    【解决方案1】:

    首先,尝试使用较小的 fetch 大小。

    如果这不起作用,您可以尝试在应用程序代码中进行分页。在这里查看文档:https://www.cockroachlabs.com/docs/stable/pagination.html

    最后,您的 statement_timeout 设置为多少?你能提高它吗?

    您是否在较小的桌子上进行过测试?您可以在不超时的情况下加载的最大表是多少?

    【讨论】:

      猜你喜欢
      • 2021-08-30
      • 1970-01-01
      • 1970-01-01
      • 2013-05-18
      • 2016-09-27
      • 2018-06-07
      • 1970-01-01
      • 2011-03-13
      • 1970-01-01
      相关资源
      最近更新 更多