首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Doobie中并行运行查询

在Doobie中并行运行查询
EN

Stack Overflow用户
提问于 2018-06-13 09:30:06
回答 1查看 1.1K关注 0票数 13

是否可以使用Doobie并行运行多个查询?

我有以下(伪)查询:

代码语言:javascript
复制
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

我尝试了以下几点:

代码语言:javascript
复制
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

但是,没有为NonEmptyParallel找到ConnectionIO实例。

错误:(107,54)找不到参数p的隐式值: cats.NonEmptyParalleldoobie.ConnectionIO,F val result =(i1,i2).parMapN{case (a,b) => a ++ b}

我是错过了一些显而易见的事情,还是尝试了一些无法完成的事情?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-16 07:04:46

不能在ConnectionIO monad中并行运行查询。但是,一旦您将它们转换为实际的运行时monad (只要它有一个并行实例),您就可以。

例如,使用cats effect IO运行时monad:

代码语言:javascript
复制
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

将您的ConnectionIO转换为IO

代码语言:javascript
复制
val program1IO: IO[List[(String, BigDecimal)]]] = program(i1).transact(xa)
val program2IO: IO[List[(String, BigDecimal)]]] = program(i2).transact(xa)

你现在有了一个可以并行做事情的单子。

代码语言:javascript
复制
val result: IO[List[(String, BigDecimal)]]] = 
    (program1IO, program2IO).parMapN{case (a,b) => a ++ b}

为了理解为什么ConnectionIO不允许您并行地做事情,我将引用tpolecat的话:

您不能并行运行ConnectionIO。它是一种描述连接的使用的语言,它是一个线性的操作序列。在IO中使用parMapN,是的,您可以同时运行两件事情,因为它们运行在不同的连接上。没有带有parMapN的ConnectionIO,因为它没有(也不能)有一个并行实例。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50833774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档