持续输出面试题之MongoDB篇

开篇介绍

大家好,我是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 存储用户信息、礼物信息等

你可能感兴趣的:(MongoDB)