火遍国内外IT技术圈,豆瓣 9.7!这本技术书籍直接封神了

news2025/2/28 15:40:58

这是一本在国内外都被称为技术书籍巅峰之作的神书!

国内的豆瓣评分 9.7(满分 10.00),接近 90% 的人为这本书打了五星好评。

国外的 Goodreads(类似于豆瓣) 评分 4.72(满分 5.00) ,接近 80% 的人为这本书打了五星好评。

这本书就是 《Designing Data-Intensive Application》 ,也被简称为 DDIA,在国内通常被翻译为 《数据密集型应用系统设计》。

我一直觉得这是一本有点被书名耽误的神书,大家千万不要被书名给“欺骗”了。

单看书名,很多人估计觉得这就是一本专门为数据处理相关工作的程序准备的书籍。我当时在第一眼看这本书的书名的时候就是这种感觉。

实际上,这本书适合每一位做后端开发的程序员阅读,尤其适合每一位 CRUD 程序员阅读!

这本书主要讲了分布式数据库、数据分区、事务、分布式系统等内容。从数据模型与查询语言,数据编码到数据复制和分区,再到事务,一致性共识,分布式系统面临的一些挑战(如故障与部分失效、不可靠网络和时钟),作者都结合实例提供了有深度的讲解,在工业与学术之间平衡的很好。

就比如在讲快照隔离实现技术多版本并发控制(MVCC, multi-version concurrentcy control)的时候,作者就图解了 PostgreSQL 如何实现基于 MVCC 实现的快照级别隔离。

作者认为:

  • 数据是后端系统的核心,我们所做的任何事情都是围绕着数据来展开的;
  • 现在的大部分应用程序都是 数据密集型(data-intensive) 而非 计算密集型(compute-intensive),也就是说系统的瓶颈通常来自于对数据的处理而非 CPU ;
  • 数据库、消息队列、缓存等中间件/软件可以被统称为 数据系统(data system) ,它们之间的界限越来越模糊,例如:数据存储可以被当成消息队列用(Redis),消息队列则带有类似数据库的持久保证(Apache Kafka)。

这本书介绍的很多概念你可能之前都听过,但是在看了书中的内容之后,你可能会豁然开朗:“哇塞!原来是这样的啊!这不是某技术的原理么?”。

下图是我在第二次看这本书的时候做的笔记:

第一次看这本书的时候还在读大三,那时候读这本书只觉得内容很干,但是很多地方自己看不懂。等到第二次再读就好多了,很多不太能理解的概念也能搞清了。

看了这本书你会发现国内外的非常多的系统设计课程以及和数据相关的课程里面的很多内容在这本书中都有提到。

这本书有很多地方的讲解都能让你对这个知识点有新的认识。

就比如在介绍事务的 ACID 特性的时候,这本书中如是说:

Atomicity, isolation, and durability are properties of the database, whereas consis‐ tency (in the ACID sense) is a property of the application. The application may rely on the database’s atomicity and isolation properties in order to achieve consistency, but it’s not up to the database alone.

翻译过来的意思是:原子性,隔离性和持久性是数据库的属性,而一致性(在 ACID 意义上)是应用程序的属性。应用可能依赖数据库的原子性和隔离属性来实现一致性,但这并不仅取决于数据库。因此,字母 C 不属于 ACID 。

看了之后是不是感觉自己被 ACID 这个概念被误导了很久?

再比如说在介绍数据复制这部分内容的时候,这本书介绍了三种常见的复制方案及其优点和缺点。

主从复制非常流行,主要是因为它很容易理解,也不需要担心冲突问题。而万 一出现节点失效、网络中断或者延迟抖动等情况,多主节点和无主节点复制方案会更加可靠,不过背后的代价则是系统的复杂性和弱一致性。

 

看这本书的时候,你可以结合 MIT6.824 分布式系统课程。油管上这门课程的视频版本,地址:https://www.youtube.com/channel/UC_7WrbZTCODu1o_kfUMq88g/videos 。

