当前位置: 首页 > news >正文

数据密集型应用系统设计

数据密集型应用系统设计

原文完整版PDF:https://pan.quark.cn/s/d5a34151fee9

这本书的作者是少有的从工业界干到学术界的牛人,知识面广得惊人,也善于举一反三,知识之间互相关联,比如有个地方把读路径比作programming language的lazy evaluation而写路径比作eager evaluation,令人拍案。这一本数囊括了几乎所有数据处理相关工作中可能遇到了的内容,而且也有非常棒的实操经验。比如书的一开始,作者反复强调监控中分位数的作用,可以揭示一些被平均数掩盖的事实,我也正好有一个监控从都是监控平均值变成主要监控若干p99分位数的经历,看到这里,不由得掩卷叹息。

我做数据处理也就是不到三年,接触过不少相关的工具,可以说Hadoop啊,pig啊,Hive啊,Storm啊,你的确不去了解它们背后的原理理念也可以用,但是真正要整合它们,做一个容错,可扩展,可维护的数据产品,则需要相当的分布式和数据系统的insight。帮助你建立这样的insight的书,应该是比较缺乏的,你可以去刷分布式系统的课程,看paper,但是阅读一本one in all的书,ROI可能是最高的。之前也有人尝试过,比如有国人写的《大数据日知录》,其实写得也算不错,但是不知道是笔力不济还是什么缘故,最后也是沦为技术文档的罗列。

这本书循循善诱的写作手法应该是相当高超了,讲解得非常深入浅出,一般照着提出问题 -> 解决方案 -> 这个方案的长处短处 -> 发散到其它方案这个模式讲解,看起来可以说是不知不觉,非常轻松,也没有有些作者的拽文习惯,几乎全部是中学词汇,句子也不复杂,保证非英语母语的人可以流畅阅读,这点可以说是非常良心了。

当然,这本书没有介绍什么新技术,很多内容都是我们所熟悉的。也没有具体讲解某一种技术的细节,不能期望读完本书后成为某种专家。

本书的意义在于,一方面是百科全书式的广度科普,涉及大家耳熟能详的技术名词:NoSQL, 大数据,最终一致性,CAP,MapReduce,流处理等,讨论他们背后遵循的不变的原则,知晓这些技术做的取舍,探索它们的设计选择。帮助我们更好地使用这些技术,不仅知道how,更加知道why。对我们有经验的工程师来说,可以查漏补缺,完善知识图谱上的拼图。

另一方面是思想深度上的升华。我们虽然有一定的开发经验,掌握了一些知识和技巧,但这些知识在我们的头脑中是比较散乱的,没有很好的组织起来,点和点之间也没产生联系。这本书就是将各个知识点串联起来,我们可以看到,同一种思想在多个章节中出现,反映出这些各种技术本质上是某种思想在不同问题层面上的投射。让我们能够站在一个高度上审视,自己的工作本质上是在做什么事,是在何种假设下解决什么类型的问题,得以从繁多的技术细节中抬起头来,看一看知识体系的全貌。

这本书还有一个优点,把复杂的东西简单化,之前总也搞不明白的概念,看了这本书就懂了。

书的最后一章升华了整本书。Martin Kleppmann 不仅是个牛逼的程序员,更是一个极富社会责任和人文关怀的牛逼程序员。而这是更难能可贵的。

习武之人讲究“习武先修德”。Martin Kleppmann 亦是如此。他用前十一章教会我们如何处理海量数据,用最后一章告诉我们如何正确使用数据。要保护用户隐私、要对自己的算法负责、要保障弱势群体的权利……他旗帜鲜明地说道:“盲目相信数据决策至高无上,这不仅仅是一种妄想,而是有切实危险的。”

原文很长,完整版PDF已整理好了(在文章开头),感兴趣的小伙伴可以去看看。

相关文章:

数据密集型应用系统设计

