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连接。

相关推荐
芝士爱知识a33 分钟前
AI 模拟面试怎么做:智蛙公考智能体多轮对话 + 实时追问的工程实现
面试·职场和发展
wei_shuo1 小时前
KES 扩展与插件开发实战:自定义函数、触发器与第三方插件集成
数据库·kes
风中芦苇啊2 小时前
从直接生成到受控配置:新一代图表Agent的SQL安全生成范式
数据库·sql·安全
帅次2 小时前
Android 高级工程师面试:Java 基础知识 近1年高频追问 22 题
android·java·面试
吴声子夜歌2 小时前
SQL进阶——窗口函数
数据库·sql
周杰伦的稻香2 小时前
MySQL8.0+中引入的SET_USER_ID权限迭代SUPER权限指定 DEFINER
数据库·mysql
动恰客流统计2 小时前
客流统计如何结合AI分析?从传统计数到智能决策的技术升级路径
数据库·人工智能·边缘计算
宠友信息3 小时前
多端数据互通场景下Spring Boot仿小红书源码结构设计
数据库·spring boot·redis·缓存·架构
风曦Kisaki3 小时前
#Linux数据库管理Day06:主从同步与MaxScale读写分离
linux·运维·数据库
影寂ldy3 小时前
C# try-catch 异常处理全套笔记
服务器·数据库·c#