2

API メソッドの 1 つから、データベースに対して小さな (ただし頻繁に) 操作を行う必要があります。毎回「withSession」にラップしようとすると、ひどいパフォーマンスが得られます。

db withSession {
  SomeTable.insert(a,b)
}

上記の例を 100 回実行すると、22 秒かかります。それらすべてを 1 つのセッションで実行すると、瞬時に実行されます。

後続の関数呼び出しでセッションを再利用する方法はありますか?

4

2 に答える 2

3

何らかのタイプの接続プールがありますか ( JDBC 接続プール: 接続の再利用を参照してください)? そうでない場合は、 withSession(...) ごとに新しい接続を使用することになりますが、これは非常に遅いアプローチです。ScalaQueryで C3PO を使用する方法については、 http://groups.google.com/group/scalaquery/browse_thread/thread/9c32a2211aa8cea9 を参照してください。

アプリケーション サーバーからマネージド リソースを使用する場合、通常はこれを「無料」で取得できますが、スタンドアロン サーバー (jetty など) では、これを自分で構成する必要があります。

于 2012-04-30T06:08:12.107 に答える
1

私はおそらくあまりにも明白な方法を述べていますが、次のように withSession ブロック内にさらに呼び出しを入れることができます。

db withSession {
  SomeTable.insert(a,b)
  SomeOtherTable.insert(a,b)
} 

または、暗黙的なセッションを作成し、ビジネスを行い、完了したら閉じることができます。

implicit val session = db.createSession
SomeTable.insert(a,b)
SomeOtherTable.insert(a,b)
session.close
于 2012-04-30T05:58:40.887 に答える