MongoDB面试题及答案(19道必考题图文解析)

MongoDB面试题及答案(19道必考题图文解析)-mikechen

MongoDB在Java面试题中经常被问到,下面就给大家总结一份比较全面的MongoDB面试题及答案。

什么是MongoDB?

MongoDB是一个文档数据库,是一个非关系性数据库 , 具体高性能 、高扩展、文档性 ,是目前NoSQL中最热门的数据库。

 

什么叫文档数据库?

MongoDB提出的是文档的概念,是采用BSON存储文档数据,并不是我们理解的PDF 、或者Word文档。

BSON是类JSON作为其数据模型结构,比如:

{
    username:'mikechen',
    password:'123456'
}

使用这样的数据模型,使得MongoDB能在生产环境中提供高读写的能力,吞吐量较于mysql等SQL数据库大大增强。

 

什么是BSON?

BSON 是 Binary JSONopen in new window的简称,是 JSON 文档的二进制表示,支持将文档和数组嵌入到其他文档和数组中。

 

MongoDB 的存储结构是什么?

MongoDB 的存储结构区别于传统的关系型数据库,主要由如下三个单元组成:

1.文档Document

文档:是MongoDB 中最基本的单元,由 BSON 键值对(key-value)组成。

2.集合Collection

一个集合可以包含多个文档,类似于关系型数据库中的表Table。

3.数据库Database

一个数据库中可以包含多个集合,可以在 MongoDB 中创建多个数据库,类似于关系型数据库中的数据库(Database)。

文档、集合、数据库的关系

MongoDB 将数据记录存储为文档,更具体来说是BSON 文档,这些文档在集合中聚集在一起,数据库中存储一个或多个文档集合。

 

MongoDB的主要特性?

1.文档数据库

MongoDB没有SQL类型的数据库是正规化的等约束条件,从而使得MongoDB存储数据结构更灵活,存储速度更加快。

 

2.即时查询能力

MongoDB保留了关系型数据库即时查询的能力,保留了索引的能力,相比于同类型的NoSQL Redis 并没有上述的能力。

 

3.复制能力

MongoDB自身提供了副本集,将数据分布在多台机器上实现冗余,目的是可以提供自动故障转移,以及扩展读能力。

 

4.速度与持久性

MongoDB的驱动实现一个写入语义 fire and forget ,即通过驱动调用写入时,可以立即得到返回得到成功的结果,这样让写入的速度更加快。

MongoDB提供了Journaling日志的概念,实际上像mysql的bin log日志。

MongoDB当需要插入的时候,会先往日志里面写入记录,再完成实际的数据操作,这样如果出现停电或者进程突然中断,可以通过修复功能读取Journaling日志进行修复。

 

5.数据扩展

MongoDB使用分片技术,对数据进行扩展,MongoDB能自动分片,以及自动转移分片里面的数据块。

 

为什么要采用MongoDB?

  • 建模灵活;
  • 面向文档的存储:以 JSON 格式的文档保存数据;
  • 横向扩展简单;
  • 大数据量存储;
  • 适用于高并发;
  • 丰富的查询功能;

 

MongoDB的应用场景?

  • 大数据;
  • 内容管理系统;
  • 移动端Apps;
  • 数据管理;

 

MongoDB支持哪些数据类型?

  • String;
  • Integer;
  • Double;
  • Boolean;
  • Object、Object ID;
  • Arrays;
  • Min/Max Keys;
  • Datetime;
  • Code;
  • Regular Expression等;

 

MongoDB中的分片是什么?

在多台计算机上存储数据记录的过程称为分片,这是一种MongoDB快速满足数据增长的方法。

分片它是数据库,或搜索引擎中数据的水平分区,每个分区称为分片,或数据库分片。

 

MongoDB分片策略有哪些?

MongoDB 支持两种分片算法来满足不同的查询需求:基于范围的分片、基于 Hash 值的分片。

1.基于范围的分片

如下图所示:

MongoDB面试题及答案(19道必考题图文解析)-mikechen

MongoDB 按照分片键的值的范围,将数据拆分为不同的块Chunk,每个块包含了一段范围内的数据。

 

