【问题标题】:Recommended way to execute long running queries执行长时间运行查询的推荐方法
【发布时间】:2021-10-19 11:04:26
【问题描述】:

在 jOOQ 中执行长时间运行查询的推荐方法是什么?

异步执行查询是否有任何缺点(ForkJoinPool 上的阻塞操作可以通过向专用线程池提供执行来缓解)、将结果转换为 CompletableFuture 并在指定超时时调用 get() 方法?

dslFactory
    .create()
    .selectFrom(TABLE_NAME)
    .where(conditions)
    .fetchAsync()
    .toCompletableFuture().get(10, TimeUnit.SECONDS);

【问题讨论】:

    标签: java jooq


    【解决方案1】:

    正如您所指出的,在 JDBC 之上运行 jOOQ 查询(同步或异步,无关紧要)时,您将在某处阻塞,并且您必须以某种方式管理这些资源。在很多情况下,这不是什么大问题。

    如果阻塞成为问题,jOOQ 3.15 开始支持 R2DBC,它允许响应式运行您的查询,而不会在客户端阻塞:https://blog.jooq.org/2021/07/15/reactive-sql-with-jooq-3-15-and-r2dbc

    您的查询将如下所示:

    Flux<TableNameRecord> result = Flux.from(
        dslFactory
            .create()
            .selectFrom(TABLE_NAME)
            .where(conditions));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多