95道MongoDB⾯试题含答案
1、mongodb是什么?
MongoDB 是由 C++语⾔编写的,是⼀个基于分布式⽂件存储的开源数据库系统。在⾼负载的情况下,添加更多的节点,可以保证服务器性能。 MongoDB 旨在给 WEB 应⽤提供可扩展的⾼性能数据存储解决⽅案。
MongoDB 将数据存储给⼀个⽂档,数据结构由键值(key=>value)对组成。 MongoDB ⽂档类似于 JSON 对象。字段值可以包含其他⽂档,数组及⽂档数组。
2、mongodb有哪些特点?
(1)MongoDB 是⼀个⾯向⽂档存储的数据库,操作起来⽐较简单和容易。
(2)你可以在 MongoDB 记录中设置任何属性的索引 (如: FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。
(3)你可以通过本地或者⽹络创建数据镜像,这使得 MongoDB 有更强的扩展性。
greatwall(4)如果负载的增加(需要更多的存储空间和更强的处理能⼒),它可以分布在计算机⽹络中的其他节点上这就是所谓的分⽚。
(5)Mongo ⽀持丰富的查询表达式。查询指令使⽤ JSON 形式的标记,可轻易查询⽂档中内嵌的对象及数组。
(6)MongoDb 使⽤ update()命令可以实现替换完成的⽂档(数据)或者⼀些指定的数据字段。
(7)Mongodb 中的 Map/reduce 主要是⽤来对数据进⾏批量处理和聚合操作。
(8)Map 和 Reduce。 Map 函数调⽤ emit(key,value)遍历集合中所有的记录,将 key 与 value 传给 Reduce 函数进⾏处理。
(9)Map 函数和 Reduce 函数是使⽤ Javascript 编写的,并可以通过 db.runCommand 或 mapreduce 命令来执⾏MapReduce 操作。
(10)GridFS 是 MongoDB 中的⼀个内置功能,可以⽤于存放⼤量⼩⽂件。
(11) MongoDB 允许在服务端执⾏脚本,可以⽤ Javascript 编写某个函数,直接在服务端执⾏,也可以把函数的定义存储在服务端,下次直接调⽤即可。
3、你说的NoSQL数据库是什么意思?NoSQL与RDBMS直接有什么区别?为什么要使⽤和不使⽤NoSQL数据库?说⼀说NoSQL数据库的⼏个优点?
NoSQL是⾮关系型数据库,NoSQL = Not Only SQL。
关系型数据库采⽤的结构化的数据,NoSQL采⽤的是键值对的⽅式存储数据。
在处理⾮结构化/半结构化的⼤数据时;在⽔平⽅向上进⾏扩展时;随时应对动态增加的数据项时可以优先考虑使⽤NoSQL数据库。
再考虑数据库的成熟度;⽀持;分析和商业智能;管理及专业性等问题时,应优先考虑关系型数据库。
4、NoSQL数据库有哪些类型?
NoSQL数据库的类型
例如:MongoDB, Cassandra, CouchDB, Hypertable, Redis, Riak, HBASE, Memcache
5、MySQL与MongoDB之间最基本的差别是什么?
MySQL和MongoDB两者都是免费开源的数据库。MySQL和MongoDB有许多基本差别包括数据的表⽰(data reprentation),查询,关系,事务,schema的设计和定义,标准化(normalization),速度和性能。
通过⽐较MySQL和MongoDB,实际上我们是在⽐较关系型和⾮关系型数据库,即数据存储结构不同。
6、你怎么⽐较MongoDB、CouchDB及CouchBa?
MongoDB和CouchDB都是⾯向⽂档的数据库。MongoDB和CouchDB都是开源NoSQL数据库的最典型代表。除了都以⽂档形式存储外它
们没有其他的共同点。MongoDB和CouchDB在数据模型实现、接⼝、对象存储以及复制⽅法等⽅⾯有很多不同。
7、MongoDB成为最好NoSQL数据库的原因是什么?
以下特点使得MongoDB成为最好的NoSQL数据库:
⾯向⽂件的
⾼性能
⾼可⽤性
易扩展性
丰富的查询语⾔
8、journal回放在条⽬(entry)不完整时(⽐如恰巧有⼀个中途故障了)会遇到问题吗?
每个journal (group)的写操作都是⼀致的,除⾮它是完整的否则在恢复过程中它不会回放。
9、分析器在MongoDB中的作⽤是什么?
MongoDB中包括了⼀个可以显⽰数据库中每个操作性能特点的数据库分析器。通过这个分析器你可以找到⽐预期慢的查询(或写操作);利⽤这⼀信息,⽐如,可以确定是否需要添加索引。
10、名字空间(namespace)是什么?
MongoDB存储BSON对象在丛集(collection)中。数据库名字和丛集名字以句点连结起来叫做名字空间(namespace)。
11、如果⽤户移除对象的属性,该属性是否从存储层中删除?
是的,⽤户移除属性然后对象会重新保存(re-save())。
12、能否使⽤⽇志特征进⾏安全备份?
是的。
13、允许空值null吗?
pdp是什么意思对于对象成员⽽⾔,是的。然⽽⽤户不能够添加空值(null)到数据库丛集(collection)因为空值不是对象。然⽽⽤户能够添加空对象{}。
14、更新操作⽴刻fsync到磁盘?
不会,磁盘写操作默认是延迟执⾏的。写操作可能在两三秒(默认在60秒内)后到达磁盘。例如,如果⼀秒内数据库收到⼀千个对⼀个对象递增的操作,仅刷新磁盘⼀次。(注意,尽管fsync选项在命令⾏和经过getLastError_old是有效的)
15、如何执⾏事务/加锁?
MongoDB没有使⽤传统的锁或者复杂的带回滚的事务,因为它设计的宗旨是轻量,快速以及可预计的⾼性能。可以把它类⽐成MySQLMylSAM的⾃动提交模式。通过精简对事务的⽀持,性能得到了提升,特别是在⼀个可能会穿过多个服务器的系统⾥。
16、为什么我的数据⽂件如此庞⼤?
MongoDB会积极的预分配预留空间来防⽌⽂件系统碎⽚。
17、启⽤备份故障恢复需要多久?
从备份数据库声明主数据库宕机到选出⼀个备份数据库作为新的主数据库将花费10到30秒时间。这期间在主数据库上的操作将会失败--包括
写⼊和强⼀致性读取(strong consistent read)操作。然⽽,你还能在第⼆数据库上执⾏最终⼀致性查询(eventually consistent query)(在slaveOk模式下),即使在这段时间⾥。
18、什么是master或primary?
它是当前备份集群(replica t)中负责处理所有写⼊操作的主要节点/成员。在⼀个备份集群中,当失效备援(failover)事件发⽣时,⼀个另外的成员会变成primary。
19、什么是condary或slave?
Seconday从当前的primary上复制相应的操作。它是通过跟踪复制oplog(local.oplog.rs)做到的。
20、我必须调⽤getLastError来确保写操作⽣效了么?
不⽤。不管你有没有调⽤getLastError(⼜叫"Safe Mode")服务器做的操作都⼀样。调⽤getLastError只是为了确认写操作成功提交了。当然,你经常想得到确认,但是写操作的安全性和是否⽣效不是由这个决定的。
21、我应该启动⼀个集群分⽚(sharded)还是⼀个⾮集群分⽚的 MongoDB 环境?
为开发便捷起见,我们建议以⾮集群分⽚(unsharded)⽅式开始⼀个 MongoDB 环境,除⾮⼀台服务器不⾜以存放你的初始数据集。从⾮集群分⽚升级到集群分⽚(sharding)是⽆缝的,所以在你的数据集还不是很⼤的时候没必要考虑集群分⽚(sharding)。
22、分⽚(sharding)和复制(replication)是怎样⼯作的?
每⼀个分⽚(shard)是⼀个分区数据的逻辑集合。分⽚可能由单⼀服务器或者集群组成,我们推荐<typo id="typo-3375" data-origin="为" ignoretag="true">为</typo>每⼀个分⽚(shard)使⽤集群。
23、数据在什么时候才会扩展到多个分⽚(shard)⾥?
MongoDB 分⽚是基于区域(range)的。所以⼀个集合(collection)中的所有的对象都被存放到⼀个块(chunk)中。只有当存在多余⼀个块的时候,才会有多个分⽚获取数据的选项。现在,每个默认块的⼤⼩是 64Mb,所以你需要⾄少 64 Mb 空间才可以实施⼀个迁移。
24、当我试图更新⼀个正在被迁移的块(chunk)上的⽂档时会发⽣什么?
更新操作会⽴即发⽣在旧的分⽚(shard)上,然后更改才会在所有权转移(ownership transfers)前复制到新的分⽚上。
25、如果在⼀个分⽚(shard)停⽌或者很慢的时候,我发起⼀个查询会怎样?
如果⼀个分⽚(shard)停⽌了,除⾮查询设置了“Partial”选项,否则查询会返回⼀个错误。如果⼀个分⽚(shard)响应很
慢,MongoDB则会等待它的响应。
26、我可以把moveChunk⽬录⾥的旧⽂件删除吗?
没问题,这些⽂件是在分⽚(shard)进⾏均衡操作(balancing)的时候产⽣的临时⽂件。⼀旦这些操作已经完成,相关的临时⽂件也应该被删除掉。但⽬前清理⼯作是需要⼿动的,所以请⼩⼼地考虑再释放这些⽂件的空间。
27、我怎么查看 Mongo 正在使⽤的链接?
db._adminCommand("connPoolStats");
28、如果块移动操作(moveChunk)失败了,我需要⼿动清除部分转移的⽂档吗?
不需要,移动操作是⼀致(consistent)并且是确定性的(deterministic);⼀次失败后,移动操作会不断重试;当完成后,数据只会出现在新的分⽚⾥(shard)。
29、如果我在使⽤复制技术(replication),可以⼀部分使⽤⽇志(journaling)⽽其他部分则不使⽤吗?
可以。
30、当更新⼀个正在被迁移的块(Chunk)上的⽂档时会发⽣什么?
更新操作会⽴即发⽣在旧的块(Chunk)上,然后更改才会在所有权转移前复制到新的分⽚上。
31、MongoDB在A:{B,C}上建⽴索引,查询A:{B,C}和A:{C,B}都会使⽤索引吗?
不会,只会在A:{B,C}上使⽤索引。
32、如果⼀个分⽚(Shard)停⽌或很慢的时候,发起⼀个查询会怎样?feedbooks
如果⼀个分⽚停⽌了,除⾮查询设置了“Partial”选项,否则查询会返回⼀个错误。如果⼀个分⽚响应很慢,MongoDB会等待它的响应。
33、MongoDB⽀持存储过程吗?如果⽀持的话,怎么⽤?
MongoDB⽀持存储过程,它是javascript写的,保存在db.system.js表中。
34、如何理解MongoDB中的GridFS机制,MongoDB为何使⽤GridFS来存储⽂件?
GridFS是⼀种将⼤型⽂件存储在MongoDB中的⽂件规范。使⽤GridFS可以将⼤⽂件分隔成多个⼩⽂档存放,这样我们能够有效的保存⼤⽂档,⽽且解决了BSON对象有限制的问题。
35、什么是NoSQL数据库?NoSQL和RDBMS有什么区别?在哪些情况下使⽤和不使⽤NoSQL数据
库?
NoSQL是⾮关系型数据库,NoSQL = Not Only SQL。love is blue
关系型数据库采⽤的结构化的数据,NoSQL采⽤的是键值对的⽅式存储数据。
在处理⾮结构化/半结构化的⼤数据时;在⽔平⽅向上进⾏扩展时;随时应对动态增加的数据项时可以优先考虑使⽤NoSQL数据库。
再考虑数据库的成熟度;⽀持;分析和商业智能;管理及专业性等问题时,应优先考虑关系型数据库。
36、MongoDB⽀持存储过程吗?如果⽀持的话,怎么⽤?
MongoDB⽀持存储过程,它是javascript写的,保存在db.system.js表中。
37、如何理解MongoDB中的GridFS机制,MongoDB为何使⽤GridFS来存储⽂件?
GridFS是⼀种将⼤型⽂件存储在MongoDB中的⽂件规范。使⽤GridFS可以将⼤⽂件分隔成多个⼩⽂档存放,这样我们能够有效的保存⼤⽂档,⽽且解决了BSON对象有限制的问题。
38、为什么MongoDB的数据⽂件很⼤?
MongoDB采⽤的预分配空间的⽅式来防⽌⽂件碎⽚。
39、当更新⼀个正在被迁移的块(Chunk)上的⽂档时会发⽣什么?商务英语是学什么
更新操作会⽴即发⽣在旧的块(Chunk)上,然后更改才会在所有权转移前复制到新的分⽚上。
40、MongoDB在A:{B,C}上建⽴索引,查询A:{B,C}和A:{C,B}都会使⽤索引吗?
不会,只会在A:{B,C}上使⽤索引。
41、如果⼀个分⽚(Shard)停⽌或很慢的时候,发起⼀个查询会怎样?
如果⼀个分⽚停⽌了,除⾮查询设置了“Partial”选项,否则查询会返回⼀个错误。如果⼀个分⽚响应很慢,MongoDB会等待它的响应。
42、分析器在MongoDB中的作⽤是什么?
分析器就是explain 显⽰每次操作性能特点的数据库分析器。通过分析器可能查找⽐预期慢的操作
43、如果⽤户移除对象的属性,该属性是否从存储层中删除?
是的,⽤户移除属性然后对象会重新保存(re-save())。
44、能否使⽤⽇志特征进⾏安全备份?
是的
45、更新操作⽴刻fsync到磁盘?
韩彩英怀孕⼀般磁盘的写操作都是延迟执⾏的
46、如何执⾏事务/加锁?
因为mongodb设计就是轻量⾼性能,所以没有传统的锁和复杂的事务的回滚
47、什么是master或primary?
当前备份集群负责所有的写⼊操作的主要节点,在集群中,当主节点(master)失效,另⼀个成员会变为master
48、getLastError的作⽤
调⽤getLastError 可以确认当前的写操作是否成功的提交
49、分⽚(sharding)和复制(replication)是怎样⼯作的?
分⽚可能是单⼀的服务器或者集群组成,推荐使⽤集群
50、数据在什么时候才会扩展到多个分⽚(shard)⾥?
mongodb分⽚是基于区域的,所以⼀个集合的所有对象都放置在同⼀个块中,只有当存在多余⼀个块的时候,才会有多个分⽚获取数据的选项
51、当我试图更新⼀个正在被迁移的块(chunk)上的⽂档时会发⽣什么?
会⽴即更新旧的分⽚,然后更改才会在所有权转移前复制到新的分⽚上八年级辅导英语
52、我怎么查看 Mongo 正在使⽤的链接?
db._adminCommand("connPoolStats");
53、mongodb的结构介绍
数据库中存储的对象设计bson,⼀种类似json的⼆进制⽂件,由键值对组成
54、数据库的整体结构
chanel是什么意思键值对–》⽂档–》集合–》数据库
55、MongoDB是由哪种语⾔写的
MongoDB⽤c++编写的,流⾏的开源数据库MySQL也是⽤C++开发的。C++1983年发⾏是⼀种使⽤⼴泛的计算机程序设计语⾔。它是⼀种通⽤程序设计语⾔,⽀持多种编程模式。
56、MongoDB的优势有哪些
⾯向⽂档的存储:以 JSON 格式的⽂档保存数据。
任何属性都可以建⽴索引。
复制以及⾼可扩展性。
⾃动分⽚。
steve martin丰富的查询功能。
快速的即时更新。
gentalmen来⾃ MongoDB 的专业⽀持。
57、什么是集合
集合就是⼀组 MongoDB ⽂档。它相当于关系型数据库(RDBMS)中的表这种概念。集合位于单独的⼀个数据库中。⼀个集合内的多个⽂档可以有多个不同的字段。⼀般来说,集合中的⽂档都有着相同或相关的⽬的。
58、什么是⽂档
⽂档由⼀组key value组成。⽂档是动态模式,这意味着同⼀集合⾥的⽂档不需要有相同的字段和结构。在关系型数据库中table 中的每⼀条记录相当于MongoDB中的⼀个⽂档。
59、什么是”mongod“
mongod是处理MongoDB系统的主要进程。它处理数据请求,管理数据存储,和执⾏后台管理操作。当我们运⾏mongod命令意味着正在启动MongoDB进程,并且在后台运⾏。
60、"mongod"参数有什么
传递数据库存储路径,默认是"/data/db"
端⼝号默认是 "27017"