MongoDB面试系列-02

2022年7月17日
大约 5 分钟

MongoDB面试系列-02

1. MongoDB 中必须调用 getLastError 来确保写操作生效吗?

MongoDB中不管有没有调用getLastError(又称为Safe Mode),服务器执行的操作都会一样。

而调用getLastError只是为了确认写操作是否成功提交,但是写操作的安全性和是否生效不是由这个决定的。

2. MongoDB 开发环境中有必要启动一个集群分片(sharded)吗?

为开发便捷起见,建议以非集群分片(unsharded)方式开始一个MongoDB环境,除非一台服务器不足以存放初始数据集。

从非集群分片升级到集群分片(sharding)是无缝的,所以在数据集还不是很大的时候没必要考虑集群分片(sharding)。

3. MongoDB 中分片(sharding)和复制(replication)是如何工作的?

每一个分片(shard)是一个分区数据的逻辑集合。

分片可能由单一服务器或者集群组成,推荐为每一个分片(shard)使用集群。

4. 数据在什么时候才会扩展到多个分片(shard)中?

MongoDB分片是基于区域(range)的,因此一个集合(collection)中的所有的对象都被存放到一个块(chunk)中。只有当存在多余一个块的时候,才会有多个分片获取数据的选项。目前,MongoDB每个默认块的大小是64Mb,所以需要至少64Mb空间才可以实施一个迁移。

5. 当试图更新一个正在被迁移的块(chunk)上的文档时会发生什么?

更新操作会立即发生在旧的分片(shard)上,然后更改才会在所有权转移(ownership transfers)前复制到新的分片上。

6. 一个分片(shard)停止或者很慢时,发起查询会怎样?

如果一个分片(shard)停止了,除非查询设置了“Partial”选项,否则查询会返回一个错误。

如果一个分片(shard)响应很慢,MongoDB则会等待它的响应。

7. MongoDB 中可以把 moveChunk 目录的旧文件删除吗?

MongoDB中可以把moveChunk目录的旧文件删除。

这些文件是在分片(shard)进行均衡操作(balancing)的时候产生的临时文件。一旦这些操作已经完成,相关的临时文件也应该被删除掉。但目前清理工作是需要手动的,所以需要谨慎考虑此操作,再释放这些文件的空间。

8. 如何查看 MongoDB 正在使用的链接?

db._adminCommand("connPoolStats");

9. MongoDB 中块移动操作(moveChunk)失败,需要手动清除部分转移的文档吗?

MongoDB中块移动操作(moveChunk)失败,不需要手动清除部分转移的文档。

移动操作是一致(consistent)并且是确定性的(deterministic);一次失败后,移动操作会不断重试;当完成后,数据只会出现在新的分片中(shard)。

10. MongoDB 在 A:{B,C} 上建立索引,查询 A:{B,C} 和 A:{C,B} 都会使用索引吗?

MongoDB在A:{B,C}上建立索引,只会在A:{B,C}上使用索引。

11. MongoDB 中当更新一个正在被迁移的块(Chunk)上的文档时会发生什么?

当更新一个正在被迁移的块(Chunk)上的文档时更新操作会立即发生在旧的块(Chunk)上,然后更改才会在所有权转移前复制到新的分片上。

12. MongoDB 支持存储过程吗?如何使用?

MongoDB支持存储过程,它是JavaScript写的,保存在db.system.js表中。

13. MongoDB 中如何理解 GridFS 机制,为什么使用 GridFS 存储文件?

GridFS是一种将大型文件存储在MongoDB中的文件规范。使用GridFS可以将大文件分隔成多个小文档存放,这样我们能够有效的保存大文档,而且解决了BSON对象有限制的问题。

14. MongoDB 是由哪种语言写的?

MongoDB用C++编写的,流行的开源数据库MySQL也是用C++开发的。C++于1983年发行,是一种使用广泛的计算机程序设计语言。它是一种痛用程序设计语言,支持多种编程模式。

15. MongoDB 中优势有哪些?

  • 面向文档的存储:以JSON格式的文档保存数据。

  • 任何属性都可以建立索引。

  • 复制以及高可扩展性。

  • 自动分片。

  • 丰富的查询功能。

  • 快速的即时更新。

  • 来自MongoDB的专业支持。

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

MongoDB中包括一个可以显示数据库中每个操作性能特点的数据库分析器。通过这个分析器你可以找到比预期慢的查询(或写操作);利用这一信息,比如,可以确定是否需要添加索引。

通俗的说分析器就是explain显示每次操作性能特点的数据库分析器。通过分析器可能查找比预期慢的操作。

17. MongoDB 中什么是文档?

文档由一组key value组成。文档是动态模式,这意味着同一集合里的文档不需要有相同的字段和结构。在关系型数据库中table中的每一条记录相当于MongoDB中的一个文档。

18. MongoDB 中什么是 mongod?

mongod是处理MongoDB系统的主要进程。它处理数据请求,管理数据存储,和执行后台管理操作。当我们运行mongod命令意味着正在启动MongoDB进程,并且在后台运行。

19. MongoDB 中 mongod 参数都有哪些?

  • 传递数据库存储路径,默认是“/data/db”

  • 端口号默认是“27017”

20. 什么是 mongo?

它是一个命令行工具,用于连接一个特定的mongod实例。当我们没有带参数运行mongo命令,它将使用默认的端口号和localhost连接。