DDIA
Designing Data Intensive Applications
Notes
Part 1
Chap 1
数据系统的概念:
数据存储可以用作消息队列(Redis), 消息队列也有持久化的保证(Kafka).
推特首页的实现方式:
- 采用每次去数据库里面查询, 但是性能不好
- 每个用户有个 list, 每次发推后, 给对应关注的用户 list 添加数据
保证网站响应迅速对于保持客户的满意度非常重要,亚马逊观察到:响应时间增加 100 毫秒,销售 量就减少 1%;而另一些报告说:慢 1 秒钟会让客户满意度指标减少 16% 推特。
Chap 2
存储 ID 还是文本字符串,这是个 副本(duplication) 问题。
新的非关系型“NoSQL”数据存储在两个主要方向上存在分歧:
- 文档数据库的应用场景是:数据通常是自我包含的,而且文档之间的关系非常稀少。
- 图形数据库用于相反的场景:任意事物都可能与任何事物相关联。
图数据模型, 这一块没啥基础, 就草草的看过了
声明式查询 vs 命令式
Chap 3
对以下概念讲得真棒:
- LSM Tree, B Tree
- 聚集索引, 非聚集索引, 覆盖索引
- OLTP, OLAP
- 数据仓库
- 列式存储
作为一名应用程序开发人员,如果你掌握了有关存储引擎内部的知识,那么你就能更好地了解哪种工 具最适合你的特定应用程序。如果你需要调整数据库的调整参数,这种理解可以让你设想一个更高或 更低的值可能会产生什么效果。
尽管本章不能让你成为一个特定存储引擎的调参专家,但它至少大概率使你有了足够的概念与词汇储 备去读懂你所选择的数据库的文档。
Chap 4 编码与演化
这一章主要讲了数据的编码格式, 语言内置的编码 (Python 的 pickle, Golang 的 gob 之类的), 更通用的格式 (JSON, XML…), 还有二进制编码 (MessagePack, Thrift, Protocol Buffers…), 以及如何实现向前向后兼容 (这部分仔细讲解了 Thrift, Protocol Buffers 和 Avro 的编码格式).
还有数据流的几种类型 (数据库, RPC, 消息传递), 看完这里你就会明白为什么上有人用消息队列实 现 RPC1, 还有 Event Sourcing 的概念, 本质都是数据. 说数据的怎么又说到 RPC 去了, 只 能说 RPC 是也是数据交流的方式, 再延伸一下, 程序等于数据加算法, 这里的数据涵盖到编程的方 方面面也正常.