我有大量的sqlite数据库,表示为Source[File, NotUsed]
。对于每个数据库,我都希望对结果进行分页。内存限制意味着我不能急于执行此操作。假设结果类型为Foo
,那么我试图弄清楚如何创建一个Flow[File, Foo, NotUsed]
,该内部使用资源的惰性递归调用。
我看到Source.unfold
方法允许我这样做,但是它只能创建一个Source
,这意味着我无法向其提供File
的必要输入。我看不到如何将Source
转换为Flow
(通过fromSinkAndSource除外,但这并不能通过管道传递值)。我不确定这种查询路径是否会带来任何好处。
有人建议我应该使用GraphDSL
和Merge
,但是我一直试图了解Merge
应该有多少个输入端口,以及我实际上将如何使用。将其连接在一起。
答案 0 :(得分:1)
我认为您正在寻找flatMapConcat
运算符:
签名
def flatMapConcat[T, M](f: Out ⇒ Graph[SourceShape[T], M]): Repr[T]
说明
将每个输入元素转换为
当前消耗的子流中有一个可用元素时,Source
,然后通过串联将其元素压平到输出流中。这意味着在开始使用下一个来源之前,每个来源已被完全消耗。发出
背压,当下游背压
时完成,当上游完成并且所有消耗的子流完成