2.基于 Hash 值的分片

如下图所示:

MongoDB面试题及答案(19道必考题图文解析)-mikechen

MongoDB 计算单个字段的哈希值作为索引值,并以哈希值的范围,将数据拆分为不同的块Chunk。

 

什么是分片集群?

分片集群是 MongoDB 的分布式版本,分片集群数据被均衡的分布在不同分片中。

分片集群的作用:不仅大幅提升了整个集群的数据容量上限,也将读写的压力分散到不同分片,以解决副本集性能瓶颈的难题。

 

分片集群组成?

MongoDB 的分片集群由如下三个部分组成:

MongoDB面试题及答案(19道必考题图文解析)-mikechen

Config Servers:配置服务器,负责存储集群的各种元数据和配置,比如:分片地址、Chunks 等;

Mongos:路由服务,不存具体数据,从 Config 获取集群配置讲请求转发到特定的分片;

Shard:每个分片是整体数据的一部分子集;

 

分析器在MongoDB中的作用是什么?

MongoDB可以通过分析器找到比预期慢的查询,或者写的操作等,用这一信息可以确定是否需要添加索引,从而提升查询效率。

 

在MongoDb中什么是索引?

和关系型数据库类似,MongoDB 中也有索引,索引的目的主要是用来提高查询效率。

如果没有索引的话,没有索引的MongoDB将扫描整个集合中的所有文档 ,这种扫描效率很低。

虽然索引可以显著缩短查询时间,但是使用索引和维护索引也是有代价的,在执行写入操作时,除了要更新文档之外,还必须更新索引。

 

MongoDB 支持哪些类型的索引?

MongoDB 支持多种类型的索引,主要包含如下7种索引:

  1. 单字段索引: 建立在单个字段上的索引;
  2. 复合索引: 建立在多个字段上的索引,也可以称之为组合索引或者联合索引;
  3. 多键索引 :MongoDB 的一个字段可能是数组,在对这种字段创建索引时就是多键索引;
  4. 哈希索引 :按数据的哈希值索引,就是哈希索引,主要用在哈希分片集群上;
  5. 文本索引: 支持对字符串内容的文本搜索查询,文本索引可以包含任何值为字符串,或字符串元素数组的字段;
  6. 地理位置索引: 基于经纬度的索引,适合 2D 和 3D 的位置查询;
  7. 唯一索引 :确保索引字段不会存储重复值;

 

什么是 TTL 索引?

TTL 索引提供了一个过期机制,允许为每一个文档,设置一个过期时间 expireAfterSeconds ,当一个文档达到预设的过期时间之后就会被删除。

数据过期对于某些类型的信息很有用,比如:日志等,这些信息只需要在数据库中保存有限的时间。

 

什么是复制集群?

MongoDB 的复制集群,又称为副本集群,是一组维护相同数据集合的 进程。

通常来说,一个复制集群包含 1 个主节点,多个从节点,以及零个或 1 个仲裁节点。

如下图所示:

MongoDB面试题及答案(19道必考题图文解析)-mikechen

主节点机负责整个复制集群的写,从节点可以进行读操作,主节点与备节点之间是通过 oplog(操作日志) 来同步数据。

 

SQL 与 MongoDB 常见术语对比?

SQL MongoDB
表(Table) 集合(Collection)
行(Row) 文档(Document)
列(Col) 字段(Field)
主键(Primary Key) 对象 ID(Objectid)
索引(Index) 索引(Index)
嵌套表(Embeded Table) 嵌入式文档(Embeded Document)
数组(Array) 数组(Array)

MongoDB与MySQL的区别?

详细的区别,如下图所示:

MongoDB面试题及答案(19道必考题图文解析)-mikechen
以上就是19道经常被问到的MongoDB面试题及答案,希望对你有所帮助!

作者简介

陈睿|mikechen,10年+大厂架构经验,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读mikechen更多原创技术文章👇

阿里架构 |双11秒杀 |微服务 |云原生 |Docker |K8S |Kafka |分布式架构 |高并发架构

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法