我需要通过我的一种 api 方法对我的数据库进行小(但频繁)的操作。当我每次尝试将它们包装到“withSession”中时,我的表现都很糟糕。
db withSession {
SomeTable.insert(a,b)
}
运行上述示例 100 次需要 22 秒。在一个会话中运行它们是即时的。
有没有办法在后续函数调用中重用会话?
我需要通过我的一种 api 方法对我的数据库进行小(但频繁)的操作。当我每次尝试将它们包装到“withSession”中时,我的表现都很糟糕。
db withSession {
SomeTable.insert(a,b)
}
运行上述示例 100 次需要 22 秒。在一个会话中运行它们是即时的。
有没有办法在后续函数调用中重用会话?
您是否有某种类型的连接池(请参阅JDBC 连接池:连接重用?)?如果没有,您将为每个 withSession(...) 使用新连接,这是一种非常缓慢的方法。有关如何将 C3PO 与 ScalaQuery 一起使用的说明,请参阅http://groups.google.com/group/scalaquery/browse_thread/thread/9c32a2211aa8cea9 。
如果您使用来自应用程序服务器的托管资源,您通常会“免费”获得它,但在独立服务器(例如码头)中,您必须自己配置它。
我可能说的方式太明显了,但是您可以在 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