版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MongoDB高频面试题及详细答案(实操版)一、基础概念篇(入门必问)1、MongoDB是什么?核心特点有哪些?MongoDB是一款开源的、基于分布式文件存储的非关系型数据库(NoSQL),采用文档型数据存储结构,专门应对海量数据、高并发、低延迟的业务场景。核心特点:文档型存储:数据以BSON格式存储,结构灵活,无需提前定义表结构,可随时新增、修改字段,适配快速迭代的业务。高扩展性:支持横向分片扩容,可通过多节点集群轻松承载千万、亿级数据量。高性能:内存级读写机制,热数据优先缓存内存,读写速度远高于传统关系型数据库。高可用:支持副本集机制,自动故障转移,节点宕机不影响业务正常访问。支持丰富查询:具备完善的条件查询、聚合、排序、分页能力,基本满足大部分业务查询需求。2、MongoDB中数据库、集合、文档的关系是什么?和MySQL如何对应?三者是层层包含的关系:一个数据库包含多个集合,一个集合包含多个文档。与MySQL对应关系:MongoDB数据库⇋MySQL数据库MongoDB集合(Collection)⇋MySQL数据表(Table)MongoDB文档(Document)⇋MySQL数据行(Row)MongoDB字段(Field)⇋MySQL列(Column)核心区别:集合没有固定结构,不同文档可以拥有不同字段,自由度极高。3、什么是BSON?和JSON的区别?BSON是MongoDB专用的二进制JSON格式,是MongoDB数据存储和传输的基础格式。和JSON的核心区别:BSON是二进制格式,解析速度更快、占用空间更小;JSON是文本格式,解析效率低。BSON支持更多数据类型,如日期、时间戳、正则、二进制、整型、浮点型精准区分;JSON仅支持字符串、数字、布尔、数组、对象、null。BSON具备索引有序性,支持字段排序和快速检索,适配数据库存储场景。4、MongoDB默认端口、默认数据库是什么?默认服务端口:27017默认数据库:test(未指定数据库时默认使用)系统核心数据库:admin(权限管理)、local(副本集、本地日志)、config(分片集群配置)二、CRUD操作篇(实操高频)1、MongoDB插入数据有哪几种方式?区别是什么?主要分为3种常用插入方法:insertOne():单次插入单条文档,插入失败直接报错,适合单条数据写入。insertMany():批量插入多条文档,支持有序和无序插入,效率远高于循环单插。insert():兼容方法,可插单条或多条,新版官方不推荐使用,逐步淘汰。核心注意点:批量插入时,ordered参数默认true,即遇到错误立即终止;设置为false时,跳过错误数据,继续插入剩余数据。2、MongoDB更新操作有哪些?updateOne和updateMany的区别?常用更新方法:updateOne、updateMany、replaceOne。updateOne:只更新匹配条件的第一条文档,即使多条匹配也只修改单条,适合唯一性数据更新。updateMany:更新所有匹配条件的文档,批量更新场景必用。replaceOne:直接替换整条文档,而非局部修改字段,会覆盖原有所有字段(除_id)。常用更新操作符:$set(修改/新增字段)、$unset(删除字段)、$inc(数值增减)、$push(数组新增元素)。3、删除数据deleteOne和deleteMany的区别?deleteOne:删除匹配条件的第一条文档。deleteMany:删除所有匹配条件的文档。重要注意:MongoDB删除数据是物理删除,无法回滚,生产环境删除前必须先查询校验条件;禁止直接空条件删除(db.col.deleteMany({})清空集合)。4、MongoDB分页查询怎么做?优缺点是什么?标准分页语法:find().skip(页码偏移量).limit(每页条数).sort(排序字段)示例:查询第2页,每页10条数据
db.user.find({}).sort({createTime:-1}).skip(10).limit(10)优缺点:优点:语法简单,适配中小数据量分页。缺点:深分页性能极差,skip值越大,数据库需要遍历的数据越多,百万级数据深分页会出现超时、卡顿。深分页优化:使用游标分页(条件分页),通过上一页最后一条数据的唯一标识(如_id、时间戳)作为查询条件,替代skip。三、索引篇(面试核心重点)1、MongoDB索引的作用?默认索引是什么?索引核心作用:大幅提升查询效率,避免全表扫描,减少数据库IO开销,降低查询耗时。默认索引:MongoDB所有集合默认自带_id唯一索引,不可删除,自动保证文档主键唯一性。2、MongoDB有哪些常用索引类型?单字段索引:基于单个字段创建,最常用,适配单条件查询。复合索引:基于多个字段联合创建,适配多条件组合查询,遵循最左前缀原则。唯一索引:保证字段值唯一,不允许重复数据,可用于手机号、用户名等唯一字段。稀疏索引:只对包含该字段的文档建立索引,忽略无该字段的文档,节省索引空间。文本索引:用于全文模糊检索,支持多字段文本匹配。地理空间索引:用于地理位置查询,如附近的人、周边门店场景。3、什么是复合索引最左前缀原则?如何理解?复合索引的生效规则:查询条件必须包含索引最左侧的字段,索引才会生效,跳过左侧字段直接用右侧字段查询会失效。举例:创建复合索引{name:1,age:1,sex:1}有效查询:name、name+age、name+age+sex无效查询:仅age、仅sex、age+sex(无最左name字段)实操建议:创建复合索引时,把高频查询、等值查询字段放在左侧,范围查询字段放右侧。4、索引是不是越多越好?为什么?不是,索引存在明显弊端,过多索引会严重影响数据库性能。弊端:占用磁盘和内存空间:索引数据会单独存储,索引越多,占用资源越大。降低写入性能:新增、修改、删除数据时,数据库需要同步更新所有关联索引,索引越多,写入耗时越长。实操原则:只给高频查询字段建索引,低频查询、低区分度字段不建索引。5、如何查看MongoDB查询是否走索引?使用explain()方法分析执行计划。语法:db.col.find(条件).explain()核心判断字段:stage为IXSCAN:走索引查询,性能正常。stage为COLLSCAN:全集合扫描,未走索引,需要优化。四、副本集与高可用篇1、什么是MongoDB副本集?核心作用是什么?副本集是MongoDB实现高可用、数据备份的核心机制,由一组相互同步数据的MongoDB节点组成,是生产环境标准部署方式。核心作用:数据冗余备份,防止单节点故障导致数据丢失。自动故障转移,保证业务不间断访问。读写分离,主节点负责写入,从节点分担查询压力。2、副本集节点类型及职责?标准副本集至少3个节点,包含三种角色:主节点(Primary):唯一的写入节点,处理所有写请求,同步数据到从节点,同一时间只有一个主节点。从节点(Secondary):同步主节点数据,提供读服务,主节点故障时参与选举,晋升为主节点。仲裁节点(Arbiter):不存储业务数据,不提供读写服务,仅参与投票选举,作用是凑齐投票节点数,避免选举失败,节省服务器资源。3、副本集故障转移机制是什么?当主节点宕机、离线或心跳超时(默认10秒),副本集会自动触发选举机制,所有存活的从节点参与投票,票数最高的从节点晋升为新主节点,全程自动完成,无需人工干预,业务短暂中断后自动恢复。原主节点恢复后,会自动降级为从节点,同步新主节点数据。4、副本集数据同步原理?基于oplog(操作日志)同步:主节点所有的增删改操作,都会记录在local库的oplog集合中,从节点实时拉取主节点oplog日志,回放日志执行相同操作,实现数据同步。oplog是固定大小的循环日志,只会保留近期操作记录。五、分片集群篇(进阶高频)1、什么时候需要用MongoDB分片集群?单节点/副本集无法满足业务需求时,必须启用分片集群,核心场景:单集合数据量超千万、亿级,单节点存储容量不足。读写并发极高,单节点性能瓶颈明显,CPU、内存、IO负载过高。需要横向无限扩容,突破单节点硬件上限。2、分片集群三大核心组件及作用?Shard(分片节点):实际存储业务数据的节点,每个Shard可以是一个副本集,保证分片数据高可用,多个Shard共同分担海量数据。Mongos(路由节点):客户端唯一访问入口,不存储数据,只负责接收请求、根据分片规则转发请求到对应Shard,聚合多节点返回结果。ConfigServer(配置节点):存储集群所有元数据,包括分片规则、数据分布、节点信息等,是集群的大脑,必须部署副本集保证高可用。3、分片键是什么?分片键的选择原则?分片键是集合中用于数据拆分的字段,MongoDB根据分片键的值,将数据均匀分散到不同分片节点。分片键选择核心原则:高区分度、分布均匀:避免数据倾斜,防止大量数据集中在单个分片。贴合业务查询场景:大部分查询条件包含分片键,避免广播查询(查询所有分片,性能极低)。禁止单调递增字段(如自增id、时间戳):会导致新数据全部写入单个分片,出现写入热点。六、事务与并发篇1、MongoDB支持事务吗?版本要求是什么?MongoDB4.0版本开始支持单文档事务,4.2版本正式支持分布式多文档、跨集合、跨分片事务,满足业务原子性需求。事务特性:完全满足ACID特性,支持提交、回滚,事务内操作要么全部成功,要么全部失败。2、MongoDB单文档原子性是什么?MongoDB所有版本都默认保证单文档操作原子性,无需开启事务。单次对单个文档的增删改操作,是原子性的,不会出现部分更新、部分失败的情况。只有多文档、多集合联动操作,才需要手动开启事务。七、性能优化篇(实操面试重点)1、MongoDB常见性能瓶颈有哪些?查询未建索引,大量全集合扫描。索引不合理,复合索引不遵循最左原则、冗余索引过多。深分页skip过大导致查询缓慢。写入并发过高,索引过多拖慢写入速度。数据倾斜、分片规则不合理导致单节点压力过大。内存不足,热数据无法缓存,频繁磁盘IO。2、MongoDB整体优化方案?1、索引优化:合理创建单字段、复合索引,删除冗余无效索引,遵循最左前缀原则,避免低区分度索引。2、查询优化:禁止全表查询、禁止深分页,用游标分页替代skip分页,精准限定查询字段,避免返回冗余字段。3、架构优化:大数据量、高并发场景启用分片集群,实现读写分离,主写从读。4、配置优化:合理分配内存,保证WiredTiger引擎缓存充足,优化日志、磁盘IO配置。5、数据优化:冷热数据分离,历史冷数据归档,减少活跃数据体量,提升查询效率。3、WiredTiger引擎的核心优势?WiredTiger是MongoDB3.2+默认存储引擎,核心优势:支持文档级并发锁,读写互不阻塞,大幅提升并发能力。数据压缩存储,有效节省磁盘空间。缓存机制优秀,区分数据缓存和索引缓存,热数据访问速度极快。支持事务、故障恢复,数据安全性更高。八、常见面试易错问题1、MongoDB和MySQL的适用场景区别?MongoDB适用场景:海量数据、高并发、结构灵活、快速迭代、无需强事务的业务,如用户行为日志、商品详情、聊天记录、运营数据统计。MySQL适用场景:数据结构固定、需要强事务、高一致性的核心业务,如订单、支付、账户、财务数据。2、MongoDB文档_id可以自定义吗?有什么弊端?可以自定义_id字段
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 管理沟通(第7版)课件汇 教材版 康青 第01-8章 沟通概论 -面谈
- 《检验结果的解读》课件
- 2026年全国保密教育线上培训考试题及完整答案
- 围绕大概念的STEM整合课程建构与应用研究
- 2026年锦江国际集团有限公司人员招聘笔试备考题库及详细答案解析
- 2026年三门峡市烟草专卖局人员招聘笔试参考题库及详细答案解析
- 2026年克拉玛依市烟草专卖局人员招聘考试备考题库及详细答案解析
- 2026年濮阳市烟草专卖局人员招聘参考题库及详细答案解析
- 2026年芜湖市烟草专卖局人员招聘考试备考试题及详细答案解析
- 2026年江西移动人员招聘考试参考题库及详细答案解析
- 2026年医务人员职业暴露防护知识试卷真题及答案
- 高三生物教学设计:细胞分化、衰老与死亡的深度复习策略
- 2025中国红十字会救护员培训理论考试试题及答案
- Unit 4 Plants around us-Part A Let's talk 课件(内嵌视频)2026-2027学年人教PEP版英语三年级上册
- 2027年中国邮政集团有限公司秋季校园招聘笔试模拟试题及答案详解
- (2026)十八项医疗质量安全核心制度
- 肉牛育肥期科学饲喂技术规范
- 光伏发电项目逆变器调试方案
- 西梅制干、分级技术规范
- 2026年4月自考13135西方经济学(中级)试题试题及答案
- AQ 3026-2026《化工企业设备检修作业安全规范》宣贯解读课件
评论
0/150
提交评论