用于文件消费的 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
导致效率低下。
我遇到一个问题,要求我使用 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
导致效率低下。