上次,我开始在订单上实现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
属性可能必须针对并发问题进行编码。