Martin Kleppmann Designing Data-Intensive Applications - 2017 ![rw-book-cover|200x400](https://readwise-assets.s3.amazonaws.com/static/images/default-book-icon-4.11327a2af05a.png) ## Metadata - Author: **2017** - Full Title: Martin Kleppmann Designing Data-Intensive Applications - Category: #books ## Highlights - Businesses need to be agile, test hypotheses cheaply, and respond quickly to new market insights by keeping development cycles short and data models flexible (Page 7) - Store data so that they, or another application, can find it again later (databases) Remember the result of an expensive operation, to speed up reads (caches) Allow users to search data by keyword or filter it in various ways (search indexes) Send a message to another process, to be handled asynchronously (stream processing) Periodically crunch a large amount of accumulated data (batch processing) (Page 19) - If you want to add response time percentiles to the monitoring dashboards for your services, you need to efficiently calculate them on an ongoing basis. For example, you may want to keep a rolling window of response times of requests in the last 10 minutes. Every minute, you calculate the median and various percentiles over the values in that window and plot those metrics on a graph. (Page 36) - Good abstractions can help reduce complexity and make the system easier to modify and adapt for new use cases. Good operability means having good visibility into the system’s health, and having effective ways of managing (Page 45) - If we want to make distributed systems work, we must accept the possibility of partial failure and build fault-tolerance mechanisms into the software (Page 368) - Tags: #code - system cannot be successful if it is too strongly influenced by a single person. Once the initial design is complete and fairly robust, the real test begins as people with many different viewpoints undertake their own experiments. (Page 517)