Pertanyaan Permintaan licin sangat lambat


Saya mencoba mempelajari Slick dan mendapatkan basis data Postgres dan berjalan. Saya membuat program kecil untuk mengujinya seperti ini:

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!")
    }
}

Masalahnya adalah butuh sekitar 5 detik untuk sesuatu terjadi setelahnya print("Doing something... "). Jika saya menduplikasi db withTransaction blok, kedua blok dieksekusi secara berurutan setelah 5 detik pertama. Ada ide?


4
2017-11-18 21:38


asal


Jawaban:


Tidak yakin saya tahu masalah khusus, tetapi ada beberapa hal dalam contoh kode Anda yang akan menjadi perhatian untuk kinerja.

1) Pastikan Anda menggunakannya Templat Kueri. Ada cukup banyak overhead yang membangun kueri dengan Slick yang tidak ingin Anda ulangi pada setiap kueri.

2) Anda juga sebaiknya tidak menggunakan threadLocalSession dalam kode asli (lihat utas sini). Seharusnya terlihat seperti di bawah ini.

3) Gunakan kolam koneksi seperti C3P0.

Contoh:

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

Database.forDataSource(pool).withSession { implicit session: Session =>
  ...
}

2
2017-11-18 22:27