Scalikejdbc结果集迭代器

时间:2016-10-25 08:06:27

标签: scala jdbc iterator scalikejdbc

我正在使用scalikejdbc访问一个巨大的表。我的理解立场 - 它在我可以映射或迭代它们之前将所有行提取到内存中。

目前我有一个使用rxscala Observable的实现,这非常简单。但接收器比读取sql慢,然后由于缓冲而得到OutOfMemory。这是我当前的制作人,可以观察到:

  def fetchProductsAsObservable(
    sql: SQL[Nothing,NoExtractor],
    extractor: (WrappedResultSet) => ProductItem)
  ) =
    Observable[ProductItem](o =>
      try {
          sql.foreach(row => o.onNext(extractor(row)))
          o.onCompleted()
      } catch {
        case e: Throwable => o.onError(e)
      }
    )

我知道SQL.foreach方法,但它获得了一个回调方法并返回Unit。 我的背景是在.NET中。无法弄清楚自己如何使用scalikejdbc在scala中正确实现一个简单的迭代器,我可以给它进行并行处理?

1 个答案:

答案 0 :(得分:-1)

您的问题与ScalikeJDBC行为无关,而与RxJava无关。 由于您的Observable受到热源的影响,您需要使用背压策略。