Designing Data-Intensive Applications
The Big Ideas Behind Reliable, Scalable, and Maintainable Systems
Data is at the heart of many system design challenges today. You need to solve difficult problems such as Scalability, consistency, reliability, efficiency, and maintainability. In addition, you are free to use a variety of tools such as relational databases, NoSQL data stores, stream or batch processors, message brokers, and more. What is the correct choice for your application? How do you understand all these buzzwords?
In this practical and comprehensive guide, author Martin Kleppmann can help you navigate this diverse situation by exploring the strengths and weaknesses of the various technologies used to process and store data. The software is constantly changing, but the basic principles are the same. In this book, software engineers and architects will learn how to apply these ideas in action and make full use of their data in modern applications.
What this book covers
When talking about scalable data systems, people say, "You're neither Google nor Amazon. Stop worrying about scaling and use relational databases. The statement has some truth. Building applications keeping in view of that they scale in future is a waste of effort and can be tied to an inflexible design.
In fact, this is a form of premature optimization. But each of the different technologies has its strengths and weaknesses. Therefore, it is also important to choose the right tool for the task at hand. As we'll see, relational databases are important, but not the last word to process data.
Following points help you understand what this book covers in detail:
- Peer under the hood of the systems you already use, and learn how to use and operate them more effectively
- Make informed decisions by identifying the strengths and weaknesses of different tools
- 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 architectures
Who Should Read This Book?
The book Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems is for you if you meet one of the following criterions:
- You are developing an application with some kind of server / backend for storing or processing data and the application is using the internet (web application, mobile app, internet connected sensors, etc.), this book is for you.
- You are a software engineer, software architect, or a technical manager who enjoy programming. This is especially relevant if you need to make decisions about the architecture of the system you are working on, for example, if you need to select tools to solve a particular problem and find the best way to use them. Even if you don't have a choice when it comes to tools, this book will help you better understand the strengths and weaknesses of tools.
- You should have experience building web-based applications or network services and be familiar with relational databases and SQL. The non-relational databases and other data-related tools you know are great, but not essential.
Things to know about this book
Before you buy this book, the following are the things you should know about this book which are quite valid:
- Many of the technologies described in this book fall under the buzzword "big data." However, the term "big data" has been so overused and misunderstood that it is useless in serious engineering discussions. The book uses less vague terms such as single-node and distributed systems, online/online and offline/batch systems.
- This book has a bias toward free and open source software (FOSS), because reading, modifying, and executing source code is a great way to understand how something works in detail. Open platforms also reduce the risk of vendor lock-in. However, where appropriate, the author also discuss proprietary software (closed-source software, software as a service, or companies’ in-house software that is only described in literature but not released publicly).