如何使用scala sorm迭代大量记录

时间:2014-08-12 15:14:28

标签: database scala iterator sorm

我想在sorm中迭代特定表的所有记录,但我希望以一种内存效率的方式来执行它。

我今天使用的代码是:

Db.query[Items].whereEqual("title", someTitle).fetch.foreach { webCount =>
          //do something
}

问题是此代码在进入每个项目之前首先加载所有记录。有没有办法流式传输记录?

1 个答案:

答案 0 :(得分:0)

理想情况下,此类功能需要支持数据库游标,但尚未实现。

然而,这可以通过手动批处理解决:

val results : Stream[ Items ] = {
  val batchSize = 256
  Stream
    .from(0)
    .map(Db.query[Items].whereEqual.limit(batchSize).offset(_ * batchSize).fetch)
    .takeWhile(_.nonEmpty)
    .flatten
}

当然,您可以将此模式包装在效用函数或隐式转换中。