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

第十四天

今天要学习的是14、15、16、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

最后

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


小破孩儿的成长记录
记录个人学习成长的点点滴滴。

把这辈子活的热气腾腾!

68 声望
25 粉丝
0 条评论
推荐阅读
《JavaScript 教程》学习补遗(八)
(1)console.log方法用于在控制台输出信息。它可以接受一个或多个参数,将它们连接起来输出。console.log方法会自动在每次输出的结尾,添加换行符。

xiaopohair阅读 955

(学习到实践)七、mongodb测试,php+nginx负载均衡的部署
从测试容器中匹配搜索得到 mongod.conf.orig,设置可以启动,网上查找配置项反不能启动,原因是配置是yaml格式!好像听说过。百度查询得到:官方配置说明,网站卡得出奇。

沧浪水阅读 2.7k

MongoDB 4.4 扩展为副本集(qbit)
前言有一台单实例 MongoDB 服务器已经运行半年了,需要将其扩展为副本集3 台服务器的操作系统均为 Ubuntu 20.043 台服务器的 MongoDB 版本均为 4.4扩展示意图操作步骤备份 mongo0 上的数据修改配置文件 /etc/mong...

qbit阅读 2.3k

centos7安装mongodb
准备工作:1、在root目录下创建文件夹software {代码...} 2、进入software文件 {代码...} 以下是mongodb的具体安装步骤和文件配置1. 下载mongodb3.6.3版本 {代码...} 2. 解压文件 {代码...} 3. 把解压后文件移动...

sourcenode阅读 2.3k

Mac环境下安装MongoDB数据库
一、下载安装1.1 下载MongoDB首先,从MongoDB官网下载自己想要使用的版本。解压缩下载的压缩包重命名为mongodb,将mongodb文件夹复制到/usr/local目录下。当然,除了上面的安装方式外,我们还可以使用Mac OSX的br...

xiangzhihong1阅读 445

bug solved | zsh: command not found: mongo (Mac M1/M2 )
退回MongoDB 5 解决了,,,后来发现把5安装包的/usr/local/mongodb/bin目录下的mongo文件复制到6中同样也能解决。所以最终方法是:把5安装包的/usr/local/mongodb/bin目录下的mongo文件复制到6中

LiberHome2阅读 718评论 1

NineData 核心技术揭秘
NineData 是一个多云的数据管理平台,所以多云和多源是我们要解决的非常重要的问题,上图的最上层是我们支持的数据库类型,从设计上来说,我们要支持市面上所有主流的数据库,既支持MySQL、PostgreSQL、SQLServer...

NineData阅读 699

封面图

把这辈子活的热气腾腾!

68 声望
25 粉丝
宣传栏