关于MogonDB在面试中可以会遇到的几个问题
1.项目中为什么用Mongodb取代关系型数据库如MySQL
1、需求变化新繁:开发要更加敏建,开发成本和维护成本要更低,要能够快速地更新进化,功能要在最短的周明内上线。
2.客户端/api支持,因为这直接影响开发效率
3.部署和使用简单
4.扩展能力强
5.节省系统资源,对cpu等资源耗费较小
满足这些要求的nosq(方率,就剩下了mongodb和redis了,对于reds,我并不是说他不好。而是有-个重要原因,我们的项目的数算处理格式都是采用ISON的形式来处理的,这一点对于后来两者之间的选择,起到了决定性作用。当然,Redis对丰富数据类型的操作很吸引人,可以轻松解决一些应用场量, 其读写性能也相当高,当前的版本是存储和内存是挂钩的,这样如果存储大量的数据需要消耗太多的内存,当然现在的版本已经么有这样的问题了。
MongoDB是-一个面向文档的数据库,功能丰富,齐全,完全可以替代MySQL.
2.Mongodb的优点
1.使用JSON风格语法,易于掌握和理解: MongoDB使用JSON的变种BSON作为内部存储的格式和语法。针对MongoD的操作都使用ISON风格语法,客户端提交或接收的数据都使用ISON形式来展现。相对于SQL来说,更加直观,容易理解和掌握。
2.Schema-less, 支持嵌入子文档: MongoDB是一个Schema-fee的文档数据库。 一个数据库可以有多个Collection,每个Collection是Documents的集台。 Collection和Document和传统数据库的Table和Row并不对等。无需事先定义Collection, 随时可以创建。Collection中可以包含具有不同schema的文档记录。 这意味看, 你上一条记录中的文档有3个属性。而下一亲记录的文档可以有10个属性,属性的类型既可以是基本的数据类型(如数字。字符电。日期等),也可以是数组或者酸列。甚至还可以是一一个子文档(embed document)。这样。可以实现逆规范化(denomilizing) 的数据模型,提高查间的速度。
3.简单易用的查询方式:直接使用JSON,支持范围查询,正则表达式查询。
3.Mongodb的缺点
1.MongoDB对事物的支持较弱:高度事务性系统, 例如银行、财务等系统不适合。
2.涉及到复杂的.高度优化的查询方式:传统的商业智能应用,特定问题的数据分析,多数据实体关联等不适合。
3.数据结构相对固定,使用关系型数据库更好合理,使用sq|进行查询统计更加便利的时候等不适合。
4.Mongodb会丢数据吗
在不开启journal日志时是有可能导致数据丢失的(在60s之间或还没有到达2G时服务器宕机),但在开启了
journal日志时数据是不会丢失的,Journal 日志类似于关系数据库中的事务日志。Journaling能够使MongoDB数据库由于意外故障后快速恢复。MongoDB2. 4版本后默认开启了Journaling日志功能mongod实例每次启动时都会检查。
5.Mongodb安全吗?
Mongodb提供了各种数据库角色和登录验证,不同的角色具有不同的操作权限,与关系型数据库类似。
6.Mongodb集群容错性高吗?
在服务运行过程中难免会出现主机宕机的情况,前面已经说到即使MongoDB主机宕机也不会导致数据的丢失,但只能做到这点是不够的,还需要在主机宕机时还能正常对外提供服务,这就是集群容错。
MongoDB提供了俩种方式:
1.可复制集:
提供的功能:
1,避免数据丢失,保障数据安全,提高系统安全性; (最少3节点最大50节点)
2.自动化灾备机制,主节点宕机后通过选举产生新主机;提高系统健壮性; (7个选举节点 上限)
3.读写分离负载均衡,提高系统性能;
2.分片集群
可复制集的一个缺点是每台MongoDB服务器都保有所有的数据,当数据量特别大时对cpu,内存要求就会越来越高,直到达到性能的瓶颈。分片集群为解决此问题而产生,分片集群就是不同的分片区域保有一部分数据, 通过路由转发到对应的分片区域进行数据的读写。每个分片区域可以是一个可复 制集,以此达到对更大数据量的容错。
7.MongoDB的查询效率怎么样?
1.强大的查询语句,面向对象的查询语言,基本覆盖sq|语言所有能力;
2.完整的索引支持,支持查询计划;
3.使用内存映射存储引擎,把磁盘的IO操作转换成为内存的操作;查询效率更高