1.什么是MongoDB
MongoDB:是一个数据库 ,高性能、无模式、文档性,目前nosql中最热门的数据库
,开源产品,基于c++开发。是nosql数据库中功能最丰富,最像关系数据库的。
2.MongoDB特性:
面向集合文档的存储:适合存储Bson(json的扩展)形式的数据;
格式自由,数据格式不固定,生产环境下修改结构都可以不影响程序运行;
强大的查询语句,面向对象的查询语言,基本覆盖sql语言所有能力;
完整的索引支持,支持查询计划;
支持复制和自动故障转移;
支持二进制数据及大型对象(文件)的高效存储;
使用分片集群提升系统扩展性;
使用内存映射存储引擎,把磁盘的IO操作转换成为内存的操作;
3.MongoDB的不足:
MongoDB对事物的支持较弱: 高度事务性系统,例如银行、财务等系统不适合。
涉及到复杂 的、高度优化的查询方式:传统的商业智能应用,特定问题的数据分析,多数据实体关联等不适合;
数据结构相对固定,使用关系型数据库更好合理,使用sql进行查询统计更加便利的 时候等不适合;
通过上面的分析知道什么情况下使用MongoDB比较合理。下面来分析一下MongoDB在数据安全,灾备,集群容错上做了哪些努力。
第一:Mongodb会不会数据丢失?
可见:在不开启journal日志时是有可能导致数据丢失的(在60s之间或还没有到达2G时服务器宕机),但在开启了journal日志时数据是不会丢失的,Journal 日志类似于关系数据库中的事务日志。Journaling能够使MongoDB数据库由 于意外故障后快速恢复。MongoDB2.4版本后默认开启了Journaling日志功 能,mongod实例每次启动时都会检查journal日志文件看是否需要恢复。由于提交 journal日志会产生写入阻塞,所以它对写入的操作有性能影响,但对于读没有影响。 在生产环境中开启Journaling是很有必要的。
第二:MongoDB安全性如何?
MongoDB提供了各种数据库角色和登录验证,不同角色具有不同的操作权限,类似于关系型数据库。如:
第三:MongoDB集群容错做的怎么样?
在服务运行过程中难免会出现主机宕机的情况,前面已经说到即使MongoDB主机宕机也不会导致数据的丢失,但只能做到这点是不够的,还需要在主机宕机时还能正常对外提供服务,这就是集群容错。
MongoDB提供了俩种方式:
1.可复制集:
提供的功能:
1,避免数据丢失,保障数据安全,提高系统安全性;(最少3节点,最大50节点)
2.自动化灾备机制,主节点宕机后通过选举产生新主机;提高系统健壮性;(7个选举节点上限)
3.读写分离,负载均衡,提高系统性能;
2.分片集群
可复制集的一个缺点是每台MongoDB服务器都保有所有的数据,当数据量特别大时对cpu,内存要求就会越来越高,直到达到性能的瓶颈。分片集群为解决此问题而产生,分片集群就是不同的分片区域保有一部分数据,通过路由转发到对应的分片区域进行数据的读写。每个分片区域可以是一个可复制集,以此达到对更大数据量的容错。
第四:MongoDB的查询效率怎么样?
1.强大的查询语句,面向对象的查询语言,基本覆盖sql语言所有能力;
2.完整的索引支持,支持查询计划;
3.使用内存映射存储引擎,把磁盘的IO操作转换成为内存的操作;查询效率更高