陪你秋招系列: MongoDB入门

前言: MongoDB最流行的现代数据库,内存级的读写.MongoDB这个来源英文单词“humongous”,homongous这个单词的意思是“巨大的”、“奇大无比的”,从MongoDB单词自己能够看出它的目标是提供海量数据的存储以及管理能力。sql

什么是MongoDB

MongoDB是由MongoDB,Inc。开发的非关系数据库.MongoDB将数据做为文档存储在名为BSON(二进制JSON)的二进制表示中。相关信息存储在一块儿,以便经过MongoDB查询语言进行快速查询访问。字段因文档而异; 没有必要向系统声明文档结构 - 文档是自我描述的。若是须要将新字段添加到文档中,则能够在不影响集合中的全部其余文档的状况下建立该字段,而无需更新中央系统目录,也不会使系统脱机。(可选)模式验证可用于对每一个集合强制执行数据治理控制。数据库

MongoDB的文档数据模型天然地映射到应用程序代码中的对象,使开发人员能够轻松学习和使用。文档使您可以轻松地表示层次关系以存储数组和其余更复杂的结构。编程

咱们为何要使用mongoDB

由于它使他们可以更快地构建应用程序,处理高度多样化的数据类型,并大规模地管理应用程序。数组

因为MongoDB文档天然地映射到现代的面向对象编程语言,所以简化了开发。使用MongoDB删除了复杂的对象关系映射(ORM)层,该层将代码中的对象转换为关系表。MongoDB灵活的数据模型还意味着数据库模型能够随业务需求而发展。数据结构

MongoDB还能够在多个分布式数据中心内和跨多个分布式数据中心进行扩展,从而提供之前没法经过MySQL等关系数据库实现的新级别的可用性和可伸缩性。随着您的部署在数据量和吞吐量方面的增加,MongoDB能够轻松扩展,无需停机,也无需更改应用程序。相比之下,使用MySQL实现扩展一般须要大量的定制工程工做。并发

1. 存储方式

MongoDB它在数据存储的形态上和MySQL之类关系数据库有本质区别,MongoDB存储的基本对象是Document,因此咱们把它称为一种文档数据库.而文档的集合是Collection.与SQL的概念类比,Collection对应于Table而Document对应于Row.Document使用一种BSON(Binary JSON)结构来表达,相似JSON的结构.编程语言

Document 在内部是如何存储的?每一个Document被保存在一个Record 中。 Record 至关于 MongoDB 内部分配的一块空间,除了保存 Document 的内容可能还会预留一些填充的额外空间。对于写入后的 Document 若是还会更新,可能致使Document长度增长,就能够利用上额外的填充空间来。若业务对于写入后的Document不会再更新或删除(像监控日志、流水记录等),能够指定无填充的 Record 分配策略,更节省空间。分布式

2. 效率

Mongo的存储方式为虚拟内存+持久化存储,Mongo将数据写入内存中,再由虚拟内存管理器将其持久化到硬盘中,所以写操做会比关系型数据库快不少.并且MongoDB 容许在服务端执行脚本,能够用 Javascript 编写某个函数,直接在服务端执行,也能够把函数的定义存储在服务端,下次直接调用便可。函数

3. 高扩展

mongoDB存储的数据不须要具体的格式,它很是容易扩展,在使用Mysql开发时,最初设计table是让人头疼的,为了考虑到之后的扩展,不得不在table的后面预留一些Row,让人恶心是吧.可是mongoDB文档数据库的特色就是想存什么存什么,后期想添加数据也就是一行代码的事,给了咱们极大的自由,固然自由确定也是有后果的,后面会说.性能

4. 内置 Sharding

分片(Sharding) 帮助扩展,加速查询响应的时间,减小宕机的影响

缺点

1. 占空间

MongoDB 有一个最大的缺点,就是它占用的空间很大,由于它属于典型空间换时间原则的类型。那么它的磁盘空间比普通数据库会浪费一些,并且到目前为止它尚未实如今线压缩功能,在 MongoDB 中频繁的进行数据增删改时,若是记录变了,例如数据大小发生了变化,这时候容易产生一些数据碎片,出现碎片引起的结果,一个是索引会出现性能问题。

2. MongoDB 对数据间的事务关系支持比较弱

mongoDB在4.0版本以后也支持ACID,MongoDB将在4.2里推出分片集群的多文档事务支持。随着事务支持的增长,MongoDB功能上更接近于关系型数据库,可是和关系型仍是有本质上的区别:关系数据库是基于关系模型的,其固定化的数据模型严格死板,对新一代应用迭代式开发支持很差,对各类数据多变的场景如物联网或社交化都没法支持的很好。MongoDB的JSON模型则具备动态灵活,数据库无须下线就能够进行模式变迁升级,特别适用于敏捷式的开发环境。

MongoDB的应用场景

数据不是特别重要(例如通知,推送这些),数据表结构变化较为频繁,数据量特别大,数据的并发性特别高,数据结构比较特别(例如地图的位置坐标),这些状况下用MongoDB,其余状况就仍是用 MySQL,这样组合使用就能够达到最大的效率。

从目前阿里云 MongoDB 云数据库上的用户看,MongoDB 的应用已经渗透到各个领域,好比游戏、物流、电商、内容管理、社交、物联网、视频直播等,如下是几个实际的应用案例。

  • 游戏场景,使用MongoDB存储游戏用户信息,用户的装备、积分等直接之内嵌文档的形式存储,方便查询、更新
  • 物流场景,使用MongoDB存储订单信息,订单状态在运送过程当中会不断更新,以 MongoDB内嵌数组的形式来存储,一次查询就能将订单全部的变动读取出来。
  • 社交场景,使用MongoDB存储存储用户信息,以及用户发表的朋友圈信息,经过地理位置索引实现附近的人、地点等功能
  • 物联网场景,使用MongoDB存储全部接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析
  • 视频直播,使用 MongoDB 存储用户信息、礼物信息等

......

相关文章
相关标签/搜索