【问题标题】:Clojure doing multiple DB queries at onceClojure 一次执行多个数据库查询
【发布时间】:2021-07-28 14:56:42
【问题描述】:

在新线程上实现多个数据库查询或任何同步操作的最佳方式是什么?

我们以下面的代码为例:

(let [res1 (mysql/query...)
      res2 (mysql/query...)
      res3 (mysql/query...)
      final (do-something res1 res2 res3)]
  (http/ok final))

在这个例子中 res1 res2 res3 没有相互连接..意味着您可以同时执行所有它们,然后等待所有。

我希望这 3 个查询将同时进行,然后等待所有这些查询一起进行。

【问题讨论】:

    标签: clojure core.async


    【解决方案1】:

    可能最简单的方法是使用 Clojure 的内置线程池和 future 对象。

    (let [res1 (future (mysql/query...))
          res2 (future (mysql/query...))
          res3 (future (mysql/query...))
          final (do-something @res1 @res2 @res3)]
      (http/ok final))
    

    但是,您将需要在新线程中使用单独的 Connection 对象,因为 JDBC 连接 are not meant to be shared

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-07
      • 1970-01-01
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多