用于文件消费的 akka 流设计模式

akka stream design pattern for files consumption

我遇到一个问题,要求我使用 akka 流来设计搜索 API 以在多个相关的 .tsv 文件中查找数据。
例如,您有 2 个文件:
movies.tsv (id, title)
actors.tsv(名称,电影编号)
假设您想创建一个端点,列出在一部电影中扮演的所有演员,只需指定名称
def principalsForMovieName(name: String): Source[Actor, _]
您必须读取第一个文件以获取包含输入名称的所有电影 ID,然后处理第二个文件以列出相关演员。
我想我可以通过将 2 个来源(首先是电影然后是演员)连接在一起来做到这一点,但这看起来不像 akka 反应流常见的东西。
我想我可能错过了整个流概念中的某些内容。你能给我指出正确的方向吗?

这是可行的,但如果多部电影碰巧共享同一个标题,效率会很低:

  • movies.tsv
  • 中读取一行行
  • 过滤流以匹配电影名称和map电影 ID
  • 对于每个电影 ID,从 actors.tsv 发出一个行流(flatMapConcat 可能是这里感兴趣的流运算符)
  • 为匹配该电影 ID 的记录过滤流
  • map每条记录到演员姓名

重复re-reading和扫描actors.tsv导致效率低下。