java - 重复使用数据库 session 进行多个查询?

标签 java database scala playframework slick

我正在考虑以下哪种方法更好。 要在更大的范围内重用 session 还是使用较小的范围?

下面两个例子来说明差异。

示例 1 小范围:

  def thumbnail(id: Int) = SecuredAction { implicit request =>
    DB.withSession { implicit session => Models.get(id) } match {
      case None => NotFound("The requested model is either not in the db or you lack access to it.")
      case Some(model) => {
        Ok(views.html.model.thumbnail(model, DB.withSession { implicit session => Tags.tags(model) }))
      }
    }
  }

示例2大范围:

def thumbnail(id: Int) = SecuredAction { implicit request =>
    DB.withSession { implicit session =>
      Models.get(id) match {
        case None => NotFound("The requested model is either not in the db or you lack access to it.")
        case Some(model) => {
          Ok(views.html.model.thumbnail(model, Tags.tags(model)))
        }
      }
    }
  }

你觉得怎么样?

最佳答案

我会(并且通常会)使用第二种方法,我实际上不知道 Slick 打开一个新 session (通常对于数据库来说)有多重,但为什么会放弃简单的性能改进?

从工作流程的角度来看,仅仅打开一个 session ,将其用于一个小操作,关闭它,然后立即打开另一个 session 是没有意义的,唯一想到的是您可以非常密集的数据库操作,并且 session 可能无法持续足够长的时间(取决于您的 DBMS),可能只有这样才需要使用新的 session 。

另请注意,第一种方法的可读性比第二种方法低得多,我会开始想知道为什么谁实现了第一种方法以这种方式实现。

无论如何,只是我的 2 美分,我会把它作为评论发布,但它太长了。

关于java - 重复使用数据库 session 进行多个查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25231558/

相关文章:

scala - 如何转换已在函数中定义的 Scala 值

java - 将 csv 文件上传到 appengine

java - 如何在 Java 中使简写递增原子?

mysql - sql查询列值=列值-1

mysql - 获取整行每个类别中某列的最大值

Scala Play框架获取用户的IP地址

java - 如何将类名和函数名自动添加到我的日志中

java - for循环变量声明中允许的类型?

database - 如何从 Delphi 访问 Visual FoxPro 表?

eclipse - 如何用scala编写eclipse rcp应用程序?