我正在考虑以下哪种方法更好。 要在更大的范围内重用 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/