美文网首页
mongo回顾(二)

mongo回顾(二)

作者: supremecsp | 来源:发表于2021-04-07 22:43 被阅读0次

上回提到,对比关系型数据库的全部,非关系型数据库就像偏科选手。但是非关系型数据库也有全能型选手,那就是mongodb。今天简单说下mongo的基本特征,和它是如何存储数据的。
首先mongodb是文档型数据库,所谓文档型数据库就是数据以json格式进行存储,一个文档数据对象中可以嵌套着另一个对象,可以包含数组(早期数组只允许嵌套两层,后面解除了这个限制,但是还是不建议嵌套太多层,会影响解析数据的性能)。
JSON 数据模型对于开发者来说是比较合适的,在适合用mongo开发的情况下,你会发现代码量比关系型数据库少了挺多,JSON模式简化了数据库层面设计,orm编码的工作


image.png

文档格式类似于上面,对象里面既可以嵌套对象,也可以嵌套数组。
有个说法是mongo是无模式,不需要模型设计的?这是什么意思。
传统模型设计:从概念到逻辑到物理


image.png
即为从一个虚渺的概念->类图->真正数据库的存储数据(包括外键索引等)
而在设计过程中有一个原则是在遵循三大范式的同时,允许适量的冗余。
在这个原则下,一个对象可能被拆成好几张表来进行存储;
而mongo由于是文档型数据库,整个对象可以直接进行存储,所以逻辑模型和物理模型通常是类似的,导致让人有一个错觉。mongo是不需要模型设计的。实际上概念模型到逻辑模型还是需要的。

mongo不要求绝对准守范式,还鼓励着数据的冗余,把大部分有关系的数据存储在同一个文档中,可以很大的提高mongo的性能(这个mongo的索引设计有关)
但是不是所有有关联的数据都可以冗余,mongo的一个文档不能大于16M,而且有些数据需要经常更改,冗余的话,牵一发而动全身,这样的设计是不合理的,因此有些情况还是需要抽取出来成两个文档,通过逻辑外键进行管理(mongo没有物理外键)
那冗余在一个文档中mongo怎么来表现关系型数据库的关联关系:一对一,一对多,多对多?
答案通过内嵌对象或数组;一对一内嵌对象,一对多,多对多通过内嵌数组都可以解决
mongo逻辑外键的话有关联语句吗?
mongo在聚合操作中有一个$lookup 可以来模仿关联查询,但是它的功能相当于left join而已,而且效率没mysql的高,在分片情况下还会失效(可以想象分片相当于mysql中的分表,分表后关联查询也不好查)。
所以本篇得出第一个优缺点:
优点:mongodb可以减少代码的开发量,方便模型设计
缺点:关联关系比较多的业务,不适合使用mongodb做为应用数据库
为什么mongo建议数据尽可能放一个文档,第一个原因是关联不方便,还有一个原因是查询不方便,下一篇就来聊聊mongo的索引

相关文章

  • mongo回顾(二)

    上回提到,对比关系型数据库的全部,非关系型数据库就像偏科选手。但是非关系型数据库也有全能型选手,那就是mongod...

  • mongo回顾(八:聚合查询二)

    上一篇简单的介绍了mongo的聚合查询,并举例了match与lookup的使用,今天的话继续介绍聚合查询与Mong...

  • mongo回顾(四)

    上回聊到mongo索引采用了B树,而且采用的原因。今天具体聊聊mongo中的索引。MongoDB defines ...

  • mongo回顾(五)

    上一篇聊到了索引类型和索引属性,今天来聊聊索引的性能分析首先说说索引的分析工具explain,我常用的工具是Mon...

  • mongo回顾(一)

    这个月轮到我做技术分享,由于关系型数据库被分享了好几次了,那我就挑个非关系型的来分享吧,分享之前对mongo做一些...

  • The Road of DBA 19_NoSQL_Elastic

    mongo回顾 2、Elasticsearch介绍 2.1 2.2、Elasticsearch功能 2.3、特点 ...

  • mongo回顾(十:日志)

    上一篇留下了一个疑问,mongo是内存数据库吗? 我们知道,redis是内存数据库,数据都保存在内存中,对于数据的...

  • mongo(二)

    查看指令 test:登录时默认存在的库admin库:系统预留库,MongoDB系统管理库local库:本地预留库,...

  • Timed out after 30000 ms while w

    今天使用mongo-java-drive写连接mongo的客户端,着实被上面那个错坑了一把。回顾一下解决过程: 报...

  • mongo回顾(七:聚合查询)

    上一篇简单介绍了mongo的增删改查,今天来聊聊mongo的聚合操作 什么是 MongoDB 聚合框架 Mongo...

网友评论

      本文标题:mongo回顾(二)

      本文链接:https://www.haomeiwen.com/subject/islpkltx.html