这门课程是全英文的,英语能力不够好的同学很难坚持学习下来。

国内也有小伙伴还提供了这门课程的中文文字版,地址:简介 - MIT6.824 。

看了之后表示:“真羡慕 MIT 的学生,在大学能有这么好的学习方式和实践!”。我特么太羡慕了!这门课的 Lab 非常不错!

另外,这本书的作者Martin Kleppmann(马丁·科勒普曼)是剑桥大学计算机科学与技术系的高级研究助理和讲师,是一位在工业界和学术界的大牛,参与了多个知名开源项目包括 Automerge、 Apache Avro和 Apache Samza。Martin Kleppmann 的个人博客地址:Martin Kleppmann’s website 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/9478.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

元宇宙:下一代互联网的“美丽新世界”

8月6日到8日,美国超人气歌手Ariana Grande在全球不同地区,连续举办了5场演唱会。与众不同的是,演出的举办地点在游戏《堡垒之夜》(Fortnite)中。全球上千万的玩家,使用自己的游戏角色盛装出席。演出中,一系列的小游戏贯穿了主线,最后粉丝在绚丽的场景中和“Ariana”一对…

42、Spring AMQP DirectExchange

1、DirectExchange 2、案例 3、通过配置类实现 1、配置类 2、Publisher 3、Consumer 4、测试结果 4、通过注解实现 1、Consumer添加Linstener 2、Publisher 执行测试方法 3、测试结果 4、总结分析 学习了DirectExchange之后,发现与FanoutExchange有些许差异&#…

腾讯程序员的手码K8S+Jenkins笔记

最近在GitHub上认识一个腾讯大佬,从他手上得到一份K8SJenkins笔记,好东西还是要共享的!希望这份笔记能让你技术更上一层! 从理论到实战深入K8S 学习K8S的学习笔记很少有比较齐全的,而这份K8S学习笔记,尽量…

谈了这么久的无代码到底是什么?

尽管我们一直在谈论关于“无代码”的方方面面,但却并没有专门谈及“无代码”是什么。不仅许多刚听到这个名词的人会感到疑惑,就算熟悉这一名词的可能也无法给出一个准确的定义,又或者常常将其与另一个相近的名词“低代码”弄混。 今天我们专…

Revit插件实现【快速扣减】的两种操作

翻模的过程中,我们在处理细节问题的时候,如果只是两个构件之间的重合,我们可以利用“连接”命令进行扣减。而如果是想让多个构件进行扣减操作,而不是整层或者整栋楼都按照同样的扣减顺序进行的话,我们可以利用橄榄山和…

Windows安全日志分析

Windows安全日志分析 0x00 引言 在应急响应初步阶段,我们会对系统日志、中间件安全日志、恶意文件等进行收集。接下来便是要进一步对这些文件进行分析:对恶意文件逆向、日志文件分析、梳理入侵时间线和入侵路径等。本文主要对Windows安全日志进行举例分…

Mybatis整合达梦数据库

陈老老老板🦸👨‍💻本文专栏:国产数据库-达梦数据库(主要讲一些达梦数据库相关的内容)👨‍💻本文简述:本文讲一下SpringBoot整合Mybatis与达梦数据库,就是简单…

全网最详细|Oracle12C安装和卸载图文教程

一. 数据库的引入 以前将数据用变量、数组、对象存在内存,而内存只能短暂存储数据。如果我们想长久存数据用文件将数据存在磁盘上,不方便存取和管理数据,因此可以使用数据库来存数据。 二. 数据库基础概念 2.1数据库(database,简称DB) 以…

QRegExpValidator(正则验证器)

QRegExpValidator QRegExpValidator 使用正则表达式 (regexp) 来确定输入字符串是可接受、中间还是无效的。正则表达式可以在构建 QRegExpValidator 时提供,也可以在以后提供。 构造函数: ​ 常用的函数: setRegE…

