《数据密集型应用系统设计》读书笔记
2022-09-03 21:14:55 0 举报
AI智能生成
后端程序员必读书目
作者其他创作
大纲/内容
第一章 可靠、可扩展与可维护的应用系统
可靠性
硬件故障
软件故障
人为故障
可扩展性
可维护性
第二章 数据模型与查询语言
数据模型
文档模型
关系模型
图模型
查询语言
每个模型都有自己的查询语言和框架
第三章 数据存储与检索
存储引擎
OLTP(针对事务处理)
面向用户、查询涉及少量记录,磁盘寻道时瓶颈
存储引擎
日志结构流派
只允许追加式地更新和删除过时的文件。代表:SSTables/LSM-tree/LevelDB
原地更新流派
B-tree是代表,目前大部分数据库采用此种方案
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 条评论
下一页