In the previous post ( here ) I tried to describe the common transactional problems people deal with when it comes to communication via messages. In short - we need to dispatch or consume a message (or both) and store data in DB and we would like all those operations to be in one transaction. In order to understand where event sourcing comes from we need to look at how most of the modern databases work. I`ll use MS SQL as an example but with some variations it can apply to almost any relational db. If you look at the DB files you`ll find two types of files: DB file itself (.mdf in ms SQL) and a transactional log file(,ldf) Why we need two? Because MS SQL uses Write-Ahead Transaction Log pattern. If we simplify the process it looks about this: add transactions to commit log tail commit-log and build DB (projection) based on that data All writes go via commit log, all reads are hitting our projection. (Sounds like CQRS? Yep, that's it) Why does it matter? Because m...