scala - 确保扇入元素属于同一个扇出元素
问题描述
假设我们有一个如下所示的图表:
broadcast ~> flowA ~> fanIn
source ~> broadcast ~> flowB ~> fanIn ~> sink
broadcast ~> flowC ~> fanIn
Flows flowA
, flowB
,flowC
都对传入的元素执行转换。fanIn
对所有三个流程的结果执行一些组合操作。
挑战在于 Flows A
//不会以相同的速率发射元素B
。C
对于源的某些元素,flowA
没有什么要发射的,同时flowB
又C
继续发射。
现在,fanIn
我想确定所有三个端口上接收到的元素“属于”从源发出的同一个元素,即它们是同一个元素转换的结果。
怎么办?
我目前的解决方案是让 Flows A
// emit s B
。每个流发出一个如果它可以执行转换,如果它不能执行。这样,所有三个流上的发射元素数量和速率保持不变,我可以保证接收到的元素属于同一个源元素。我正在寻找一种性能更好的解决方案,如果可能的话,它不需要不必要的对象创建和包装。C
Option
Some
None
解决方案
返回一个 None 并不会真正创建一个新对象……包装到 Some (而不是执行 nullcheck 的选项)也可以提高性能。我认为如果没有 null 元素,您将无法真正绕过,但是如果您的返回类型中有一个 nonValid/null 也可以用作 None 。(例如,如果它们是具有长 id 的对象,您可以使用 id=-1 元素创建一个无效元素并将其过滤掉。)我认为这里不会有灵丹妙药。
但是:我认为这不是问题,你不会失去显着的性能,你的代码可能会有其他更大的瓶颈,所以放手吧:D
(从lightbend 讨论转贴我的回答)
推荐阅读
- django - 在 AWS Elastic Beanstalk 上部署时,无法通过映像名称引用与 docker 一起使用的 RabbitMQ
- java - 如何使用 apache mina sshd 执行远程命令
- java - 无法在java中使用硒单击复选框
- javascript - Vue父组件无法识别来自子组件的发射
- c++ - 在 windows 中使用 g++ 将 c++ 代码转换为 .asm x86
- python-3.x - Python BigQuery 异常:无法在 LegacySQL 中输出 HOUR 分区数据
- django - 'str' 对象没有属性 'get' django 错误
- javascript - 如何创建将域从本地主机更改为实际域名的链接
- sql - 如何将行转换为列 Sql Server
- r - 在ggplot2示例中从素食主义者绘制ordiellipse不起作用