2020-09-25 22:54:30
20K以上面试题-MongoDB解答
1. MongoDB的优势有哪些?
MongoDB具有以下显著优势:
2. MongoDB如何执行事务/加锁?
MongoDB没有使用传统的锁或者复杂的带回滚的事务,其设计的宗旨是轻量、快速以及可预计的高性能。MongoDB可以类比成MySQL MyISAM的自动提交模式,通过精简对事务的支持,性能得到了提升,特别是在一个可能会穿过多个服务器的系统里。
3. MongoDB的更新操作会立刻fsync到磁盘吗?
不会。MongoDB的磁盘写操作默认是延迟执行的,写操作可能在两三秒(默认在60秒内)后到达磁盘。通过syncPeriodSecs启动参数,可以进行配置。例如,如果一秒内数据库收到一千个对一个对象递增的操作,MongoDB仅会刷新磁盘一次。
4. MongoDB有哪些索引类型?
MongoDB支持多种索引类型,包括:
5. MongoDB在A:{B,C}上建立索引,查询A:{B,C}和A:{C,B}都会使用索引吗?
不会。由于MongoDB索引使用B-tree树原理,只有在A:{B,C}顺序上建立的索引才会被使用。对于A:{C,B}的查询,MongoDB无法利用该索引,因此可能需要创建复合索引来覆盖不同的查询顺序。
6. 什么是MongoDB的聚合操作?
聚合操作能够处理数据记录并返回计算结果。它能够将多个文档中的值组合起来,对成组数据执行各种操作,返回单一的结果。MongoDB中的聚合操作应使用aggregate()方法。聚合管道(aggregation pipeline)提供了强大的数据处理能力,包括过滤、分组、排序、计算等。
7. MongoDB中的分片(sharding)是如何工作的?
MongoDB的分片是将数据水平切分到不同的物理节点上。当应用数据越来越大时,单台机器可能无法存储数据或满足可接受的读取写入吞吐量。利用分片技术可以添加更多的机器来应对数据量增加以及读写操作的要求。每个分片是一个分区数据的逻辑集合,可能由单一服务器或者集群组成。MongoDB会根据分片键将数据分布到不同的分片上,实现数据的水平扩展。
8. MongoDB的分片(Shard)和复制(replication)是怎样协同工作的?
MongoDB的分片和复制是协同工作的。每个分片可能是一个由多个节点组成的复制集,以确保数据的高可用性和容错性。当数据被写入一个分片时,该分片内的复制集会负责将数据复制到其他节点上。同时,MongoDB的分片机制会根据分片键将数据分布到不同的分片上,以实现数据的水平扩展。
9. MongoDB副本集实现高可用的原理是什么?
MongoDB使用了其复制(Replica Set)方案来实现自动容错机制,为高可用提供了基础。MongoDB支持两种复制模式:主从复制(Master/Slave)和复制集复制(Replica Set)。在生产环境中,推荐使用复制集复制模式。复制集由多个节点组成,包括一个主节点(Primary)和多个从节点(Secondary)。主节点负责处理所有的写操作,并将操作日志记录在oplog中。从节点复制主节点的oplog,并将oplog记录的操作应用于其数据集。如果主节点宕机,将从符合条件的从节点中选举出新的主节点,以确保数据的高可用性和服务的连续性。
10. 在哪些场景适合使用MongoDB?
MongoDB适用于以下场景:
请注意,如果业务中存在大量复杂的事务逻辑操作,则不建议使用MongoDB数据库。