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

分享 | MongoDb优化指南

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

从性能优化的角度来看,集合的设计我们需要考虑的是集合中数据的常用操作,例如我们需要设计一个日志(log)集合,日志的查看频率不高,但写入频率却很高,那么我们就可以得到这个集合中常用的操作是更新(增删改)。如果我们要保存的是城市列表呢?显而易见,这个集合是一个查看频率很高,但写入频率很低的集合,那么常用的操作就是查询。

对于频繁更新和频繁查询的集合,我们最需要关注的重点是他们的范式化程度,在上篇范式化与反范式化的介绍中我们了解到,范式化与反范式化的合理运用对于性能的提高至关重要。然而这种设计的使用非常灵活,假设现在我们需要存储一篇图书及其作者,在MongoDB中的关联就可以体现为以下几种形式:

1、完全分离(范式化设计)

示例1:

  1. {  
  2.      "_id" : ObjectId("5124b5d86041c7dca81917"),  
  3.      "title" : "如何使用MongoDB",   
  4.       "author" : [   
  5.                ObjectId("144b5d83041c7dca84416"),  
  6.               ObjectId("144b5d83041c7dca84418"),  
  7.               ObjectId("144b5d83041c7dca84420"),  
  8.      ]  
  9.  } 

我们将作者(comment) 的id数组作为一个字段添加到了图书中去。这样的设计方式是在非关系型数据库中常用的,也就是我们所说的范式化设计。在MongoDB中我们将与主键没有直接关系的图书单独提取到另一个集合,用存储主键的方式进行关联查询。当我们要查询文章和评论时需要先查询到所需的文章,再从文章中获取评论id,最后用获得的完整的文章及其评论。在这种情况下查询性能显然是不理想的。但当某位作者的信息需要修改时,范式化的维护优势就凸显出来了,我们无需考虑此作者关联的图书,直接进行修改此作者的字段即可。

2、完全内嵌(反范式化设计)

示例2:

  1. {  
  2.        "_id" : ObjectId("5124b5d86041c7dca81917"),  
  3.        "title" : "如何使用MongoDB",  
  4.        "author" : [  
  5.                 {  
  6.                      "name" : "丁磊"  
  7.                      "age" : 40,  
  8.                      "nationality" : "china",  
  9.                 },  
  10.                 { 
  11.  
  12.                      "name" : "马云"  
  13.                      "age" : 49,  
  14.                      "nationality" : "china",  
  15.                 },  
  16.                 {  
  17.                      "name" : "张召忠"  
  18.                      "age" : 59,  
  19.                      "nationality" : "china",  
  20.                 },  
  21.       ]  
  22.   } 

(编辑:常州站长网)

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

热点阅读