赶紧收藏起MongoDB面试题轻松面对BAT灵魂式的拷问(下)

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: MongoDB是基于分布式文件存储的数据库,由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案,且MongodDB是一个介于关系数据库与非关系数据库之间的产品,是非关系型数据库中功能最丰富,最像关系数据库。

MongoDB分片


13Q:monogodb 中的分片sharding


分片sharding是将数据水平切分到不同的物理节点。当应用数据越来越大的时候,数据量也会越来越大。当数据量增长 时,单台机器有可能无法存储数据或可接受的读取写入吞吐量。利用分片技术可以添加更多的机器来应对数据量增加 以及读写操作的要求。


14Q:分片(Shard)和复制(replication)是怎样工作的?


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


15Q:如果块移动操作(moveChunk)失败了,我需要手动清除部分转移的文档吗?


不需要,移动操作是一致(consistent)并且是确定性的(deterministic)。


  • 一次失败后,移动操作会不断重试。
  • 当完成后,数据只会出现在新的分片里(shard)


16Q:数据在什么时候才会扩展到多个分片(Shard)里?


MongoDB 分片是基于区域(range)的。所以一个集合(collection)中的所有的对象都被存放到一个块(chunk)中,默认块的大小是 64Mb。当数据容量超过64 Mb,才有可能实施一个迁移,只有当存在不止一个块的时候,才会有多个分片获取数据的选项。


17Q:更新一个正在被迁移的块(Chunk)上的文档时会发生什么?


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


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


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


MongoDB复制集


19Q:MongoDB副本集实现高可用的原理


MongoDB 使用了其复制(Replica Set)方案,实现自动容错机制为高可用提供了基础。目前,MongoDB 支持两种复制模式:


  • Master / Slave ,主从复制,角色包括 MasterSlave
  • Replica Set ,复制集复制,角色包括 PrimarySecondary 以及 Arbiter 。(生产环境必选)


20Q:什么是masterprimary


副本集只能有一个主节点能够确认写入操作来接收所有写操作,并记录其操作日志中的数据集的所有更改(记录在oplog中)。在集群中,当主节点(master)失效,Secondary节点会变为master


21Q:什么是SlaveSecondary


复制主节点的oplog并将oplog记录的操作应用于其数据集,如果主节点宕机了,将从符合条件的从节点选举选出新的主节点。


22Q:什么是Arbiter


仲裁节点不维护数据集。 仲裁节点的目的是通过响应其他副本集节点的心跳和选举请求来维护副本集中的仲裁


23Q:复制集节点类型有哪些?


  • 优先级0型(Priority 0)节点
  • 隐藏型(Hidden)节点
  • 延迟型(Delayed)节点
  • 投票型(Vote)节点以及不可投票节点


24Q:启用备份故障恢复需要多久?


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


MongoDB复制详解分析可查看文章MongoDB系列-解决面试中可能遇到的MongoDB复制集(replica set)问题


25Q:raft选举过程,投票规则?


选举过程:


当系统启动好之后,初始选举后系统由1个Leader和若干个Follower角色组成。然后突然由于某个异常原因,Leader服务出现了异常,导致Follower角色检测到和Leader的上次RPC更新时间超过给定阈值时间时。此时Follower会认为Leader服务已出现异常,然后它将会发起一次新的Leader选举行为,同时将自身的状态从Follower切换为Candidate身份。随后请求其它Follower投票选择自己。


投票规则:


  • 当一个候选人获得了同一个任期号内的大多数选票,就成为领导人。
  • 每个节点最多在一个任期内投出一张选票。并且按照先来先服务的原则。
  • 一旦候选人赢得选举,立刻成为领导,并发送心跳维持权威,同时阻止新领导人的诞生


可查看文章通俗易懂的Paxos算法-基于消息传递的一致性算法


26Q:在哪些场景使用MongoDB?


规则: 如果业务中存在大量复杂的事务逻辑操作,则不要用MongoDB数据库;在处理非结构化 / 半结构化的大数据使用MongoDB,操作的数据类型为动态时也使用MongoDB,比如:


  • 内容管理系统,切面数据、日志记录
  • 移动端AppsO2O送快递骑手、快递商家的信息(包含位置信息)
  • 数据管理,监控数据


