scala - 在 Futures 中包装 Slick 查询

标签 scala future slick

我正在尝试使用 Slick 异步查询 MySQL 数据库。下面的代码模板,我用来在 a 中查询大约 90k 行以进行理解,最初似乎可以正常工作,但该程序消耗了几 GB 的 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
  }
}

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

最佳答案

异步仍然是 open issue for Slick .

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

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

如果你想要一个异步版本的 iterable,你可以查看 Observables .

关于scala - 在 Futures 中包装 Slick 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19848805/

相关文章:

java - 使用 Scala 的 poi-ooxml-schemas-3.9.jar 的 Sbt 编译错误

rust - 我可以将 `impl Future` 存储为具体类型吗?

scala - 为什么 Scala Future 在映射到迭代器时顺序运行

scala - 如何使用 Slick 进行 INSERT IGNORE 查询?

scala - 光滑和按选项列过滤

mysql - Slick 中长时间运行的事务

web-services - 我如何使用 Play Framework 的 FakeApplication 来通过 play 的 WS 对象停止对 Web 服务的调用?

scala - Scala 中对映射值进行求和和分组

java - 如何在 Scala 中将 Java Collection[Int] 转换为 Array[Int]

future - Vertx 中任意数量调用的顺序组合与 Futures