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