2

我需要通过我的一种 api 方法对我的数据库进行小(但频繁)的操作。当我每次尝试将它们包装到“withSession”中时,我的表现都很糟糕。

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

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

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

4

2 回答 2

3

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

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

于 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 回答