数据密集型应用系统设计 原文完整版PDF:https://pan.quark.cn/s/d5a34151fee9 这本书的作者是少有的从工业界干到学术界的牛人,知识面广得惊人,也善于举一反三,知识之间互相关联,比如有个地方把读路径比作programming …...

分布式文件系统 SpringBoot+FastDFS+Vue.js【一】

分布式文件系统 SpringBootFastDFSVue.js【一】 一、分布式文件系统1.1.文件系统1.2.什么是分布式文件系统1.3.分布式文件系统的出现1.3.主流的分布式文件系统1.4.分布式文件服务提供商1.4.1.阿里OSS1.4.2.七牛云存储1.4.3.百度云存储 二、fastDFS2.1.fastDSF介绍2.2.为什么要使…...

【PyQt】11-QTextEdit、QPushButton

文章目录 前言一、文本输入-QTextEdit1.1 代码1.2 运行结果 二、QPushButton2.1.1 按钮上添加文本2.1.2 按键的弹跳效果2.1.3 两个信号可以绑定一个槽。2.1.4 带图标的按键运行结果 2.1.5 按键不可用以及回车默认完整代码2.2 单选按键控件运行结果 2.3 复选框(多选框…...

初识webpack(二)解析resolve、插件plugins、dev-server

目录 (一)webpack的解析(resolve) 1.resovle.alias 2.resolve.extensions 3.resolve.mainFiles (二) plugin插件 1.CleanWebpackPlugin 2.HtmlWebpackPlugin 3.DefinePlugin (三)webpack-dev-server 1.开启本地服务器 2.HMR模块热替换 3.devServer的更多配置项 (…...

什么是自编码器Auto-Encoder?

来源:https://www.bilibili.com/video/BV1Vx411j78H/?spm_id_from333.1007.0.0&vd_sourcef66cebc7ed6819c67fca9b4fa3785d39 为什么要压缩呢? 让神经网络直接从上千万个神经元中学习是一件很吃力的事情,因此通过压缩提取出原图片中最具代…...

openGauss学习笔记-219 openGauss性能调优-确定性能调优范围-硬件瓶颈点分析-网络

文章目录 openGauss学习笔记-219 openGauss性能调优-确定性能调优范围-硬件瓶颈点分析-网络219.1 查看网络状况 openGauss学习笔记-219 openGauss性能调优-确定性能调优范围-硬件瓶颈点分析-网络 获取openGauss节点的CPU、内存、I/O和网络资源使用情况,确认这些资源…...

SAP PP学习笔记- 豆知识01 - 怎么查询既存品目

SAP系统当中已经有哪些品目要怎么查询呢? 1,MM60 品目一览 这里可以输入Plant,然后可以查询该工厂的所有品目。 2,SE16 > MARA MARA 品目一般Data,存放的是品目基本信息。 如果要查询该品目属于哪个Plant&#x…...

相机的机身马达有什么用?

新手疑问: 为什么我的尼康D3200相机明明拥有拍视频能力,但是拍摄视频时却不能对焦 科普时间 那是因为你的相机缺少机身马达,并且你所使用的镜头也没有马达!机身马达是用于给镜头提供对焦动力的装置。它的作用是使相机具备自动对焦功能。如…...

拿捏c语言指针(上)

目录 前言 ​编辑 指针 内存与地址 计算机常见单位 理解编址 取地址,指针变量,解引用 取地址 指针变量 解引用 指针变量大小 指针类型的作用 char*解引用后 指针-整数 应用 void*指针 const修饰指针变量 const修饰普通变量 const修饰指…...

JVM指令手册

栈和局部变量操作将常量压入栈的指令 aconst_null 将null对象引用压入栈 iconst_m1 将int类型常量-1压入栈 iconst_0 将int类型常量0压入栈 iconst_1 将int类型常量1压入操作数栈 iconst_2 将int类型常量2压入栈 iconst_3 将int类型常量3压入栈 iconst_4 将int类型常量4…...

Linux之多线程

目录 一、进程与线程 1.1 进程的概念 1.2 线程的概念 1.3 线程的优点 1.4 线程的缺点 1.5 线程异常 1.6 线程用途 二、线程控制 2.1 POSIX线程库 2.2 创建一个新的线程 2.3 线程ID及进程地址空间布局 2.4 线程终止 2.5 线程等待 2.6 线程分离 一、进程与线程 在…...

TestNG invocationCount属性

有时我们会遇到这样的问题,比如如何多次运行一个测试用例?invocationCount是这个问题的答案。在这篇文章中,我们将讨论在TestNG中与Test annotation一起使用的invocationCount属性。 这个属性有什么作用,或者调用计数有什么用&am…...

关于maven项目中无法通过邮件服务器发送邮件的补充解决方案

1、问题及解决方法 我的一篇文章中提到使用代码发送电子邮件,但是maven项目中无法执行成功,现在我找到了解决办法,只要引入依赖时同时引入下面两个依赖就行了,我无法找到原因主要是使用单元测试方法运行,它居然不报错&…...

树形dp 笔记

树的最长路径 给定一棵树,树中包含 n 个结点(编号1~n)和 n−1 条无向边,每条边都有一个权值。 现在请你找到树中的一条最长路径。 换句话说,要找到一条路径,使得使得路径两端的点的距离最远。 注意&…...

2024-02-08 Unity 编辑器开发之编辑器拓展1 —— 自定义菜单栏

文章目录 1 特殊文件夹 Editor2 在 Unity 菜单栏中添加自定义页签3 在 Hierarchy 窗口中添加自定义页签4 在 Project 窗口中添加自定义页签5 在菜单栏的 Component 菜单添加脚本6 在 Inspector 为脚本右键添加菜单7 加入快捷键8 小结 1 特殊文件夹 Editor ​ Editor 文件夹是 …...

typescript中的Omit排除类型及Pick取想要的属性

Omit 的使用:排除类型 type OmitUser {name: string,age: number,sex:string } type newOmit Omit<OmitUser, sex>// 定义一个对象并将其类型设置为 newOmit const example: newOmit {name: "John",age: 30 };console.log( Omit 的使用:排除类型 , example…...

MATLAB计算极限和微积分

一.函数与极限 计算极限&#xff1a;lim(3*x^2/(2x1))&#xff0c;x分别趋于0和1&#xff0c;代码如下&#xff1a; syms x; limit(3*x*x/(2*x1),x,0) limit(3*x*x/(2*x1),x,1) 结果分别为0和1&#xff1a; 1.计算双侧极限 计算极限&#xff1a;lim(3*x^2/(2x1))&#xff0…...

在数组中插入元素

问题&#xff1a;假设有一个数组{1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5}&#xff0c;如果我们要在3之后插入一个数&#xff08;520&#xff09;&#xff0c;这该怎么办呢&#xff1f; 思路&#xff1a;要想在以元素3之后插入一个元素&#xff0c;我们先要做…...

【计算机网络】物理层|传输介质|物理层设备|宽带接入技术

目录 一、思维导图 二、传输介质 1.传输介质——导引型 2.传输介质——非导引型​编辑 三、物理层设备 1.物理层设备&#xff1a;中继器&集线器 2.宽带接入技术&#xff08;有线&#xff09; ​编辑 四、趁热打铁☞习题训练 五、物理层总思维导图 推荐 前些天发现…...

TCP和UDP面试题提问

TOC TCP&#xff08;传输控制协议&#xff09;和UDP&#xff08;用户数据报协议&#xff09;是两种计算机网络通信协议&#xff0c;它们在网络通信中起着不同的作用。 TCP TCP 是面向连接的协议&#xff0c;它在数据传输之前需要在发送端和接收端建立一条连接。TCP 提供可靠…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...