云服务器网:购买云服务器和VPS必上的网站!

28个MongoDB经典面试题详解

MongoDB是目前最好的面向文档的不要钱开源NoSQL数据库。
如果你正准备参加MongoDB NoSQL数据库的技术面试,你最好看看下面的MongoDB NoSQL面试问答。
这些MongoDB NoSQL面试问答涵盖了NoSQL数据库基本的概念,复制(R

MongoDB是目前最好的面向文档的不要钱开源NoSQL数据库

如果你正准备参加MongoDB NoSQL数据库的技术面试,你最好看看下面的MongoDB NoSQL面试问答。

这些MongoDB NoSQL面试问答涵盖了NoSQL数据库基本的概念,复制(Replication),分片(Sharding),事务和锁,跟踪分析工具(Profiler),Nuances和日志等特性。

让我们看看下面的这些MongoDB NoSQL数据库的面试问答吧:

1. 你说的NoSQL数据库是甚么意思?NoSQL与RDBMS直接有甚么区分?为何要使用和不使用NoSQL数据库?说一说NoSQL数据库的几个优点?

NoSQL是非关系型数据库,NoSQL = Not Only SQL。

关系型数据库采取的结构化的数据,NoSQL采取的是键值对的方式存储数据。

在处理非结构化/半结构化的大数据时;在水平方向上进行扩大时;随时应对动态增加的数据项时可以优先斟酌使用NoSQL数据库。

在斟酌数据库的成熟度;支持;分析和商业智能;管理及专业性等问题时,应优先斟酌关系型数据库。

2. NoSQL数据库有哪几种类型?

NoSQL数据库的类型

例如:MongoDB, Cassandra, CouchDB, Hypertable, Redis, Riak, Neo4j, HBASE, Couchbase, MemcacheDB, RevenDB and Voldemort are the examples of NoSQL databases.详细浏览。

3. MySQL与MongoDB之间最基本的差别是甚么?

MySQL和MongoDB二者都是不要钱开源的数据库。MySQL和MongoDB有许多基本差别包括数据的表示(data representation),查询,关系,事务,schema的设计和定义,标准化(normalization),速度和性能。

通过比较MySQL和MongoDB,实际上我们是在比较关系型和非关系型数据库,即数据存储结构区别。详细浏览

4. 你怎样比较MongoDB、CouchDB及CouchBase?

MongoDB和CouchDB都是面向文档的数据库。MongoDB和CouchDB都是开源NoSQL数据库的最典型代表。 除都以文档情势存储外它们没有其他的共同点。MongoDB和CouchDB在数据模型实现、接口、对象存储和复制方法等方面有很多区别。

细节可以参见下面的链接:

MongDB vs CouchDB

CouchDB vs CouchBase

5. MongoDB成为最好NoSQL数据库的缘由是甚么?

以下特点使得MongoDB成为最好的NoSQL数据库:

  • 面向文件的
  • 高性能
  • 高可用性
  • 易扩大性
  • 丰富的查询语言

6.32位系统上有甚么细微差别?

journaling会激活额外的内存映照文件。这将进一步抑制32位版本上的数据库大小。因此,现在journaling在32位系统上默许是禁用的。

7. journal回放在条目(entry)不完全时(比如恰巧有一个中途故障了)会遇到问题吗?

每一个journal (group)的写操作都是一致的,除非它是完全的否则在恢复进程中它不会回放。

8. 分析器在MongoDB中的作用是甚么?

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

9. 名字空间(namespace)是甚么?

MongoDB存储BSON对象在猬集(collection)中。数据库名字和猬集名字以句点连结起来叫做名字空间(namespace)。

10. 如果用户移除对象的属性,该属性会不会从存储层中删除?

是的,用户移除属性然后对象会重新保存(re-save())。

11. 能否使用日志特点进行安全备份?

是的。

12. 允许空值null吗?

对对象成员而言,是的。但是用户不能够添加空值(null)到数据库猬集(collection)由于空值不是对象。但是用户能够添加空对象{}。

13. 更新操作立刻fsync到磁盘?

不会,磁盘写操作默许是延迟履行的。写操作可能在两三秒(默许在60秒内)后到达磁盘。例如,如果一秒内数据库收到一千个对一个对象递增的操作,仅刷新磁盘一次。(注意,虽然fsync选项在命令行和经过getLastError_old是有效的)(译者:或许是坑人的面试题??)。

14. 如何履行事务/加锁?

MongoDB没有使用传统的锁或复杂的带回滚的事务,由于它设计的主旨是轻量,快速和可预计的高性能。可以把它类比成MySQL MylSAM的自动提交模式。通过精简对事务的支持,性能得到了提升,特别是在一个可能会穿过量个服务器的系统里。

15. 为何我的数据文件如此庞大?

MongoDB会积极的预分配预留空间来避免文件系统碎片。

16. 启用备份故障恢复需要多久?

从备份数据库声明主数据库宕机到选出一个备份数据库作为新的主数据库将花费10到30秒时间。这期间在主数据库上的操作将会失败–包括写入和强一致性读取(strong consistent read)操作。但是,你还可以在第二数据库上履行终究一致性查询(eventually consistent query)(在slaveOk模式下),即便在这段时间里。

17. 甚么是master或primary?

它是当前备份集群(replica set)中负责处理所有写入操作的主要节点/成员。在一个备份集群中,当失效备援(failover)事件产生时,一个另外的成员会变成primary。

18. 甚么是secondary或slave?

Seconday从当前的primary上复制相应的操作。它是通过跟踪复制oplog(local.oplog.rs)做到的。

19. 我一定要调用getLastError来确保写操作生效了么?

不用。不管你有无调用getLastError(又叫”Safe Mode”)服务器做的操作都一样。调用getLastError只是为了确认写操作成功提交了。固然,你常常想得到确认,但是写操作的安全性和会不会生效不是由这个决定的。

20. 我应当启动一个集群分片(sharded)或者一个非集群分片的 MongoDB 环境?

为开发便捷起见,我们建议以非集群分片(unsharded)方式开始一个 MongoDB 环境,除非一台服务器不足以寄存你的初始数据集。从非集群分片升级到集群分片(sharding)是无缝的,所以在你的数据集还不是很大的时候没必要斟酌集群分片(sharding)。

21. 分片(sharding)和复制(replication)是怎样工作的?

每个分片(shard)是一个分区数据的逻辑集合。分片可能由单一服务器或集群组成,我们推荐为每个分片(shard)使用集群。

22. 数据在甚么时候才会扩大到多个分片(shard)里?

MongoDB 分片是基于区域(range)的。所以一个集合(collection)中的所有的对象都被寄存到一个块(chunk)中。只有当存在过剩一个块的时候,才会有多个分片获得数据的选项。现在,每一个默许块的大小是 64Mb,所以你需要最少 64 Mb 空间才可以实行一个迁移。

23. 当我试图更新一个正在被迁移的块(chunk)上的文档时会产生甚么?

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

24. 如果在一个分片(shard)停止或很慢的时候,我发起一个查询会怎样?

如果一个分片(shard)停止了,除非查询设置了“Partial”选项,否则查询会返回一个毛病。如果一个分片(shard)响应很慢,MongoDB则会等待它的响应。

25. 我可以把moveChunk目录里的旧文件删除吗?

没问题,这些文件是在分片(shard)进行均衡操作(balancing)的时候产生的临时文件。一旦这些操作已完成,相关的临时文件也应当被删除掉。但目前清算工作是需要手动的,所以请谨慎地斟酌再释放这些文件的空间。

26. 我怎样查看 Mongo 正在使用的链接?

db._adminCommand(“connPoolStats”);

27. 如果块移动操作(moveChunk)失败了,我需要手动清除部份转移的文档吗?

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

28. 如果我在使用复制技术(replication),可以一部份使用日志(journaling)而其他部份则不使用吗?

可以。

29.当更新一个正在被迁移的块(Chunk)上的文档时会产生甚么?

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

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

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

31.如果一个分片(Shard)停止或很慢的时候,发起一个查询会怎样?

如果一个分片停止了,除非查询设置了“Partial”选项,否则查询会返回一个毛病。如果一个分片响应很慢,MongoDB会等待它的响应。

32. MongoDB支持存储进程吗?如果支持的话,怎样用?

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

33.如何理解MongoDB中的GridFS机制,MongoDB为啥使用GridFS来存储文件?

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

更多关于MongoDB经典面试题请查看下面的相关链接

本文来源:https://www.yuntue.com/post/234935.html | 云服务器网,转载请注明出处!

关于作者: yuntue

云服务器(www.yuntue.com)是一家专门做阿里云服务器代金券、腾讯云服务器优惠券的网站,这里你可以找到阿里云服务器腾讯云服务器等国内主流云服务器优惠价格,以及海外云服务器、vps主机等优惠信息,我们会为你提供性价比最高的云服务器和域名、数据库、CDN、免费邮箱等企业常用互联网资源。

为您推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注