我正在尝试学习Slick,并且已经启动并运行了Postgres数据库。我制作了一个小程序来测试它:
import scala.slick.driver.PostgresDriver.simple._
import Database.threadLocalSession
object Names extends Table[(String)]("names")
{
def name = column[String]("name", O.PrimaryKey)
def * = name
}
object DbTest
{
val db = Database.forURL("jdbc:postgresql://localhost:5432/names",
driver = "org.postgresql.Driver")
def main(args : Array[String]) =
{
print("Doing something... ")
db withTransaction
{
Query(Names) foreach
{
case (name) =>
println(name)
}
}
println("... done!")
}
}
问题是在print("Doing something... ")
之后发生任何事情大约需要5秒钟。如果我复制db withTransaction
块,则在前5秒后快速连续执行两个块。有什么想法吗?
答案 0 :(得分:2)
我不确定我是否知道具体问题,但您的代码示例中有一些内容会影响性能。
1)确保使用Query Templates。使用Slick构建查询有很多开销,您不希望在每个查询上重复这些开销。
2)你也不应该在实际代码中使用threadLocalSession(参见线程here)。它看起来应该如下所示。
3)使用C3P0之类的连接池。
示例:
val pool = // some connection pool like C3P0 or other
Database.forDataSource(pool).withSession { implicit session: Session =>
...
}