上次的博文深刻浅出MongoDB(一)NoSQL中咱们已经简单介绍了一下NoSQL的基本概念,此次咱们来了解一下MongoDB的相关概念。 程序员
MongoDB是一款由C++编写的高性能、开源、无模式的经常使用非关系型数据库产品,是非关系数据库当中功能最丰富、最像关系数据库的数据库。它扩展了关系型数据库的众多功能,例如:辅助索引、范围查询、排序等。 数据库
MongoDB主要解决的是海量数据的访问效率问题,它做为分布式数据崛起后,使用较多的一款非结构数据库,必然有其值得称道之处,它的主要功能特性以下:数组
面向集合的存储,适合存储对象及JSON形式的数据。
动态查询,MongoDB支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
完整的索引支持,包括文档内嵌对象及数组。MongoDB的查询优化器会分析查询表达式,并生成一个高效的查询计划。
查询监视,MongoDB包含一个监视工具用于分析数据库操做的性能。
复制及自动故障转移,MongoDB数据库支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转移。
高效的传统存储方式,支持二进制数据及大型对象(如图片或视频)。
自动分片以支持云级别的伸缩性,自动分片功能支持水平的数据库集群,可动态添加额外的机器。 缓存
对于MongoDB实际应用来说,是否使用MongoDB须要根据项目的特定特色进行一一甄别,这就要求咱们对MongoDB适用和不适用的场景有必定的了解。服务器
根据MongoDB官网的说明,MongoDB的适用场景以下:分布式
网站实时数据:MongoDB很是适合实时的插入,更新与查询,并具有网站实时数据存储所需的复制及高度伸缩性。
数据缓存:因为性能很高,MongoDB也适合做为信息基础设施的缓存层。在系统重启以后,由MongoDB搭建的持久化缓存层能够避免下层的数据源过载。
大尺寸、低价值数据存储:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此以前,不少时候程序员每每会选择传统的文件进行存储。
高伸缩性场景:MongoDB很是适合由数十或数百台服务器组成的数据库。MongoDB的路线图中已经包含对MapReduce引擎的内置支持。
对象或JSON数据存储:MongoDB的BSON数据格式很是适合文档化格式的存储及查询。工具
了解了MongoDB适用场景以后,还须要了解哪些场景下不适合使用MongoDB,具体以下:性能
高度事务性系统:例如银行或会计系统。传统的关系型数据库目前仍是更适用于须要大量原子性复琐事务的应用程序。
传统的商业智能应用:针对特定问题的BI数据库会对产生高度优化的查询方式。对于此类应用,数据仓库多是更合适的选择。
须要复杂SQL查询的问题。 学习
相信经过上面的说明,你已经大体了解了MongoDB的使用规则,须要说明一点的是,MongoDB不单单是数据库,更多的使用是将MongoDB做为一个数据库中间件在实际应用中合理划分使用细节,这一点对于MongoDB应用来说相当重要!优化
到此为止,对MongoDB总体概念的解释就结束了,关于MongoDB更多的学习须要读者进行相关的实践,接下来文章我会对MongoDB的常规操做和一些细节性说明进行讲解,敬请期待!