在ScalaQuery中重用会话?

时间:2012-04-30 05:21:11

标签: scala scalaquery

我需要从我的一个api方法对我的数据库进行小的(但经常)操作。当我每次尝试将它们包装成“withSession”时,我的表现都很糟糕。

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

运行上述示例100次需要22秒。在一个会话中全部运行它们是即时的。

有没有办法在后续的函数调用中重用会话?

2 个答案:

答案 0 :(得分:3)

您是否有某种类型的连接池(请参阅JDBC Connection Pooling: Connection Reuse?)?如果没有,你将为每个withSession(...)使用一个新的连接,这是一个非常慢的方法。有关如何将C3PO与ScalaQuery一起使用的说明,请参阅http://groups.google.com/group/scalaquery/browse_thread/thread/9c32a2211aa8cea9

如果您使用来自应用程序服务器的托管资源,您通常会获得“免费”,但在独立服务器(例如jetty)中,您必须自己配置它。

答案 1 :(得分: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