MongoDB 高频面试题及详细答案(实战版)_第1页
MongoDB 高频面试题及详细答案(实战版)_第2页
MongoDB 高频面试题及详细答案(实战版)_第3页
MongoDB 高频面试题及详细答案(实战版)_第4页
MongoDB 高频面试题及详细答案(实战版)_第5页
已阅读5页,还剩3页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MongoDB高频面试题及详细答案(实战版)一、基础概念篇(初级必问)1.简单说说MongoDB是什么?它的核心特点有哪些?MongoDB是一款开源的、基于分布式文件存储的文档型非关系型数据库,主打高可用、高性能、高拓展性,主要用于处理海量非结构化、半结构化数据。核心特点:文档型存储:数据以BSON文档格式存储,结构灵活,无需提前定义表字段,适配业务频繁迭代的场景。无固定schema:同一个集合下的文档可以拥有不同字段,不用像MySQL一样改表结构,开发效率更高。高并发高性能:基于内存映射文件,读写速度快,擅长高并发读写场景。分布式易扩展:原生支持分片集群,可横向扩容,轻松支撑海量数据。支持副本集:自带主从复制、故障自动转移,保障数据高可用。2.MongoDB中数据库、集合、文档的关系是什么?三者是层级包含关系,完全对标关系型数据库,对应关系如下:数据库(Database)≈MySQL数据库集合(Collection)≈MySQL数据表文档(Document)≈MySQL数据表中的一行数据补充:集合不需要提前创建,插入数据时自动生成;文档是MongoDB最小数据单元,格式为BSON(二进制JSON),支持嵌套对象、数组。3.BSON和JSON的区别?数据类型更多:BSON支持日期、二进制、ObjectId、正则、整数、浮点数等,JSON仅支持字符串、数字、布尔、数组、对象、null。二进制存储:BSON是二进制格式,解析速度更快、占用空间更小,适合机器读写;JSON是文本格式,适合人工阅读。有序性:BSON文档字段有序,JSON字段无序。可扩展:BSON支持内嵌文档、数组嵌套,更适配数据库存储场景。4.MongoDB的ObjectId组成结构?ObjectId是文档默认主键,12字节十六进制字符串,结构固定:前4字节:时间戳(秒级),可通过主键反推数据创建时间中间3字节:机器唯一标识,防止多机器重复后2字节:进程ID最后3字节:自增计数器,保证同一秒、同一机器、同一进程下ID唯一优势:无需手动维护主键,天然全局唯一,自带时间属性。二、CURD与语法进阶篇1.MongoDB插入数据的三种方式及区别?insertOne:插入单条文档,插入失败直接报错,不支持批量。insertMany:批量插入多条文档,支持ordered参数,ordered=true时,某一条失败则整体终止;ordered=false时,跳过错误继续插入其他数据。insert:旧版本通用方法,可插单条/多条,新版本已不推荐使用,语法兼容性差。2.updateOne、updateMany、replaceOne的核心区别?updateOne:只更新匹配条件的第一条数据,局部修改字段,不改变文档整体结构。updateMany:更新所有匹配条件的数据,批量修改,日常批量更新首选。replaceOne:替换整条文档,直接覆盖原有数据结构,只保留_id,其余字段全部替换,慎用。注意:更新必须带操作符($set、$inc等),否则会默认覆盖整条文档。3.MongoDB常用查询操作符有哪些?日常开发高频操作符:比较:$gt(大于)、$lt(小于)、$gte(大于等于)、$lte(小于等于)、$ne(不等于)、$in/$nin(包含/不包含)逻辑:$and、$or、$not、$nor字段操作:$exists(判断字段是否存在)、$type(判断字段类型)数组操作:$all(匹配数组所有元素)、$size(匹配数组长度)、$elemMatch(数组元素多条件匹配)更新操作:$set(修改字段)、$unset(删除字段)、$inc(数值增减)、$push(数组追加)、$pull(数组删除元素)三、索引核心篇(面试重点)1.MongoDB索引的作用?默认索引是什么?索引核心作用是提升查询效率、避免全表扫描,减少数据库IO,大幅优化高并发查询场景。MongoDB默认会为每个集合的_id字段创建唯一索引,且无法删除,保证文档主键唯一。2.MongoDB有哪些常用索引类型?单字段索引:基于单个字段创建,最基础索引,适配单条件查询。复合索引:基于多个字段联合创建,适配多条件查询,遵循最左前缀原则。唯一索引:保证字段值全局唯一,可用于手机号、账号等唯一字段,重复数据插入报错。稀疏索引:只对存在该字段的文档创建索引,忽略无该字段的文档,节省索引空间。文本索引:用于全文检索,支持模糊匹配文本内容。地理空间索引:用于地理位置查询,比如附近的人、距离筛选。3.什么是索引最左前缀原则?复合索引如何优化查询?复合索引的查询必须优先匹配索引最左侧字段,否则索引失效。举例:创建索引(name,age,sex)有效查询:name、name+age、name+age+sex失效查询:单独age、单独sex、age+sex(无前置name)优化原则:等值条件放前面,范围条件放后面(如$gt、$lt)。4.索引是不是越多越好?为什么?不是,索引存在副作用,过多索引会严重影响数据库性能:占用存储空间:索引会单独存储数据,索引越多,磁盘占用越高。降低写入性能:新增、修改、删除数据时,数据库需要同步更新所有相关索引,索引越多,写入耗时越长。索引失效风险:无效索引、冗余索引会增加数据库检索开销,无收益反而损耗性能。总结:只给高频查询字段建索引,低频查询不建索引,定期清理冗余索引。5.如何判断查询是否走索引?使用explain()方法分析执行计划,核心看两个字段:stage:IXSCAN→走索引扫描,查询优化生效stage:COLLSCAN→全集合扫描,未走索引,需要优化四、事务与锁机制篇1.MongoDB支持事务吗?有什么限制?MongoDB4.0版本支持单副本集事务,4.2版本支持分片集群事务,支持ACID特性,可实现多文档、多集合数据一致性。事务核心限制:事务操作数据量有限制,不适合超大批量数据处理事务内无法执行部分高危指令(如删除集合、创建索引)事务超时时间较短,长耗时操作不适合用事务2.MongoDB的锁机制是什么?MongoDB采用读写分离锁机制,版本迭代后锁粒度不断优化:3.2之前:全局锁,读写都会锁定整个数据库,并发差3.2-3.6:集合级锁,锁定单个集合,并发提升4.0+:文档级锁,只锁定操作的单条文档,不影响其他数据,并发性能大幅提升核心规则:读锁共享、写锁互斥,多个读操作可并发,写操作独占锁。五、副本集与高可用篇(中高级必问)1.什么是MongoDB副本集?作用是什么?副本集是一组相互同步数据的MongoDB节点集群,标准架构为1主+1从+1仲裁,也可多从节点。核心作用:数据冗余备份:防止单节点故障导致数据丢失自动故障转移:主节点宕机后,从节点自动选举升级为主节点,保障服务不中断读写分离:主节点负责写入,从节点承担查询压力,提升并发能力2.副本集三种节点角色及职责?主节点(Primary):集群唯一写入节点,处理所有写请求,同步数据到从节点,集群中只有一个主节点。从节点(Secondary):实时同步主节点数据,提供读服务,主节点故障时参与选举。仲裁节点(Arbiter):不存储业务数据,不处理读写请求,只参与投票选举,维持集群节点数量奇偶性,避免选举僵局,占用资源极低。3.副本集选举机制是什么?当主节点宕机、离线或心跳超时后,集群触发选举,所有存活节点参与投票:节点优先级越高、数据越新,越容易被选为新主节点必须获得半数以上投票才能当选主节点选举期间集群短暂无法写入,选举完成后自动恢复核心要点:集群节点数量必须为奇数,防止平票无法选举。4.什么是延迟同步、隐藏节点?延迟同步节点:数据同步比主节点晚指定时间,用于误操作数据恢复,比如误删数据可从延迟节点找回历史数据。隐藏节点:不参与业务读写、不参与选举,仅做冷备份,保障数据安全。六、分片集群篇(高级面试重点)1.为什么需要分片集群?副本集不够用吗?副本集只能解决高可用、数据备份、读写分离问题,无法解决海量数据存储和超高并发写入问题。单节点存储容量、读写性能有上限,数据量达到千万、亿级后,性能会明显下降。分片集群核心作用:横向拆分数据,分布式存储,突破单节点性能和容量瓶颈,支撑海量数据、超高并发场景。2.分片集群三大核心组件及作用?Shard(分片节点):真实存储业务数据的节点,每个Shard本身就是一个副本集,保证高可用,多个Shard共同分摊数据压力。Mongos(路由节点):客户端唯一访问入口,接收所有读写请求,根据分片规则将请求分发到对应Shard,客户端无需感知集群结构。ConfigServer(配置节点):存储集群元数据,包括分片规则、数据分布、节点信息等,是集群的“大脑”,必须部署副本集保障高可用。3.分片键是什么?分片键的选择原则?分片键是集合中用于数据拆分的字段,Mongos根据分片键的值将数据分散到不同Shard节点。分片键选择核心原则:基数足够大:字段值丰富,避免数据集中在单个分片(热点数据)读写分布均匀:避免所有读写请求集中在某一个分片贴合查询场景:高频查询字段作为分片键,避免跨分片查询禁止使用单调递增字段(如自增ID),会导致数据全部写入单个分片,产生写入热点4.哈希分片和范围分片的区别?范围分片:按分片键数值区间拆分数据,优点是范围查询效率高;缺点是易出现数据倾斜、读写热点。哈希分片:对分片键做哈希运算后均分数据,优点是数据分布均匀,无热点;缺点是范围查询效率低,适合单点精准查询场景。七、性能优化与运维篇1.MongoDB常见性能优化方案?索引优化:合理创建单字段、复合索引,避免全表扫描,清理冗余索引,遵循最左前缀原则。读写分离:主写从读,分担主节点压力,提升查询吞吐量。分片扩容:海量数据场景使用分片集群,横向分摊压力。数据结构优化:合理嵌套文档、数组,避免字段过多、文档过大,拆分冷热数据。查询优化:避免模糊全匹配、避免大量跨分片查询、限制返回字段和条数。内存优化:合理配置内存参数,保证热点数据常驻内存,减少磁盘IO。2.什么是脏读、幻读?MongoDB如何解决?MongoDB默认读隔离级别为读已提交,可规避大部分脏读、幻读问题。脏读:读取到未提交的事务数据,MongoDB不会读取未确认的写入数据,避免脏读。幻读:同一查询多次结果不一致,可通过事务、快照读解决。3.MongoDB数据丢失场景及规避方案?常见数据丢失场景:主节点宕机未同步完数据、断电、磁盘损坏、误操作删除。规避方案:部署副本集,实现数据多副本冗余开启日志持久化(journal日志),故障可恢复数据定期全量备份+增量备份配置延迟节点,用于误操作数据恢复合理设置写入级别,关键业务使用majority写入确认4.journal日志的作用?journal是MongoDB的预写日志,数据写入前先记录日志,再落盘数据。核心作用:服务器异常断电、宕机后,重启时可通过journal日志回放未完成的写入操作,保证数据一致性,防止数据损坏、丢失,生产环境必须开启。八、高频对比面试题1.MongoDB和MySQL的区别?适用场景?区别:MySQL:关系型数据库,固定schema,强事务、强一致性,支持复杂联表查询。MongoDB:文档型非关系数据库,无固定schema,事务能力较弱,不适合复杂联表,读

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论