Wrapping Up

Get a recap of what we've covered in this chapter.

When it comes to data processing operations like map, filter, and reduce, there is no easier way to take advantage of GenStage than using Flow. At the same time, this ease-of-use does not come at the expense of versatility. Most functions give us the option to configure the level of concurrency, events’ demand, and much more.

Use Enum and Stream with Flow

We may be tempted to replace all the Enum and Stream module usage in our code with Flow. This is not a good idea. We get the best results from Flow only when we use it with large data sets or perform hardware-intensive work. As we know, under the hood, Flow creates and manages several stage processes. While processes are lightweight, they are still an overhead when dealing with small tasks, which can be processed faster synchronously.

Uses of Flow

This chapter covered a range of significant use cases for Flow. We optimized a CSV parsing function, first using the Stream module and then Flow to perform the data transformation concurrently. Then, we learned to partition data for reducer operations like reduce and group_by. We touched upon working with slow-running flows, where the same approach can be applied for unbounded streams of data. Finally, we integrated Flow into the GenStage data-processing pipeline in the scraper project, reducing the amount of code needed to process the data.

We can already use Flow to solve many challenging problems, but of course, there is still more to learn. The best way is to give Flow a try and head over to the official documentation.


Get hands-on with 1200+ tech skills courses.