私は多数の観測値を持ち、これらを単一の値に集計する必要があります。彼らは頻繁に更新され、「損失の多い」背圧戦略が使用されなければならないと考えられているので、それを取る。私はsample
を選択しましたが、それと似たようなものは受け入れられるでしょう。 これを行う最も効率的な方法(パフォーマンスおよび/またはリソースに賢い)がであることを知りたいと思います。 2つのアプローチが明白です:多数のrx観測値を効率的にサンプリングする
val list : Iterable[Observable[Double]] = ???
val f : (Double,Double) => Double = ???
(Observable combineLatest list) sample (1 second) reduce f
または代わり
combineLatest (list map (_ sample (1 second))) reduce f
私は、これは非常に一般的なユースケースであると言うために公正だと思います。これを抽象化しないようにするには、データを連続的に放出する多くの温度センサーがあると想像してください。これらは私のlist
の要素になります。彼らはSI単位で温度を生成し、平均温度を計算したい(これはf
です)。また、結果をCelciusまたはFahrenheitで表示するかどうかを選択したいと思っています。
- 上記の2つのアプローチ(他の提案は歓迎します)のどちらがより効率的なスペース/時間ですか?
- 私は平均気温だけでなく、個々の(変換されたかもしれない)気温も表示したかったと言います。それが答えに影響しますか?
- Observablesが異なるソース(別々のスレッドで観察されるなど)から来た場合と、1つのシリアライズされたストリーム(1つの観測で
groupBy
演算子の結果など)に含まれているかどうかによって、 - 上記の背圧について念頭におくと、この要件が破棄された場合(つまり、再サンプリングする必要がない場合)、回答が異なる可能性があります。
あなたは解決策を見つけましたか? –
いいえ。私はRXから移った。私はこれに共通のパターンであるにもかかわらず、特殊なデータ構造が必要だと思います。これを実装するのは難しいことではありません(私が上に示唆したように)、しかし、ハードビットは、モナド/コレクションのようなインターフェイスでそれをやっています。例えばhttps://github.com/OpenHFT/Chronicle-Mapを見てください。 – Luciano