Data is at the center of many challenges in system design today. Difficult issues need to be figured out, such as scalability, consistency, reliability, efficiency, and maintainability. In addition, we have an overwhelming variety of tools, including relational databases, NoSQL datastores, stream or batch processors, and message brokers. What are the right choices for your application? How do you make sense of all these buzzwords?
In this practical and comprehensive guide, author Martin Kleppmann helps you navigate this diverse landscape by examining the pros and cons of various technologies for processing and storing data. Software keeps changing, but the fundamental principles remain the same. With this book, software engineers and architects will learn how to apply those ideas in practice, and how to make full use of data in modern applications.
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
Martin is a researcher in distributed systems at the University of Cambridge. Previously he was a software engineer and entrepreneur at Internet companies including LinkedIn and Rapportive, where he worked on large-scale data infrastructure. In the process he learned a few things the hard way, and he hopes this book will save you from repeating the same mistakes.
Martin is a regular conference speaker, blogger, and open source contributor. He believes that profound technical ideas should be accessible to everyone, and that deeper understanding will help us develop better software.
版权归作者所有,任何形式转载请联系作者。 作者:荒城梦(来自豆瓣) 来源:https://www.douban.com/note/725242700/ 陆陆续续有几个月过去了,终于把这本“鸿篇巨制”读完了。本书在计算机类著作里并不算特别厚,说鸿篇巨制是因为随着越往后读越发觉得此书内容之广度与深度已...
评分https://github.com/Vonng/db ==========================================================================================================================================================
评分1.事务及隔离级别 1.1.Read Committed 定义 一个事务只能看到其它事务已经提交的修改,不能看到其它事务进行中产生的修改。 实现方法 对任一事务修改的数据,在事务提交前均同时记录新值和旧值。其它事务读到此数据时,使用旧值;本事务读取时,使用新值。 一致性缺陷:不可重复...
评分以前看过一些分布式系统相关的资料,比如《分布系统原理---刘杰》,还有一些关于HDFS、MapReduce、Google 三大经典论文之类的,也去官方看过一些开源项目(Hadoop、Zookeeper)的官方文档,总觉得分布式是很高深的理论知识。看到这本书后,发现它真的是深入浅出,对分布式原理的...
评分我一直认为,要真正掌握一个技术领域,必须深入理解其“为什么”和“如何”。《Designing Data-Intensive Applications》恰恰是这样一本能够满足我对深度理解的渴求的书籍。它以一种近乎哲学的方式,探讨了构建健壮数据系统的核心原则。作者对“分布式事务”的讲解,尤其让我印象深刻。它不仅仅是列出了一些协议,而是深入探讨了这些协议的原理、优缺点以及在实际应用中遇到的挑战。比如,对于两阶段提交(2PC)的详细剖析,让我深刻理解了它在网络分区和节点故障情况下的脆弱性。同时,书中也介绍了其他的事务处理方式,如基于乐观锁的机制,以及如何通过事件溯源等模式来简化分布式事务的处理。另外,关于“分布式数据存储”的讨论,从键值存储到文档存储,再到列族存储和图数据库,作者都进行了细致的比较和分析,让我能够根据不同的应用场景选择最合适的数据存储方案。书中对于“索引”的讨论,也让我对如何优化查询性能有了更深的认识,理解了不同类型的索引如何影响数据的读取速度。总而言之,这本书让我从一个“使用者”变成了一个“思考者”,能够更主动地去设计和优化我的数据系统。
评分我必须承认,当我翻开《Designing Data-Intensive Applications》时,我曾抱着一种略带忐忑的心情。毕竟,数据密集型应用的设计听起来就充斥着高深莫测的技术术语和错综复杂的架构模式。然而,我的担忧很快被书中引人入胜的叙述风格所冲散。作者并非高高在上地传授知识,而是像一位经验丰富的导师,娓娓道来,将那些看似遥不可及的概念变得触手可及。书中对“数据模型”的讨论,从关系型数据库到NoSQL的演变,再到图数据库和时序数据库的兴起,为我打开了全新的视野。我开始意识到,选择合适的数据模型并非仅仅是根据偏好,而是与应用场景、数据访问模式以及性能需求息息相关的战略性决策。更让我印象深刻的是,作者对于“一致性”和“隔离性”的深刻剖析,让我不再被各种数据库的宣传语所迷惑,而是能够理性地评估不同系统在这些关键指标上的表现。书中关于ACID事务的讲解,以及它在分布式环境下面临的挑战,让我对如何构建健壮的交易系统有了更深入的理解。尤其是对两阶段提交(2PC)和三阶段提交(3PC)的深入分析,让我看到了分布式事务的复杂性和局限性,也促使我去思考其他的解决方案,比如补偿事务。这本书真正让我体会到了“设计”的艺术,它不仅仅是技术的堆砌,更是对权衡、抽象和模式的深刻理解。
评分《Designing Data-Intensive Applications》这本书,给我带来的不仅仅是知识的增益,更是对整个数据工程领域的深刻洞察。它像一座灯塔,照亮了我在构建和维护数据密集型应用过程中常常会遇到的迷雾。作者在书中对“数据复制”和“分区”的讲解,可谓是鞭辟入里。我之前总是被各种数据库的复制和分区方案所困扰,但这本书让我明白,这些技术背后都有着深刻的权衡和设计考量。例如,强一致性的复制方案会牺牲可用性,而最终一致性的复制方案则可能带来数据不一致的问题。书中对这些权衡的细致分析,让我能够根据实际需求做出明智的选择。另外,关于“分布式系统的容错性”的讨论,也让我受益匪浅。如何设计一个系统,即使在部分节点发生故障时,仍然能够保证服务的可用性和数据的完整性,这是分布式系统设计中至关重要的一环。书中对各种容错机制的讲解,如副本、仲裁、超时机制等,让我对外加的系统可靠性有了更深入的认识。更重要的是,这本书让我认识到,数据系统设计是一个持续演进的过程,需要不断地学习、实验和迭代,才能构建出真正能够适应未来变化的强大系统。
评分《Designing Data-Intensive Applications》这本书,用一种极为罕见的方式,将数据系统设计的精髓凝聚于笔下。它并非仅仅是技术的罗列,而是对构建复杂数据系统的“思维方式”进行了系统性的梳理。我之前总是习惯性地去寻找现成的解决方案,但这本书让我明白,理解底层原理才是解决问题的关键。作者在书中对“批处理”和“流处理”的比较和融合,让我对数据管道有了更清晰的认识。如何设计一个能够处理海量数据的批处理作业,同时又能实时响应数据的变化,这是一个在现代数据工程中至关重要的问题。书中对于“批量数据处理”和“流式数据处理”的差异,以及它们各自的优缺点进行了详尽的阐述。例如,批处理通常用于分析历史数据,而流处理则侧重于实时数据的处理。书中还探讨了如何将两者结合,构建混合式数据处理系统。我尤其欣赏书中关于“数据复制”和“分区”的深入讨论。理解不同复制策略(如主从复制、多主复制)的权衡,以及如何在分布式系统中进行有效的数据分区,对于提升系统的可用性和可伸缩性至关重要。作者并没有简单地介绍这些概念,而是通过实际的例子和深入的分析,让我理解了它们背后的逻辑和潜在的风险。
评分这本《Designing Data-Intensive Applications》无疑是一本在我学习和实践过程中极具启发性的读物。它并非那种仅仅罗列技术栈或API调用的手册,而是深入骨髓地探讨了构建可靠、可扩展且可维护的数据密集型应用所面临的根本性挑战。作者以一种极为系统和深刻的方式,将分布式系统的复杂性抽丝剥茧,从最基础的一致性模型、容错机制,到更高级的事务处理、批处理与流处理的融合,无不涵盖。我尤其欣赏书中对各种技术权衡的细致分析,比如CAP定理、Paxos、Raft等一致性协议的引入,以及它们在不同场景下的适用性,让我能够跳出“用什么工具”的层面,去思考“为什么选择这个工具”以及“它可能带来什么问题”。书中对于“可靠性”和“可扩展性”这两个核心概念的解读,更是让我对如何设计一个能经受住时间考验的系统有了全新的认识。举个例子,关于数据的副本和分区策略的讨论,让我理解了如何在读取性能和写入延迟之间找到平衡,以及如何在出现节点故障时保证数据的可用性。作者并没有回避分布式系统固有的复杂性,而是用清晰的语言和丰富的图例,将这些抽象的概念具象化,使得即便是初学者也能循序渐进地理解。读完这本书,我感觉自己仿佛站在了一个更高的 vantage point,能够更宏观地审视整个数据系统的设计,并能更自信地应对各种实际工程问题。
评分这本绝对是所有程序员都应该读的书。当你自己设计过系统,做过设计分析取舍之后回过头来看这书的时候,会有一种醍醐灌顶的感觉。书里很详细很清楚的讲了每种设计的来由和设计理念,很适合用来梳理工作中的很多实践。除了不是很喜欢最后一章,讲了太多的废话以外,前面每章都值得仔细的阅读和思考,最喜欢讲数据存储引擎,数据分片,Replication和一致性的章节。多说一点,如果在准备面试的话,这本书对system design的帮助实在是相当大。
评分这本书更适合架构师和系统维护人员,开发人员绝对是看不懂的 从第2部分讲分布式开始,内容变的更加有意思,特别是介绍一些非常极端的坑,及其解决方法。
评分2019年读完了2018年买的2017最佳本行业书籍…
评分值得再读一遍。分布式数据系统 真•big picture
评分对大数据系统有了一个整体的认识,以后遇到问题之前能知道解决方向。