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 正在使用的链接?

sql 复制代码
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连接。

相关推荐
❥ღ Komo·34 分钟前
PHP数据库操作全攻略
数据库·oracle
程序新视界1 小时前
MySQL的整体架构及功能详解
数据库·后端·mysql
绝无仅有1 小时前
猿辅导Java面试真实经历与深度总结(二)
后端·面试·github
ANYOLY1 小时前
MySQL索引指南
数据库·mysql
绝无仅有1 小时前
猿辅导Java面试真实经历与深度总结(一)
后端·面试·github
怪兽20142 小时前
Redis过期键的删除策略有哪些?
java·数据库·redis·缓存·面试
骑士雄师3 小时前
使用 IntelliJ IDEA 结合 DBeaver 连接 MySQL 数据库并实现数据增删查改的详细步骤:
数据库·mysql·intellij-idea
呼哧呼哧.8 小时前
Spring的核心思想与注解
数据库·sql·spring
21号 19 小时前
9.Redis 集群(重在理解)
数据库·redis·算法
爬山算法9 小时前
Redis(73)如何处理Redis分布式锁的死锁问题?
数据库·redis·分布式