光滑的查询非常慢

Pan*_*cht 5 postgresql scala slick

我正在尝试学习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!")
    }
}
Run Code Online (Sandbox Code Playgroud)

问题在于,之后发生任何事情大约需要5秒钟print("Doing something... ")。如果我复制该db withTransaction块,则在最初的5秒钟后将快速连续执行这两个块。有任何想法吗?

Tay*_*ese 2

不确定我是否知道具体问题,但您的代码示例中有一些内容会影响性能。

1) 确保您使用的是查询模板。使用 Slick 构建查询会产生相当多的开销,您不想在每个查询上重复。

2)您也不应该在实际代码中使用 threadLocalSession (请参阅此处的线程)。它应该如下所示。

3)使用像C3P0这样的连接池。

例子:

val pool = // some connection pool like C3P0 or other

Database.forDataSource(pool).withSession { implicit session: Session =>
  ...
}
Run Code Online (Sandbox Code Playgroud)