白话MongoDB(一)

转载 2017年07月17日 08:52:51

 按照官方的说法,MongoDB是一种可扩展的高性能的开源的面向文档(document-oriented )的数据库,采用C++开发。注意mongo不是mango(芒果),这个词是从humongous中截取出来的,其野心不言而明,直指海量数据存储。和其他很多NoSQL不太一样,MongoDB背后有一个专门的商业公司在提供支持和推广,有点类似MySQL AB的模式。这一系列文章,是为入门者写的,已经对NoSQL和MongoDB有一定研究和经验的,可以略过,或者看看如有疏漏,请留言指出。
  面向文档,那么什么是文档呢?很明显这不是我们常见的word文档。这里说的文档,是一种可以嵌套的数据集合。从关系数据库的范式的概念来说,嵌套是明显的反范式设计。范式设计的好处是消除了依赖,但是增加了关联,查询需要通过关联两张或者多张表来获得所需要的全部数据,但是更改操作是原子的,只需要修改一个地方即可。反范式则是增加了数据冗余来提升查询性能,但更新操作可能需要更新冗余的多处数据,需要注意一致性的问题。
  一个典型的例子,如blog,关系数据库中一般可以把文章设计为一张表,评论设计为一张表,那么在页面需要展示一篇文章和其对应的评论的时候,就需要关联查询文章表和评论表。但是面向文档的设计,可以将评论作为文章的一个嵌套文档存放在一起,这不但省去了关联查询,由于存储在一起,查询的性能也可以做到更好。
  MongoDB的面向文档采用的是BSON,一种类似JSON的格式,但是是二进制序列化的。如上面提到的blog的文章和评论,可以做如下设计:
{ ‘id’:1, ‘author’:’NinGoo’, ‘title’:’白话MongoDB(一)’, ‘content’:’按照官方的说法,此处省略一万字’,
comment:[ { ‘comment-author’:’宋兵甲’, ‘comment-content’:’有木有’ } ,
{ ‘comment-author’:’尼玛’,’comment-content’:’伤不起啊’ }
]
}
1. 相关数据存放在一起,针对性的查询可以消除join,性能比分散存储要高且方便。
  2. 整个结构清晰自解析。所有字段名和值都存储,所以不需要提前设计结构,key的名字和数目可以任意指定,也就是所谓的schema-free。
  3. 由于字段名在每一行每一列都需要重复存在,会带来一些额外的存储消耗,这在海量数据及字段较多的时候也需要考虑。
  4. 一个document的长度有限,1.7.2之前是4MB,目前是8MB,以后可能增长到32MB。如果有更大的数据,可以使用MongoDB底层的GridFS直接作为文件存储。
  5. 如果需要查找某个评论者的所有评论,则相对困难。当然,MongoDB支持任意key的索引,这也不是什么大问题。
  像上面的一个结构,为一个文档(document),相当于关系数据库中的一行记录,多个文档组成一个集合(collection),相当于关系数据库的表。多个集合(collection),逻辑上组织在一起,就是数据库(database),一个MongoDB实例支持多个数据库(database)。
  大部分的NoSQL产品,为追求性能,一致性等,一般只能支持简单的基于row-key的单条或者范围查询,但是MongoDB可以针对任意列的key创建索引,甚至是内嵌文档里的key,从支持的查询的灵活性上来看,更接近传统的关系数据库,同时还能在性能上向NoSQL看齐,加上支持复制,自动分片和Map/Reduce等功能,非常的吸引眼球,正在成为一款热门的海量存储产品。其背后的商业支持公司10gen,也正在不遗余力的推广,前不久还在北京专门组织了一场技术交流会。在其首页列举的典型客户里,包括foursquare,sourceforge,github等知名互联网公司和应用,当然,也包括淘宝网。
  原文链接http://kb.cnblogs.com/page/95936/

白话空间统计番外三:空间统计的基础理论

空间统计学是统计学的一个分支,有很多与统计学相同的地方,也有很多有自身特点的,地方,今天我们就来聊聊空间统计学的四大基础理论: 首先就是空间概率 统计学是一门计算很研究概率的学问,一般...
  • allenlu2008
  • allenlu2008
  • 2016年08月15日 15:05
  • 2139

通俗易懂设计模式系列--白话设计模式

抽空有整理了一下设计模式,用自己的话总结了一下,自认为通俗易懂。 简单工厂模式: 包括三种角色,抽象产品、具体产品和工厂角色。其中在工厂直接完成对具体产品的创建。工厂模式的好处是需要创建对象的时候只需...
  • u011630100
  • u011630100
  • 2014年03月29日 18:55
  • 1599

大白话Docker入门(一)

转载:https://yq.aliyun.com/articles/63035?utm_campaign=wenzhang&utm_medium=article&utm_source=QQ-qun&u...
  • u012129031
  • u012129031
  • 2016年11月17日 10:02
  • 320

大白话Docker入门(二)

转载自 :https://yq.aliyun.com/articles/63517?spm=5176.100239.blogcont63035.17.VQ5N1G 大白话Dock...
  • u012129031
  • u012129031
  • 2016年11月17日 10:04
  • 350

白话空间统计二十四:地理加权回归(一)

当一个数据,在A区域内有很强的解释能力,比如在威海市,人口数量对财政收入的变化,可解释性超过了96%,但是同样居于鲁东的青岛,只有1%,简直就不能用不显著来形容。这种在不同区域具有不同性质的情况,就是...
  • allenlu2008
  • allenlu2008
  • 2017年03月02日 09:23
  • 5305

一篇不错的项目管理之道

一、入门心法 1)通常工作梳理用5W1H法: (P82) 当开始开发医疗APP的时候,还没具体了解这是个什么APP。做这个APP的目的是啥,完全没概念。只知道这个东西类似于挂号网,越做到后...
  • lifuxiangcaohui
  • lifuxiangcaohui
  • 2016年01月14日 13:41
  • 1351

java 面向对象 OO 反射 "六原则一法则"

1.获得一个类的类对象有哪些方式? 答: - 方法1:类型.class,例如:String.class - 方法2:对象.getClass(),例如:”hello”.getClass() ...
  • u010575093
  • u010575093
  • 2016年02月28日 12:57
  • 823

白话MongoDB(二)

前面扯了一堆,要了解一个东西,最好的办法,还是让他跑起来,然后结合文档和测试,来验证其实现,并且了解其不足和优点。   MongoDB提供了部分系统的编译版本,但从研究学习以及线上不同依赖包的稳定性...
  • JDJH1024
  • JDJH1024
  • 2017年07月17日 08:54
  • 9697

白话区块链

水里照出的是自己的脸,内心反映的是自己的为人。(《圣经·旧约》) 1、概述 区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点...
  • zhoutaochun
  • zhoutaochun
  • 2018年01月13日 00:15
  • 334

白话MongoDB(三)

通过源代码编译安装好MongoDB之后,接下来需要配置运行。在MongoDB的安装目录,有几个子目录,bin下面是可执行文件,包括: mongod:数据库服务端,类似mysqld,每个实例启动一个进...
  • JDJH1024
  • JDJH1024
  • 2017年07月17日 08:55
  • 8932
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:白话MongoDB(一)
举报原因:
原因补充:

(最多只允许输入30个字)