在Windows上使用Docker搭建ChirpStack私有LoRa服务端

在Windows上使用Docker容器部署ChirpStack服务,首先若要在Windows 10或11 上运行容器,需要以下条件: 一个运行 Windows 10 或 11 专业版或企业版的物理计算机系统。Hyper-V 功能已启用。 Windows下的Docker安装 1.Docker为Windows提供了一款…

如何设计一个支撑数亿用户的系统

要设计出一套能支撑几十亿人的系统是很困难的。对于软件架构师来说,这一直是一项很大的挑战,但是,从现在开始,看完我的文章,你就会觉得容易很多了。 下面是我在本文中提到的几个话题: 从最简单的开始&…

关于大数据测试,你一定要试试python的fake库

一.背景 对于大数据相关项目的测试,往往需要大量的测试数据,而场内测试时很难获取那么大批量的真实数据,这个时候需要测试人员能够快速模拟出符合要求的测试数据。这个时候要是有一个自动化工具或测试脚本简直不要太爽~ 二.问题引入 对于互…

【Ajax进阶】跨域和JSONP的学习

✍️ 作者简介: 前端新手学习中。 💂 作者主页: 作者主页查看更多前端教学 🎓 专栏分享:css重难点教学 Node.js教学 从头开始学习 ajax学习 文章目录了解同源策略和跨域  同源策略    什么是同源    什么是同源策略跨域    什么是…

python基础07——函数,想重复使用自己的代码就写个函数吧

目录1 函数定义与调用1.1 自定义模块函数1.2 函数的返回值 return2 参数的传递方式2.1 位置参数2.2 默认值参数2.3 关键参数2.4 可变长度参数(收集和分配参数)2.4.1 收集位置参数2.4.2 分配位置参数,函数参数的序列解包2.4.3 收集关键字参数2.4.4 分配关键字参数3 变量的作用域…

腾讯云GPU云服务器在选择实例配置时应该注意哪些事项?

腾讯云异构计算服务器搭载GPU、FPGA等异构硬件,具有实时高速的并行计算和浮点计算能力,适合于深度学习、科学计算、视频编解码和图形工作站等高性能应用,下面分享腾讯云NVIDIA GPU云服务器配置CPU内存性能注意事项: NVIDIA GPU云…

26、Stream流式计算,链式编程

Stream流式计算,链式编程 什么是stream流式计算? 大数据包括(存储计算) 集合,mysql这些是用来存储的,而计算是用stream流式的 题目案例:只用一行代码,完成计算这些操作 操作&…

软件工程师备考1-2章(续)

一:差错控制 (1)奇偶检验 什么意思呢? 如果我们用 奇校验,就是保证传输过来的数据中的1是奇数,如果不是奇数那么说明传输错误。 (所以会增加一位,保证正确的数据的总的1一定是奇数) (2)海明码 什么是海明距离? 两个码字,例如 0 1 0 0 和 0 0 1 0 可以看到这…

java的Excel导出方式总结

一、使用hutool导出excel 1.1 hutool介绍 hutool功能很强大,http请求到json处理、excel的导入导出、定时任务、IO、缓存、数据库操作等都提供了简单而方便的api供我们使用,好处是再也不用担心自己去整理常用的工具类了,同时也支持按需引入【但…

怎样在PDF上直接编辑文字?这几种编辑方法需要掌握

怎么做才能够直接在PDF文件上编辑文字呢?对PDF文件大家在工作中是经常使用的,相信大家也都亲身体验过,那就是经常会看见文件中有错误的地方,可能只是一个错别字,或者是图片错误,但我们也不得不改&#xff0…

2023年前端开发趋势未来可期

☆ 对于很多质疑,很多不解,本文将从 △ 目前企业内前端开发职业的占比; △ 目前业内开发语言的受欢迎程度; △ 近期社区问答活跃度; 等维度来说明目前前端这个职业的所处位置。 ☆ 还有强硬的干货,通过深入…