《数据密集型应用系统设计》(DDIA)读书笔记
Author: hewking
Labels: blog
Created: 2025-01-04T13:38:03Z
Link and comments: https://github.com/hewking/blog/issues/42
**《数据密集型应用系统设计》(DDIA)读书笔记 **
I. 绪论:数据密集型应用概述
- 定义: 数据密集型应用是指其主要瓶颈在于数据量、数据复杂度或数据变化速度,而非计算的应用。
- 核心关注点:
- 可靠性(Reliability): 即使在发生故障(硬件、软件、人为错误)的情况下,系统也能正常工作。
- 可扩展性(Scalability): 系统能够有效地处理不断增长的数据量、流量和复杂性。
- 可维护性(Maintainability): 系统易于维护、操作和演进,降低维护成本和风险。
II. 第一部分:数据系统基础
- 第1章:可靠性、可扩展性、可维护性
- 可靠性:
- 容错(Fault Tolerance)/弹性(Resilience): 系统能够应对故障并继续运行。
- 故障类型: 硬件故障、软件错误、人为失误。
- 提高可靠性的方法: 冗余、监控、快速恢复。
- 可扩展性:
- 负载描述: 使用负载参数(如请求数/秒、读写比例、数据大小)来描述系统的负载。
- 性能描述: 使用吞吐量、延迟、响应时间等指标来衡量系统性能。
- 扩展方式: 垂直扩展(纵向扩展,Scale Up)、水平扩展(横向扩展,Scale Out)。
- 可维护性:
- 可操作性(Operability): 易于运维团队进行监控、维护和故障排查。
- 简洁性(Simplicity): 降低系统的复杂性,提高代码的可读性和可维护性。
- 可演化性(Evolvability): 易于修改和扩展,以适应新的需求和技术。
- 第2章:数据模型与查询语言
- 关系型模型: 结构化数据,使用SQL进行查询。优点:成熟、事务支持良好。缺点:复杂关联查询性能可能较差。
- 文档模型: 半结构化数据(JSON、XML),适合存储schema-less的数据。优点:灵活、易于开发。缺点:事务支持相对较弱。
- 图模型: 存储实体和关系,适合处理复杂的关系网络。优点:擅长处理关联查询。缺点:不适合存储结构化数据。
- 查询语言: SQL、NoSQL查询语言(如MongoDB的查询语法、Cypher)。
- 第3章:存储与检索
- 索引: 加速数据检索的关键。
- 哈希索引: 适用于等值查询。
- B树: 适用于范围查询。
- LSM树(Log-Structured Merge-Tree): 适用于高写入负载。
- 存储引擎: InnoDB、MyISAM、LevelDB、RocksDB等。
- 第4章:编码与演化
- 编码格式: JSON、XML、Protocol Buffers、Avro等。
- 模式演化: 向后兼容性(新代码可以读取旧数据)、向前兼容性(旧代码可以读取新数据)。
III. 第二部分:分布式数据
- 第5章:复制
- 复制方式:
- 单主复制: 只有一个主节点负责写入,其他节点为只读副本。
- 多主复制: 多个主节点都可以进行写入。
- 无主复制: 没有固定的主节点,所有节点都可以接受写入。
- 复制延迟: 异步复制会存在延迟,可能导致数据不一致。
- 第6章:分区
- 分区方式:
- 键值分区: 根据键的哈希值或范围进行分区。
- 列表分区: 根据预定义的列表进行分区。
- 复合分区: 结合多种分区方式。
- 分区带来的挑战: 数据倾斜、跨分区事务。
- 第7章:事务
- ACID属性:
- 原子性(Atomicity): 事务要么全部执行成功,要么全部不执行。
- 一致性(Consistency): 事务执行前后,数据库的状态保持一致。
- 隔离性(Isolation): 并发执行的事务互不干扰。
- 持久性(Durability): 事务一旦提交,其结果永久保存。
- 隔离级别: 读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)、串行化(Serializable)。
- 第8章:分布式系统的挑战
- 网络延迟和分区: 网络不可靠,可能出现消息丢失、延迟或分区。
- 时钟同步: 分布式系统难以实现精确的时钟同步。
- 共识: 在分布式环境下达成一致的协议(如Paxos、Raft)。
IV. 第三部分:衍生数据
- 第9章:批处理
- MapReduce: 大规模数据批处理框架。
- Hadoop、Spark: 常用的批处理平台。
- 第10章:流处理
- 流处理框架: Kafka Streams、Flink、Spark Streaming。
- 应用场景: 实时数据分析、事件驱动架构。
- 第11章:数据系统的未来
- 数据系统的发展趋势: 云原生数据库、Serverless数据库、HTAP(混合事务/分析处理)。
V. 总结
DDIA全面而深入地探讨了数据密集型应用的设计原则和实践。理解书中的核心概念对于构建可靠、可扩展和可维护的系统至关重要。
补充说明:
- CAP定理: 在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)三者不可兼得。
- 一致性模型: 线性一致性、顺序一致性、最终一致性。