开篇介绍
大家好,我是Java最全面试题库
的提裤姐,今天这篇是数据库面试题系列的第六篇,主要总结了MongoDB
相关的面试题;在后续,会沿着第一篇开篇的知识线路一直总结下去,做到日更!如果我能做到百日百更,希望你也可以跟着百日百刷,一百天养成一个好习惯。
什么是MongoDB?
MongoDB是一个文档数据库,提供好的性能,领先的非关系型数据库。采用BSON
存储文档数据。 BSON()是一种类json的一种二进制形式的存储格式,简称Binary JSON. 相对于json多了date类型和二进制数组。
关系型数据库和非关系性数据库的区别?
关系型数据库
优点:
- 数据之间有关系,进行数据的增删改查的时候是非常方便的
- 关系型数据库是有事务操作的,保证数据的完整性和一致性。
缺点:
- 因为数据和数据是有关系的,底层是运行了大量的算法,大量算法会降低系统的效率,会降低性能
- 面对海量数据的增删改查的时候会显的无能为力
- 海量数据对数据进行维护变得非常的无力
非关系型数据库
优点:
- 海量数据的增删改查是可以的
- 海量数据的维护和处理非常轻松
缺点:
- 数据和数据没有关系,他们之间就是单独存在的
- 非关系数据库没有关系,没有强大的事务关系,没有保证数据的完整性和安全性
什么是命令空间
mongodb存储bson对象在丛集(collection)中。数据库名字和丛集名字以句点连结起来叫做名字空间(namespace)。
一个集合命名空间又有多个数据域(extent),集合命名空间里存储着集合的元数据,比如集合名称,集合的 第一个数据域和最后一个数据域的位置等等。而一个数据域由若干条文档(document)组成,每个数据域都有一个 头部,记录着第一条文档和最后一条文档的为知,以及该数据域的一些元数据。extent之间,document之间通过 双向链表连接。 索引的存储数据结构是B树,索引命名空间存储着对B树的根节点的指针。
MongoDB如何执行事务?
Mongodb没有使用传统的锁或者复杂的带回滚的事务,因为他设计的宗旨是轻量级,快速以及可预计的高性能,可能把它类比成mysql myisam的自动提交模式
,通过精简对事务的支持,性能得到了提升,特别是在一个可能会穿过多个服务器的系统里。
mongodb同步刷新数据到磁盘吗?
不会,磁盘写操作默认是延迟执行的,写操作可能在量三秒后到达磁盘,例如,如果一秒内数据库收到一千个对一个对象递增的操作,仅刷新磁盘一次。
mongodb 使用索引要注意什么?
1、索引很有用,但是它也是有成本的;它占内存,让写入变慢
;
2、mongoDB通常在一次查询里使用一个索引,所以多个字段的查询或者排序需要复合索引才能更加高效;
3、复合索引的顺序非常重要
4、在生成环境构建索引往往开销很大,时间也不可以接受,在数据量庞大之前尽量进行查询优化和构建索引;
5、避免昂贵的查询,使用查询分析器记录那些开销很大的查询便于问题排查;
6、通过减少扫描文档数量来优化查询,使用explain
对开销大的查询进行分析并优化;
7、索引是用来查询小范围数据的
不适合使用索引的情况:
- 每次查询都需要返回大部分数据的文档,避免使用索引
- 写比读多
MongoDB支持哪些数据类型?
- String 字符串
- Integer 整型数值
- Double 双精度浮点值
- Boolean 布尔值
- Object 用于内嵌文档
- Object ID 对象 ID
- Arrays 用于将数组或列表或多个值存储为一个键
- Min/Max Keys 将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比
- Code 代码类型
- Regular Expression
mongoDB 主要使用在什么场景?
MongoDB 的应用已经渗透到各个领域,比如游戏、物流、电商、内容管理、社交、物联网、视频直播等,以下是几个实际的应用案例:
-
游戏场景
,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新 -
物流场景
,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以MongoDB 内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。 -
社交场景
,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能 -
物联网场景
,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析 -
视频直播
,使用 MongoDB 存储用户信息、礼物信息等
网友评论