database - 如何使用 scala sorm 遍历大量记录

标签 database scala iterator sorm

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

我今天使用的代码是:

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

问题在于此代码在进入每个项目之前首先加载所有记录。有什么办法可以流式传输记录吗?

最佳答案

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

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

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

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

关于database - 如何使用 scala sorm 遍历大量记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25267999/

相关文章:

database - 从 Access 事件驱动数据宏调用 C# 代码?

php - MySQL PHP 黑客攻击预防/数据库备份?

Scala 的 <> 运算符含义

scala - Scala 中具有可变长度索引的 "update"方法

MySQL 工作台 : Unable to Connect to Table

android - 每次在 Android 上运行应用程序时,如何保存用户的选择?

scala.sys.process.Process 抛出 RuntimeException

c++ - 为什么 void* 不是迭代器类型?

c++ - C++ 标准库算法是否使用 std::advance

java - 值不会在 Java 的 HashMap 中迭代