《MongoDB高手课》学习记录(第十四天)

第十四天

今天要学习的是1四、1五、1六、17章节。对比传统的模型设计方法,做者总结本身的经验,来说解MongoDB是怎么样进行模型设计的,并举了一个分桶模型的例子。数据库

关系模型与文档模型的对比

传统上来说,因为MongoDB是经过文档来组织数据的,因此人们认为MongoDB是没有模型设计的,或者不须要模型设计的。其实无论是什么数据库,要想高效、易用的组织数据,模型设计是必不可少的,方式方法也是相通的。
image.png数组

JSON文档模型设计

  1. 文档模型设计处于物理模型设计阶段,逻辑结构与物理结构基本是同样的。
  2. JSON文档模型经过内嵌数组或者引用字段来表示关系
  3. 文档模型设计不遵循关系数据库设计的第三范式,容许冗余。

例子

在一个文档中实现了全部数据的组织,固然还没考虑性能及易用性等等方面,后面展开。
image.png框架

做者给出的设计步骤

image.png
我的理解就是,整理出实体/属性/关系,而后再考虑系统的环境、读写的性能、数据的容量等因素调整设计,最后就是看看能不能套用一些设计模型的最佳实践。数据库设计

联系人管理例子

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

何时该使用引用方式

  1. 内嵌文档太大,数 MB 或者超过 16MB
  2. 内嵌文档或数组元素会频繁修改
  3. 内嵌数组元素会持续增加而且没有封顶

MongoDB 引用设计的限制

  1. MongoDB 对使用引用的集合之间并没有主外键检查
  2. MongoDB 使用聚合框架的 $lookup 来模仿关联查询
  3. $lookup 只支持 left outer join
  4. $lookup 的关联目标(from)不能是分片表

经验小结

  1. 90:10 规则:大部分时候你会使用内嵌来表示 1-1,1-N,N-N
  2. 内嵌相似于预先聚合(关联)
  3. 内嵌后对读操做一般有优点(减小关联)

分桶模式

说简单点就是得用内嵌数组将一个时间段的数据集合到一个文档中,而不是传统的按行存.
image.png
image.png
image.png
image.png性能

适用范围

image.png

最后

今天的内容就这些,举的几个例子比较不错,能够反复琢磨一下学习