Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
连接数百个RxScala观测值(每个观测值都有数百万个事件要发射)的有效方法?_Scala_Reactive Programming_Observable - Fatal编程技术网

连接数百个RxScala观测值(每个观测值都有数百万个事件要发射)的有效方法?

连接数百个RxScala观测值(每个观测值都有数百万个事件要发射)的有效方法?,scala,reactive-programming,observable,Scala,Reactive Programming,Observable,我的数据存储在磁盘上,每天有数百万条记录。我有一个相对高效的反序列化程序,它可以生成发出记录的可观测数据,目前足够快(1.5M记录/秒) 我现在想要的是将这些观测值连接起来,这样我就可以得到一个连续几天的连续流。当这么简单的事情奏效时,我很激动: val nilObs: Observable[Record] = Observable.empty val allObs = dates.map(reader.recordsForDate(_)).foldLeft(nilObs)(_ ++ _) 然

我的数据存储在磁盘上,每天有数百万条记录。我有一个相对高效的反序列化程序,它可以生成发出记录的可观测数据,目前足够快(1.5M记录/秒)

我现在想要的是将这些观测值连接起来,这样我就可以得到一个连续几天的连续流。当这么简单的事情奏效时,我很激动:

val nilObs: Observable[Record] = Observable.empty
val allObs = dates.map(reader.recordsForDate(_)).foldLeft(nilObs)(_ ++ _)
然而,上面的结果是一个吞吐量非常糟糕的可观测数据——200个串联的可观测数据,我看到的是50-100k/s,而我预期的是1.5M/s

我还没有对它进行分析,但是查看它对队列做了很多工作——我想知道我是否创建了N个队列,而不是一个队列上的N个可观察对象


有没有一种更有效的方法以这种方式连接观测值

至少有一种更快的方法可以做到这一点:

val datesObs = Observable.from(dates.toIterable)
val allObs = datesObs.concatMap(reader.recordsForDate(_))

这具有预期的性能,因此一切都很好。

进一步探究,内部连接实现具有完整队列基础设施,我想知道我是否应该使用concatMap或其他发出可观察的,然后我concat?