螺竹编程
发布于 2024-05-19 / 4 阅读
0

Java面试题/数据库与缓存:MongoDB面试题

什么是MongoDB?

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

  • 它支持的数据结构非常松散,是类似 jSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

  • Mongo 最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

什么是文档?MongoDB中的文档有什么特点?

文档是MongoDB中的基本数据单元,类似于关系型数据库中的行。每个文档都是一个由键值对组成的BSON(Binary JSON)对象。MongoDB中的文档不需要事先定义表结构,可以灵活地添加、删除和修改字段。

MongoDB中的索引有哪些类型?

MongoDB中的索引包括单键索引、复合索引、全文索引、地理空间索引等。其中,单键索引是最基本的索引类型,复合索引可以对多个字段进行索引,全文索引可以在文本数据上进行高效的搜索,地理空间索引可以在地理坐标上进行高效的搜索。

如何在MongoDB中进行数据备份和恢复?

MongoDB提供了mongodump和mongorestore命令来进行数据备份和恢复。mongodump可以将指定的数据库备份到文件中,mongorestore可以将备份文件中的数据恢复到指定的数据库中。

什么是MongoDB的聚合操作?

聚合操作,能够处理数据记录并返回计算结果。聚合操作能将多个文档中的值组合起来,对成组数据执行各种操作,返回单一的结果。它相当于 SQL 中的 COUUNT(*) 组合 GROUP BY 。

对于 MongoDB 中的聚合操作,应该使用 aggregate 方法。

MongoDB如何实现高可用?

和 MySQL 一样,MongoDB 也提供了其复制方案,为实现高可用提供了基础。目前,MongoDB 支持两种复制模式:

  • Master / Slave ,主从复制,角色包括 Master 和 Slave 。

  • Replica Set ,复制集复制,角色包括 Primary 和 Secondary 以及 Arbiter 。

MongoDB 如何实现分片?

MongoDB 分片,是将数据水平切分到不同的物理节点。当应用数据越来越大的时候,数据量也会越来越大。当数据量增长时,单台机器有可能无法存储数据或可接受的读取写入吞吐量。利用分片技术可以添加更多的机器来应对数据量增加以及读写操作的要求。我们可以将 MongoDB 分片理解成内置的分库分表功能。

MongoDB 为什么选择 B-Tree 索引?

  • B+Tree 内节点不存储数据,所有 data 存储在叶节点导致查询时间复杂度固定为 log(n) 。

  • B-Tree 查询时间复杂度不固定,与 key 在树中的位置有关,最好为O(1) 。

我们知道,尽可能少的磁盘 IO 是提高性能的有效手段。MongoDB 是聚合型数据库,而 B-Tree 恰好 key 和 data 域聚合在一起。