【发布时间】:2013-11-07 23:26:35
【问题描述】:
我正在尝试使用 Slick 异步查询 MySQL 数据库。下面的代码模板,我用来在 for comprehension 中查询大约 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 连接池来设置连接。我的问题是:这是对数据库进行异步调用的方式吗?
【问题讨论】:
-
如果你使用
db withSession { implicit session :Session =>会有什么行为?仅供参考,不鼓励threadLocalSession。 -
我可以使用什么(以及如何)代替
threadLocalSession,或者在哪里可以找到有关可用会话类型的文档? -
从 withSession 调用中获取会话,而不是像我写的
db withSession { implicit session :Session => -
问题是在上面的代码中
db代表一个数据库连接而不是一个会话。我假设由于大多数(全部?)文档示例在执行查询时都使用db,所以这实际上是会话。现在效果很好,另请参阅related Github issue 上的评论。