API メソッドの 1 つから、データベースに対して小さな (ただし頻繁に) 操作を行う必要があります。毎回「withSession」にラップしようとすると、ひどいパフォーマンスが得られます。
db withSession {
SomeTable.insert(a,b)
}
上記の例を 100 回実行すると、22 秒かかります。それらすべてを 1 つのセッションで実行すると、瞬時に実行されます。
後続の関数呼び出しでセッションを再利用する方法はありますか?
API メソッドの 1 つから、データベースに対して小さな (ただし頻繁に) 操作を行う必要があります。毎回「withSession」にラップしようとすると、ひどいパフォーマンスが得られます。
db withSession {
SomeTable.insert(a,b)
}
上記の例を 100 回実行すると、22 秒かかります。それらすべてを 1 つのセッションで実行すると、瞬時に実行されます。
後続の関数呼び出しでセッションを再利用する方法はありますか?
何らかのタイプの接続プールがありますか ( JDBC 接続プール: 接続の再利用を参照してください)? そうでない場合は、 withSession(...) ごとに新しい接続を使用することになりますが、これは非常に遅いアプローチです。ScalaQueryで C3PO を使用する方法については、 http://groups.google.com/group/scalaquery/browse_thread/thread/9c32a2211aa8cea9 を参照してください。
アプリケーション サーバーからマネージド リソースを使用する場合、通常はこれを「無料」で取得できますが、スタンドアロン サーバー (jetty など) では、これを自分で構成する必要があります。
私はおそらくあまりにも明白な方法を述べていますが、次のように 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