《数据密集型应用系统设计》读书笔记
2022-09-03 21:14:55 0 举报
AI智能生成
后端程序员必读书目
作者其他创作
大纲/内容
硬件故障
软件故障
人为故障
可靠性
可扩展性
可维护性
第一章 可靠、可扩展与可维护的应用系统
文档模型
关系模型
图模型
数据模型
每个模型都有自己的查询语言和框架
查询语言
第二章 数据模型与查询语言
面向用户、查询涉及少量记录,磁盘寻道时瓶颈
只允许追加式地更新和删除过时的文件。代表:SSTables/LSM-tree/LevelDB
日志结构流派
B-tree是代表,目前大部分数据库采用此种方案
原地更新流派
存储引擎
OLTP(针对事务处理)
面向分析师,扫描大量数据,磁盘带宽是瓶颈
OLAP(针对分析型)
第三章 数据存储与检索
编程语言的特定编码:比如python的pickle、java的java.io.Serializable。仅限一门语言,无法向前或向后兼容
json/xml/csv等文本格式:可读性好、小心一些是能够向前向后兼容的,缺点是对数据类型的支持有些模糊:比如xml无法区分字符串和数字
Thift/Protocol Buffers: 紧凑高效,可以向前向后兼容。缺点是可读性差。
编码格式
比如V1版本的程序写入到数据库的数据V2版本的程序也要能够认识
数据库
数据在客户端与服务端之间流动
RPC/REST API
异步消息传递
数据流模型
第四章 数据编码与演化
高可用:即使某台机器出现故障,系统也能保持正常运行
低延迟:把数据放在离用户近的地方
可扩展性:采用多副本读取,大幅提高系统读操作的吞吐量
目的
同步复制与异步复制
主节点失效:节点切换
从节点失效:追赶式恢复
处理节点失效
基于语句的复制
基于预写日志(WAL)传输
基于行的逻辑日志复制
触发器复制
复制方案
写后读一致性:保证用户总能看到自己所提交的最新数据
单调读:用户在某个时间点读到数据之后,保证此后不会出现比该时间点更早的数据
前缀一致读:保证数据之间的因果关系。
复制滞后问题:一致性模型
主从复制
多数据中心
离线客户端
协作编辑
应用场景
同步或异步冲突检测
避免冲突
生成某种特殊的ID,按照ID的顺序决定谁的写入有效
按照某种规则合并两次写入
保存冲突信息,提醒用户解决
收敛于一致状态
最靠谱。冲突时执行用户的代码逻辑。
自定义冲突解决逻辑
处理写冲突
环形拓扑
星型拓扑
全部到全部的拓扑
拓扑结构
多主节点
客户端将写请求发送到多个节点上,读取时从多个节点上并行读取,以此检测和纠正某些过期数据。
无主节点
方案
第五章 数据复制
基于关键字区间的分区
哈希分区
分区方法
分区再平衡
需要开发者自己结合应用来综合平衡
负载倾斜与热点
基于文档来区分二级索引(本地索引)
基于词条来区分二级索引(全局索引)
二级索引
第六章 数据分区
原子性
一致性
隔离性
持久性
ACID
防止脏读
防止脏写
读-提交
实现技术:MVCC,多版本并发控制
快照级隔离与可重复读
原子写操作
显式加锁
自动检测更新丢失
原子比较和设置
冲突解决和复制
防止更新丢失
写倾斜
写倾斜与幻读
弱隔离级别
严格串行执行事务:对单个CPU要求较高
两阶段加锁
可串行化的快照隔离(SSI):事务提交时检查冲突
串行化
第七章 事务
不可靠的网络
不可靠的时钟
进程执行过程中未知的暂停
第八章 分布式系统的挑战
第九章 一致性与共识
第十章 批处理系统
第十一章 流处理系统
第十二章 数据系统的未来
《数据密集型应用系统设计》
0 条评论
回复 删除
下一页