播放/ Anorm。最棒的表演

时间:2014-04-16 18:13:08

标签: performance scala playframework playframework-2.0 anorm

在Anorm中执行sql语句获得最佳性能的最佳做法是什么?

我想从我的数据库调用中获得最大的性能。

从数据库加载数据并尽快处理它(对象映射)的适当方法是什么?

我是否仍然使用Anorm或者我需要使用其他东西,可能是“本机”jdbc驱动程序?

更新 我使用 PostgreSQL

我的数据库包含“offices”表

此表中存在 4行

当我运行查询

select
    offices.*
from
    offices
order by
    offices.office__id

在PgAdmin中,执行时间 1-30 ms

因此,在Scala代码中,我创建了案例类Office

case class Office(
    id,
    name,
    phone,
    address
)

另外,我创建了 OfficeDBO

case class OfficeDBO(
  id: Long,
  name: String,
  phone: String,
  address: String
)

object OfficeDBO {
  val Mapping = {
    get[Long]("office__id") ~
    get[String]("office__name") ~
    get[String]("office__phone") ~
    get[String]("office__address") map {
      case officeId ~ officeName ~ officePhone ~ officeAddress => OfficeDBO(
        officeId,
        officeName,
        officePhone,
        officeAddress
      )
    }
  }

  def toOffice(officeDBO: OfficeDBO): Office = {
    new Office(
      officeDBO.id,
      officeDBO.name,
      officeDBO.phone,
      officeDBO.address
    )
  }
}

并且,服务方法 OfficesService.findOffices()

def findOffices(): List[Office] = {
    LOGGER.debug("Find offices")

    DB.withConnection(implicit connection => {
      SQL("""
        select
          offices.*
        from
          offices
        order by
          offices.office__id
      """)
      .as(OfficeDBO.Mapping *)
      .map(toOffice)
    })
  }

方法 OfficesService.findOffices()执行 7秒

问题出在哪里?如何重构获得最大性能的代码?

0 个答案:

没有答案