批量处理事件Elixir Flow

时间:2018-10-08 20:48:19

标签: elixir

我的流程类似于:

all_feed_ids
|> Flow.from_enumerable
|> Flow.map(&download_feed)    
|> Flow.flat_map(&extract_feed) # Creates many items per feed
# |> Flow.map_state(&bulk_insert_items)
|> Flow.map(&download_item)
|> Flow.flat_map(&extract_item) # Creates many sub-items per item
# |> Flow.map(&bulk_insert_subitem)

This thread建议使用Flow.map_state,但似乎不再存在。

结果,我在每个Flow.map_state中使用了以下位置:

|> Flow.partition(window: Flow.Window.count(@bulk_insert_size), stages: 1)
|> Flow.reduce(fn -> [] end, fn item, list ->
  [item | list]
end)
|> Flow.on_trigger(&bulk_insert_items)
|> Flow.partition()

这是合理的方法吗,或者还有其他功能或首选方法可以用Flow来做到这一点(或者这可能甚至不是合适的Flow用例)?

1 个答案:

答案 0 :(得分:2)

Flow.map_state/2 has not gone。根据{{​​3}}:

  

each_state/2map_state/2 —仅在有触发器时才调用这两个函数,现在已被更明确命名的on_trigger/2函数所代替。

我没有使用CHANGELOG查看或尝试过您的代码,但对我而言,后者在我的本地项目中曾以类似的方式工作过。