保持反应流scan()、原子等状态的有效方法



上次,我开始在订单上实现bitbay.net订阅。

问题是比特湾正在返回订单的增量,但我总是想保持整个价格深度(所以我必须保持完整的价格深度,并在发生增量事件时更新它(:

bid    ask                                        bid     ask
----------                                        -----------
A      D  ------------>delta-event(removed=D)---> A       F
B      F                                          B       G
C      G                                          C

所以我决定使用

Flux
.from(eventsFromBitbay)
.scan(FullPriceDepth.empty(), (pd, e) -> pd.update(e))
.subscription(...)

我的问题是Flux.scan(…(将是一个很好的选择(在效率和线程安全方面(?我说的是高间谍系统中的数百万事件。

我的替代方案是制作一些Atomic...并在Flux.create(...).map(e -> atomicHere)中更新它,或者有更好的东西吗?

Flux.scan()Atomic...更有效率吗?为什么,为什么不呢?

"我的问题是Flux。扫描(…(会是一个很好的选择吗">

当然,为什么不呢?如果你问我的话,这是一个明显的模式。你有一个类,它包含处理流量所需的信息。不过,您应该记住几件事,主要是通量的顺序很容易更改,例如使用Flux::flatMap而不是Flux::flatMapSequential,这样您就可以很容易地按任何顺序获得东西。此外,有人可以将流量放在多个线程上,因此您的FullPriceDepth属性可能必须针对并发问题进行编码。

最新更新