Designing Data-Intensive Applications
Author: Martin Kleppmann
Databases and data access are popular topics when designing new systems. I appreciate how Kleppmann highlights the differences between database types and data models, while at the same time acknowledging balance. System components need to complement each other - picking best in class does not automatically give you the best combination.
I think it is also very important to acknowledge that some database engines can store data in multiple data structures. Take SQL Server for example. It is primarily a relational database. SQL Server can also store and query JSON data. If SQL Server is my primary database and I have a new feature that requires data storage in JSON documents, I need to balance the tradeoffs between using SQL Server as a document database and deploying a specialized database, such as MongoDB or Cosmos DB.
We always want it all, but just like CAP theorem, we can’t have everything.