【发布时间】:2018-11-22 19:57:35
【问题描述】:
是否可以使用 Doobie 并行运行多个查询?
我有以下(伪)查询:
def prepareForQuery(input: String): ConnectionIO[Unit] = ???
val gettAllResults: ConnectionIO[List[(String, BigDecimal)]] = ???
def program(input : String) : ConnectionIO[List[(String, BigDecimal)]] = for{
_ <- prepareForQuery(input)
r <- gettAllResults
} yield r
我尝试的是以下内容:
import doobie._
import doobie.implicits._
import cats.implicits._
val xa = Transactor.fromDataSource[IO](myDataSource)
val result = (program(i1),program(i2)).parMapN{case (a,b) => a ++ b}
val rs = result.transact(xa).unsafeRunSync
但是,没有找到 ConnectionIO 的 NonEmptyParallel 实例。
错误:(107, 54) 找不到参数 p 的隐式值: cat.NonEmptyParallel[doobie.ConnectionIO,F] val 结果 = (program(i1),program(i2)).parMapN{case (a ,b) => a ++ b}
我是否遗漏了一些显而易见的事情或尝试了一些无法完成的事情? 谢谢
【问题讨论】:
-
你找到答案了吗?
-
可能是显而易见的,但如果您不需要在同一个事务中运行这两个查询,您可以先
transact它们然后parMapN生成IOs。 -
也许这个答案会有所帮助:stackoverflow.com/questions/55601408/…
标签: scala functional-programming scala-cats doobie