我正在尝试使用 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/