我需要从我的一个api方法对我的数据库进行小的(但经常)操作。当我每次尝试将它们包装成“withSession”时,我的表现都很糟糕。
db withSession {
SomeTable.insert(a,b)
}
运行上述示例100次需要22秒。在一个会话中全部运行它们是即时的。
有没有办法在后续的函数调用中重用会话?
答案 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