Instead of directly storing current state in the relational database it's storing all events or state changes sequantially in an append-only database. This can be done in almost any type of database; it can be a table in SQL-database. This sequence of events is then "The Source of Truth" that all parts in your system can listen to and produce useful view models from. Practically, you separate database concerns, a side optimised for writing (the Event Store, append-only, persistent to disk) and a side optimised for reading, querying (can be any sort of database, SQL, noSQL, text-search-engines, files, memory, etc. doesn't need to be persistent)
This gives following advantages:
- Flexibility: you can come up with new view models build from the data in the Event Store at any time. And you can have as many view models as you like.
- You keep the full history of your system. You can go back at any time in history by replaying the events to see how your board was (it's like Git does for code). You'll have a complete audit log. It provides traceability. i.e when somebody edits a post 25 times, you can go back how it was in edit 5. You don't need confirmation screens, as everything can be undone.
- Security: You cannot accidentally throw away or overwrite data, as the Event Store is append-only. (only "insert", no "update" nor "delete")
- Storing all events that lead to the current state rather than just having the current state is much more like the real world is. Imagine someone of the middle ages being dropped in our time: the person would not understand much of it, because he/she has no knowledge about all the events that led up to our current time.
- Because you are not bound to the relational database model, you can use natural language in your events, describing the intent of the user. This makes it easier to understand and to reason about what happened.
- Testability: replay all your events through a test system. (and commands, if you store these too). Replay a certain moment in time what happened in a certain board.
- Database migrations are of the past. The Event Store data model itself is simple and unlikely to change. And the read models you would build from the beginning of history (not migrate).
- You need to think well in advance setting up a system like this.
- It might be too much work to change.
- It might not be easy.
- In general there's not so much experience with this kind of model, although it's getting more and more attention. Most developers have the relational database mindset. Some developers might not get into it.
- You have to deal with asynchronicity.
- ... (things I haven't thought of)
https://stackoverflow.com/questions/332 ... g-and-cqrs
https://lostechies.com/jimmybogard/2012 ... qrs-myths/
https://martinfowler.com/eaaDev/EventSourcing.html
Greg Young did a lot on advocating this model. Video