在Futures中包装Slick查询

Geo*_*ios 10 scala future slick

我正在尝试使用Slick异步查询MySQL数据库.下面的代码模板,我用来查询大约90k行的for comprehension,似乎最初工作,但程序消耗几千兆字节的RAM,并在大约200次查询后失败而没有警告.

import scala.slick.jdbc.{StaticQuery => Q}
def doQuery(): Future[List[String]] = future {
  val q = "select name from person"
  db withSession {
    Q.query[String](q).list
  }
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用该fromURL方法设置连接,也使用c3p0连接池.我的问题是:这是对数据库进行异步调用的方法吗?

Ako*_*chy 4

对于 Slick 来说,异步仍然是一个悬而未决的问题。

您可以尝试使用 Iterables 和流数据,而不是使用类似于以下的解决方案将其存储在内存中:Treating an SQL ResultSet like a Scala Stream

尽管请在最后省略 .toStream 调用。它会将数据缓存在内存中,而 Iterable 不会。

如果您想要 iterable 的异步版本,您可以查看Observables