Microservices and database joins

For people that are splitting up monolithic applications into microservices how are you handling the connundrum of breaking apart the database. Typical applications that I’ve worked on do a lot of database integration for performance and simplicity reasons.

If you have two tables that are logically distinct (bounded contexts if you will) but you often do aggregate processing on a large volumes of that data then in the monolith you’re more than likely to eschew object orientation and are instead using your database’s standard JOIN feature to process the data on the database prior to return the aggregated view back to your app tier.

How do you justify splitting up such data into microservices where presumably you will be required to ‘join’ the data through an API rather than at the database.

I’ve read Sam Newman’s Microservices book and in the chapter on splitting the Monolith he gives an example of “Breaking Foreign Key Relationships” where he acknowledges that doing a join across an API is going to be slower - but he goes on to say if your application is fast enough anyway, does it matter that it is slower than before?

This seems a bit glib? What are people’s experiences? What techniques did you use to make the API joins perform acceptably?

1 Like