【问题标题】:How to iterate over a huge amount of records with scala sorm如何使用 scala sorm 遍历大量记录
【发布时间】:2014-10-05 17:46:43
【问题描述】:

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

我今天使用的代码是:

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

问题是这段代码首先加载所有记录,然后再进入每个项目。有什么方法可以流式传输记录吗?

【问题讨论】:

  • 不是fetchStream的结果吗?

标签: database scala iterator sorm


【解决方案1】:

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

但是这可以通过手动批处理来解决:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-31
    • 2021-10-13
    • 2012-02-22
    • 2013-09-28
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    • 2016-09-16
    相关资源
    最近更新 更多