Data is at the center of many great challenges in system design. There are so many tools to choose from: databases, NoSQL datastores, stream and batch processors, caches, indexes, message brokers, and so on. Moreover, there are so many issues to consider: scalability, consistency, reliability, efficiency, maintainability. How do you make the right choices for your application? How do you make sense of all the buzzwords?
Designing Data-Intensive Applications is a comprehensive guide to the landscape of systems for storing and processing data. In this book, Martin Kleppmann covers a wide range of popular technologies, comparing their pros and cons. Although software keeps changing, the fundamental ideas behind it stay the same. Through this book, you’ll understand those principles, how they apply in practice, and how make full use of data in your applications.
With this book, you will:
- Look under the hood of the systems you already use, so that you can use them more effectively and diagnose any issues
- Know the strengths and weaknesses of different tools, letting you make informed decisions
- Learn to navigate the trade-offs around consistency, scalability, fault tolerance, and complexity
- Understand the distributed systems research upon which modern databases are built
- Peek behind the scenes of major online services, and learn from their experience