前言
在校期间就已经买了这本神书了,如今出来工作了才拆开封皮,惭愧惭愧。。。写个博客来总结笔记以及当作随堂思考吧,鼓励自己读完。
第一章 应用系统特征
-
数据密集型应用的限制因素有:数据量,数据的复杂度,数据的快速多变性
-
软件系统架构不是单独的数据库,队列,高速缓存,而是将它们归为一大类
-
软件系统最重要的三个问题:
-
可靠性:出现意外时,系统可以继续运转,不保证性能要求,起码确保功能正常。以下是一些影响可以被消除的故障类型
- 硬件故障:一般是通过添加硬件冗余来减少系统故障率,现在的磁盘和内存都便宜了,不麻烦
- 软件故障:除了要做好生产前测试,也要做好监控告警一类的方案
- 人为失误:比如一些版本回滚机制,以及开发前的好设计,做好人为测试等等
-
可扩展性:即可扩容,在访问量上涨时,系统能做出相应变更
- 要注意涉及多个后端调用时,最慢的调用会拖累整个系统,即“水桶效应”
-
可维护性:人员加入维护现有功能
- 可运维性
- 简单性
- 可演化性
-
-
关于描述性能
- 考察服务请求的响应时间,最好使用百分位数
第二章 数据模型与查询语言
-
使用NoSQL的驱动因素
- 比关系型数据库更好扩展,包括支持超大数据集或超高写入吞吐量
- 偏爱免费开源软件
- 关系模型不能很好支持一些特定的查询操作,比如统计某一列的数据
- 对关系模型的限制性不满
-
对象-关系不匹配的情况下,如果是一对多的情况下,用json会更适合表达,文档数据库也是支持json
-
有时候一些域名或者学生名存储为id,而不是纯文本字符串形式
- 可以保持样式和输入值一致
- 避免歧义,比如出现同名的城市
- 易于更新,名字只保存一次
- 本地化支持,翻译成其他语言很方便
- 更好的搜索支持
- id对人类没有直接意义,不用直接改变
-
数据模型的分类:
- 层次模型
- 网络模型
- 关系模型
-
将string类型的默认值设置为null或空字符串,读取时去填充,可以增加update的速度