前言: MongoDB最流行的现代数据库,内存级的读写.MongoDB这个来源英文单词“humongous”,homongous这个单词的意思是“巨大的”、“奇大无比的”,从MongoDB单词自己能够看出它的目标是提供海量数据的存储以及管理能力。sql
MongoDB是由MongoDB,Inc。开发的非关系数据库.MongoDB将数据做为文档存储在名为BSON(二进制JSON)的二进制表示中。相关信息存储在一块儿,以便经过MongoDB查询语言进行快速查询访问。字段因文档而异; 没有必要向系统声明文档结构 - 文档是自我描述的。若是须要将新字段添加到文档中,则能够在不影响集合中的全部其余文档的状况下建立该字段,而无需更新中央系统目录,也不会使系统脱机。(可选)模式验证可用于对每一个集合强制执行数据治理控制。数据库
MongoDB的文档数据模型天然地映射到应用程序代码中的对象,使开发人员能够轻松学习和使用。文档使您可以轻松地表示层次关系以存储数组和其余更复杂的结构。编程
由于它使他们可以更快地构建应用程序,处理高度多样化的数据类型,并大规模地管理应用程序。数组
因为MongoDB文档天然地映射到现代的面向对象编程语言,所以简化了开发。使用MongoDB删除了复杂的对象关系映射(ORM)层,该层将代码中的对象转换为关系表。MongoDB灵活的数据模型还意味着数据库模型能够随业务需求而发展。数据结构
MongoDB还能够在多个分布式数据中心内和跨多个分布式数据中心进行扩展,从而提供之前没法经过MySQL等关系数据库实现的新级别的可用性和可伸缩性。随着您的部署在数据量和吞吐量方面的增加,MongoDB能够轻松扩展,无需停机,也无需更改应用程序。相比之下,使用MySQL实现扩展一般须要大量的定制工程工做。并发
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 分配策略,更节省空间。分布式
Mongo的存储方式为虚拟内存+持久化存储,Mongo将数据写入内存中,再由虚拟内存管理器将其持久化到硬盘中,所以写操做会比关系型数据库快不少.并且MongoDB 容许在服务端执行脚本,能够用 Javascript 编写某个函数,直接在服务端执行,也能够把函数的定义存储在服务端,下次直接调用便可。函数
mongoDB存储的数据不须要具体的格式,它很是容易扩展,在使用Mysql开发时,最初设计table是让人头疼的,为了考虑到之后的扩展,不得不在table的后面预留一些Row,让人恶心是吧.可是mongoDB文档数据库的特色就是想存什么存什么,后期想添加数据也就是一行代码的事,给了咱们极大的自由,固然自由确定也是有后果的,后面会说.性能
分片(Sharding) 帮助扩展,加速查询响应的时间,减小宕机的影响
MongoDB 有一个最大的缺点,就是它占用的空间很大,由于它属于典型空间换时间原则的类型。那么它的磁盘空间比普通数据库会浪费一些,并且到目前为止它尚未实如今线压缩功能,在 MongoDB 中频繁的进行数据增删改时,若是记录变了,例如数据大小发生了变化,这时候容易产生一些数据碎片,出现碎片引起的结果,一个是索引会出现性能问题。
mongoDB在4.0版本以后也支持ACID,MongoDB将在4.2里推出分片集群的多文档事务支持。随着事务支持的增长,MongoDB功能上更接近于关系型数据库,可是和关系型仍是有本质上的区别:关系数据库是基于关系模型的,其固定化的数据模型严格死板,对新一代应用迭代式开发支持很差,对各类数据多变的场景如物联网或社交化都没法支持的很好。MongoDB的JSON模型则具备动态灵活,数据库无须下线就能够进行模式变迁升级,特别适用于敏捷式的开发环境。
数据不是特别重要(例如通知,推送这些),数据表结构变化较为频繁,数据量特别大,数据的并发性特别高,数据结构比较特别(例如地图的位置坐标),这些状况下用MongoDB,其余状况就仍是用 MySQL,这样组合使用就能够达到最大的效率。
从目前阿里云 MongoDB 云数据库上的用户看,MongoDB 的应用已经渗透到各个领域,好比游戏、物流、电商、内容管理、社交、物联网、视频直播等,如下是几个实际的应用案例。
......