What is a read side?
A read side listens to events published from the write side, projects those events down as changes to a local model, and allows queries to be made on that model.
What practical problems do read sides solve?
They make the cost of correlating model data (called
JOIN in SQL lingo) from
being per-read to being per-write. A query on a read side is just a straight
SELECT, because data is already in the shape the client wants.
This is a net win, because usually, the ratio of reads to writes in a system is usually 10 or more. The idea is quite similar to "views" in SQL databases.
What if my domain has more writes than reads?
Are you sure? Make sure you measure before replying in the affirmative.
Some domains (telecommunications, for example) are very write-intense during short periods, and require much from the write side. But then the read side usually catches up and reads take over.
Some domains (real-time stock markets, for example) are completely dominated by incoming data, and the write side has to be optimized to apply commands in real time.
What is a projection?
A set of event handlers that work together to build and maintain a read model.
What if I build a read side and the projections turn out to be wrong somehow?
If you can't easily correct it in-flight, then build a new version of the read side with fixed projections, deploy it, have it re-process all the events from the event store so it's up with the latest data, and switch queries over to using it.