各位看官还可以吗?喜欢的话,动动手指点个💗,点个关注呗!!谢谢支持!


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
1月前
|
NoSQL MongoDB Redis
Python与NoSQL数据库(MongoDB、Redis等)面试问答
【4月更文挑战第16天】本文探讨了Python与NoSQL数据库(如MongoDB、Redis)在面试中的常见问题,包括连接与操作数据库、错误处理、高级特性和缓存策略。重点介绍了使用`pymongo`和`redis`库进行CRUD操作、异常捕获以及数据一致性管理。通过理解这些问题、易错点及避免策略,并结合代码示例,开发者能在面试中展现其技术实力和实践经验。
353 9
Python与NoSQL数据库(MongoDB、Redis等)面试问答
|
1月前
|
存储 NoSQL 关系型数据库
MongoDB面试题
MongoDB面试题
|
1月前
|
NoSQL 应用服务中间件 MongoDB
2023年底复盘之大厂必问面试题:Redis+MongoDB+ZK+Nginx+数据库
今天分享给大家的都是目前主流企业使用最高频的面试题库,也都是 Java 版本升级之后,重新整理归纳的最新答案,会让面试者少走很多不必要的弯路。同时每个专题都做到了详尽的面试解析文档,以确保每个阶段的读者都能看得懂,同时这部分面试文档也是可以免费的提供给有需要的同学们学习的,有需要的可以查看文末的获取方式!
|
11月前
java初中级面试题(SSM+Mysql+微服务(SpringCloud+Dubbo)+消息队列(RocketMQ)+缓存(Redis+MongoDB)+设计模式+搜索引擎(ES)+JVM
java初中级面试题(SSM+Mysql+微服务(SpringCloud+Dubbo)+消息队列(RocketMQ)+缓存(Redis+MongoDB)+设计模式+搜索引擎(ES)+JVM
476 0
|
11月前
java初中级面试题(SSM+Mysql+微服务(SpringCloud+Dubbo)+消息队列(RocketMQ)+缓存(Redis+MongoDB)+设计模式+搜索引擎(ES)+JVM
java初中级面试题(SSM+Mysql+微服务(SpringCloud+Dubbo)+消息队列(RocketMQ)+缓存(Redis+MongoDB)+设计模式+搜索引擎(ES)+JVM
606 0
|
11月前
java初中级面试题(SSM+Mysql+微服务(SpringCloud+Dubbo)+消息队列(RocketMQ)+缓存(Redis+MongoDB)+设计模式+搜索引擎(ES)+JVM
java初中级面试题(SSM+Mysql+微服务(SpringCloud+Dubbo)+消息队列(RocketMQ)+缓存(Redis+MongoDB)+设计模式+搜索引擎(ES)+JVM
702 0
|
11月前
|
存储 SQL NoSQL
【Java面试八股文宝典之MongoDB篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day18
【Java面试八股文宝典之MongoDB篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day18
134 0
【Java面试八股文宝典之MongoDB篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day18
|
11天前
|
存储 算法 Java
JAVA后端开发面试题库
JAVA后端开发面试题库
20 1
|
15天前
|
缓存 安全 Java
【Java面试——并发基础、并发关键字】
随着硬件指令集的发展,我们可以使用基于冲突检测的乐观并发策略: 先进行操作,如果没有其它线程争用共享数据,那操作就成功了,否则采取补偿措施(不断地重试,直到成功为止)。这种乐观的并发策略的许多实现都不需要将线程阻塞,因此这种同步操作称为非阻塞同步。 乐观锁需要操作和冲突检测这两个步骤具备原子性,这里就不能再使用互斥同步来保证了,只能靠硬件来完成。硬件支持的原子性操作最典型的是: 比较并交换(Compare-and-Swap,CAS)。CAS 指令需要有 3 个操作数,分别是内存地址 V、旧的预期值 A 和新值 B。当执行操作时,只有当 V 的值等于 A,才将 V 的值更新为 B。
|
24天前
|
SQL 存储 Java
致远互联java实习生面试
致远互联java实习生面试
34 0