1.什么是MongoDB

MongoDB:是一个数据库 ,高性能、无模式、文档性,目前nosql中最热门的数据库

,开源产品,基于c++开发。是nosql数据库中功能最丰富,最像关系数据库的。

2.MongoDB特性:

 面向集合文档的存储:适合存储Bson(json的扩展)形式的数据;

 格式自由,数据格式不固定,生产环境下修改结构都可以不影响程序运行;

 强大的查询语句,面向对象的查询语言,基本覆盖sql语言所有能力;

 完整的索引支持,支持查询计划;

 支持复制和自动故障转移;

 支持二进制数据及大型对象(文件)的高效存储;

 使用分片集群提升系统扩展性;

 使用内存映射存储引擎,把磁盘的IO操作转换成为内存的操作;

3.MongoDB的不足:

 MongoDB对事物的支持较弱: 高度事务性系统,例如银行、财务等系统不适合。

 涉及到复杂 的、高度优化的查询方式:传统的商业智能应用,特定问题的数据分析,多数据实体关联等不适合;

 数据结构相对固定,使用关系型数据库更好合理,使用sql进行查询统计更加便利的 时候等不适合;

通过上面的分析知道什么情况下使用MongoDB比较合理。下面来分析一下MongoDB在数据安全,灾备,集群容错上做了哪些努力。

第一:Mongodb会不会数据丢失?

Mysql mongodb 选型 mongodb数据库优点_复制集

可见:在不开启journal日志时是有可能导致数据丢失的(在60s之间或还没有到达2G时服务器宕机),但在开启了journal日志时数据是不会丢失的,Journal 日志类似于关系数据库中的事务日志。Journaling能够使MongoDB数据库由 于意外故障后快速恢复。MongoDB2.4版本后默认开启了Journaling日志功 能,mongod实例每次启动时都会检查journal日志文件看是否需要恢复。由于提交 journal日志会产生写入阻塞,所以它对写入的操作有性能影响,但对于读没有影响。 在生产环境中开启Journaling是很有必要的。

第二:MongoDB安全性如何?

MongoDB提供了各种数据库角色和登录验证,不同角色具有不同的操作权限,类似于关系型数据库。如:

Mysql mongodb 选型 mongodb数据库优点_复制集_02


第三:MongoDB集群容错做的怎么样?

在服务运行过程中难免会出现主机宕机的情况,前面已经说到即使MongoDB主机宕机也不会导致数据的丢失,但只能做到这点是不够的,还需要在主机宕机时还能正常对外提供服务,这就是集群容错。

MongoDB提供了俩种方式:

1.可复制集:

提供的功能:

1,避免数据丢失,保障数据安全,提高系统安全性;(最少3节点,最大50节点)

2.自动化灾备机制,主节点宕机后通过选举产生新主机;提高系统健壮性;(7个选举节点上限)

3.读写分离,负载均衡,提高系统性能;

2.分片集群

可复制集的一个缺点是每台MongoDB服务器都保有所有的数据,当数据量特别大时对cpu,内存要求就会越来越高,直到达到性能的瓶颈。分片集群为解决此问题而产生,分片集群就是不同的分片区域保有一部分数据,通过路由转发到对应的分片区域进行数据的读写。每个分片区域可以是一个可复制集,以此达到对更大数据量的容错。

第四:MongoDB的查询效率怎么样?

1.强大的查询语句,面向对象的查询语言,基本覆盖sql语言所有能力;

2.完整的索引支持,支持查询计划;

3.使用内存映射存储引擎,把磁盘的IO操作转换成为内存的操作;查询效率更高