加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

分享 | MongoDb优化指南

发布时间:2018-11-21 16:28:09 所属栏目:MySql教程 来源:吴纹羽
导读:副标题#e# 1、为什么选择MongoDB? 1、性能 在大数据时代中,大数据量的处理已经成了考量一个数据库最重要的原因之一。而MongoDB的一个主要目标就是尽可能的让数据库保持卓越的性能,这很大程度地决定了MongoDB的设计。在一个以传统机械硬盘为主导的年代,

在这个示例中我们将作者的字段完全嵌入到了图书中去,在查询的时候直接查询图书即可获得所对应作者的全部信息,但因一个作者可能有多本著作,当修改某位作者的信息时时,我们需要遍历所有图书以找到该作者,将其修改。

3、部分内嵌(折中方案)

示例3:

  1. {  
  2.        "_id" : ObjectId("5124b5d86041c7dca81917"),  
  3.        "title" : "如何使用MongoDB",  
  4.        "author" : [   
  5.                {  
  6.                      "_id" : ObjectId("144b5d83041c7dca84416"),  
  7.                      "name" : "丁磊"  
  8.                 },  
  9.                 {  
  10.                      "_id" : ObjectId("144b5d83041c7dca84418"),  
  11.                      "name" : "马云"  
  12.                 },  
  13.                 {  
  14.                      "_id" : ObjectId("144b5d83041c7dca84420"),  
  15.                      "name" : "张召忠" 
  16.                 },  
  17.       ]  
  18.   } 

这次我们将作者字段中的最常用的一部分提取出来。当我们只需要获得图书和作者名时,无需再次进入作者集合进行查询,仅在图书集合查询即可获得。

这种方式是一种相对折中的方式,既保证了查询效率,也保证的更新效率。但这样的方式显然要比前两种较难以掌握,难点在于需要与实际业务进行结合来寻找合适的提取字段。如同示例3所述,名字显然不是一个经常修改的字段,这样的字段如果提取出来是没问题的,但如果提取出来的字段是一个经常修改的字段(比如age)的话,我们依旧在更新这个字段时需要大范围的寻找并依此进行更新。

在上面三个示例中,第一个示例的更新效率是最高的,但查询效率是最低的,而第二个示例的查询效率最高,但更新效率最低。所以在实际的工作中我们需要根据自己实际的需要来设计表中的字段,以获得最高的效率。

5、理解填充因子

何为填充因子?

填充因子(padding factor)是MongoDB为文档的扩展而预留的增长空间,因为MongoDB的文档是以顺序表的方式存储的,每个文档之间会非常紧凑,如图所示。

(注:图片出处:《MongoDB The Definitive Guide》)

分享 | MongoDb优化指南 

1.元素之间没有多余的可增长空间。

分享 | MongoDb优化指南

2.当我们对顺序表中某个元素的大小进行增长的时候,就会导致原来分配的空间不足,只能要求其向后移动。

分享 | MongoDb优化指南

3.当修改元素移动后,后续插入的文档都会提供一定的填充因子,以便于文档频繁的修改,如果没有不再有文档因增大而移动的话,后续插入的文档的填充因子会依此减小。

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读