Martin Kleppman explains relational databases characteristics and their different isolations levels.
He shows which issues can be prevented by databases running with a read committed isolation level, the default on most systems, and which ones can’t.
He then describes what it takes to achieve serialization, the maximum isolation level, which explains why it’s slow.
He concludes that with a complex system composed of multiple databases, even serializable level is not enough because it doesn’t consider the causality of actions made on several databases.