读DDIA随笔——day1

56 阅读2分钟

前言

在校期间就已经买了这本神书了,如今出来工作了才拆开封皮,惭愧惭愧。。。写个博客来总结笔记以及当作随堂思考吧,鼓励自己读完。

第一章 应用系统特征

  • 数据密集型应用的限制因素有:数据量,数据的复杂度,数据的快速多变性

  • 软件系统架构不是单独的数据库,队列,高速缓存,而是将它们归为一大类

  • 软件系统最重要的三个问题:

    • 可靠性:出现意外时,系统可以继续运转,不保证性能要求,起码确保功能正常。以下是一些影响可以被消除的故障类型

      • 硬件故障:一般是通过添加硬件冗余来减少系统故障率,现在的磁盘和内存都便宜了,不麻烦
      • 软件故障:除了要做好生产前测试,也要做好监控告警一类的方案
      • 人为失误:比如一些版本回滚机制,以及开发前的好设计,做好人为测试等等
    • 可扩展性:即可扩容,在访问量上涨时,系统能做出相应变更

      • 要注意涉及多个后端调用时,最慢的调用会拖累整个系统,即“水桶效应”
    • 可维护性:人员加入维护现有功能

      • 可运维性
      • 简单性
      • 可演化性
  • 关于描述性能

    • 考察服务请求的响应时间,最好使用百分位数

第二章 数据模型与查询语言

  • 使用NoSQL的驱动因素

    • 比关系型数据库更好扩展,包括支持超大数据集或超高写入吞吐量
    • 偏爱免费开源软件
    • 关系模型不能很好支持一些特定的查询操作,比如统计某一列的数据
    • 对关系模型的限制性不满
  • 对象-关系不匹配的情况下,如果是一对多的情况下,用json会更适合表达,文档数据库也是支持json

  • 有时候一些域名或者学生名存储为id,而不是纯文本字符串形式

    • 可以保持样式和输入值一致
    • 避免歧义,比如出现同名的城市
    • 易于更新,名字只保存一次
    • 本地化支持,翻译成其他语言很方便
    • 更好的搜索支持
    • id对人类没有直接意义,不用直接改变
  • 数据模型的分类:

    • 层次模型
    • 网络模型
    • 关系模型
  • 将string类型的默认值设置为null或空字符串,读取时去填充,可以增加update的速度