当前位置: 首页 > news >正文

MongoDB知识点与技巧总结

1. NoSQL 数据库概念与区别

问题分析:

  • NoSQL定义:Not Only SQL,强调不限于关系模型

  • 核心区别

    • 数据模型:RDBMS是结构化表,NoSQL是键值对/文档/图等

    • 扩展方式:RDBMS垂直扩展,NoSQL水平扩展

    • 一致性:RDBMS强一致性,NoSQL最终一致性

深入理解:

  • 使用场景

    • 适用:大数据、高并发、半结构化数据、快速迭代

    • 不适用:复杂事务、强一致性要求、成熟商业智能

易错点:

  • 误认为NoSQL完全替代SQL,实际是互补关系

  • 忽略NoSQL在不同场景下的适用性差异


2. NoSQL 数据库类型

详细分类:

  1. 文档型:MongoDB, CouchDB

  2. 键值型:Redis, MemcacheDB

  3. 列存储:Cassandra, HBase

  4. 图数据库:Neo4j

  5. 时序数据库:InfluxDB

特点对比:

  • 文档型:灵活schema,JSON/BSON格式

  • 键值型:高性能缓存,简单数据结构

  • 列存储:大数据分析,高写入吞吐


3. MySQL vs MongoDB 基础差别

核心差异:

特性MySQLMongoDB
数据模型表+行集合+文档
Schema固定动态
查询语言SQLJSON查询
事务完整ACID4.0+支持多文档事务
扩展垂直水平分片
关联外键+JOIN内嵌/引用

性能考虑:

  • MongoDB在非结构化数据、高并发读取场景表现更好

  • MySQL在复杂事务、关联查询场景更优


4. MongoDB vs CouchDB vs CouchBase

详细对比:

特性MongoDBCouchDBCouchBase
数据模型BSON文档JSON文档JSON文档+键值
一致性强一致性最终一致性强一致性
查询丰富查询语言MapReduceN1QL+键值
复制主从复制多主复制分布式
适用场景通用用途离线同步高性能缓存

5. MongoDB 成为最好 NoSQL 数据库的原因

核心优势:

  1. 面向文档:自然的开发模式,映射对象模型

  2. 高性能

    • 内存映射文件

    • 丰富的索引支持

    • 高效的BSON格式

  3. 高可用

    • 自动故障转移

    • 数据冗余复制

  4. 易扩展

    • 透明的分片机制

    • 自动数据均衡

  5. 丰富查询语言

    • 类SQL的聚合管道

    • 地理空间查询

    • 文本搜索


6. 32位系统细微差别

技术细节:

  • 内存映射限制:32位系统地址空间限制约2-3GB

  • Journaling默认禁用:防止预分配空间耗尽系统资源

  • 实际限制:32位系统最大数据集约2GB

生产建议:

  • 生产环境强烈建议使用64位系统

  • 32位仅适用于开发和测试


7. Journal 回放机制

工作机制:

  • Journal文件:写操作的预写日志

  • 原子性组:相关操作组成一个完整的journal组

  • 恢复机制:只回放完整的journal组,确保数据一致性

故障恢复:

  • 系统崩溃后,MongoDB通过journal重放恢复数据

  • 不完整的journal组被丢弃,保证数据不损坏


8. 分析器作用

功能详解:

// 开启分析器
db.setProfilingLevel(level, slowms)
// level: 0-关闭, 1-慢查询, 2-所有操作

使用场景:

  • 性能调优:识别慢查询

  • 索引优化:确定需要添加的索引

  • 操作监控:了解数据库负载模式

输出分析:

  • 查询时间、扫描文档数、返回文档数

  • 索引使用情况、锁等待时间


9. 名字空间概念

定义:

  • 格式数据库名.集合名

  • 示例blog.postsusers.profiles

内部实现:

  • 每个名字空间对应一个文件系统文件

  • 包含集合的数据和索引信息


10. 属性移除与存储

存储机制:

  • MongoDB使用BSON格式存储文档

  • 删除属性后,文档被重新保存为新的BSON

  • 存储空间不会立即回收,需要compact操作

空间管理:

  • 删除操作产生存储碎片

  • 定期运行compact回收空间


11. 日志特征与安全备份

备份策略:

  1. Journaling备份:基于oplog的增量备份

  2. 文件系统快照:配合journal的物理备份

  3. mongodump:逻辑备份

恢复流程:

  • 从备份恢复数据文件

  • 应用journal中的操作到最新状态


12. 空值处理

空值规则:

  • 允许:文档字段值为null

  • 不允许:整个文档为null

  • 空对象:可以存储{}空对象

查询注意:

// 查询空值字段
db.collection.find({field: null})
// 这会匹配字段不存在或值为null的文档

13. 更新操作与持久化

写入机制:

  • 延迟写入:默认60秒刷新到磁盘

  • Journal提交:通常100ms提交到journal文件

  • 手动刷新:使用fsyncgetLastError强制刷新

数据安全:

  • 启用journaling时,即使崩溃也不会丢失数据

  • 写入确认可以通过write concern控制


14. 事务与加锁

锁机制:

  • 粒度:全局锁→数据库锁→集合锁→文档锁(3.0+)

  • 类型:读锁(共享锁)、写锁(排他锁)

事务支持:

  • 4.0版本开始支持多文档事务

  • 但设计理念仍偏向无事务的高性能场景


15. 数据文件庞大原因

预分配机制:

  • 目的:防止文件系统碎片,提高写入性能

  • 策略:文件大小按2倍增长(16MB→32MB→64MB...)

  • 最大文件:单个文件最大2GB

空间回收:

  • 删除数据不会立即释放磁盘空间

  • 需要repairDatabasecompact回收空间


16. 备份故障恢复时间

故障转移流程:

  1. 检测主节点失效(10-30秒)

  2. 选举新的主节点

  3. 应用所有未完成的写操作

影响范围:

  • 写入操作:完全不可用

  • 强一致性读:不可用

  • 最终一致性读:从节点可用(slaveOk)


17. Master/Primary 概念

角色定义:

  • Primary:复制集中唯一的可写节点

  • 选举机制:基于Raft协议自动选举

  • 职责:处理所有写操作,记录oplog

故障转移:

  • 自动检测节点失效

  • 从Secondary中选举新的Primary


18. Secondary/Slave 概念

复制机制:

  • 数据同步:从Primary的oplog复制操作

  • 读操作:可以处理读请求(配置依赖)

  • 延迟:可能存在复制延迟

特殊类型:

  • Hidden:不参与选举,用于备份/报表

  • Delayed:延迟复制,用于错误恢复


19. getLastError 作用

功能详解:

  • 确认机制:确认写操作是否成功

  • 非必需:不调用不影响写操作执行

  • 安全模式:提供更强的写入确认

Write Concern:

// 不同级别的写入确认
db.collection.insert(doc, {w: 1}) // 确认写入主节点
db.collection.insert(doc, {w: "majority"}) // 确认写入多数节点

20. 分片环境选择

分片决策:

  • 非分片:数据量小,开发测试环境

  • 分片:大数据集,高吞吐需求

分片策略:

  • 基于范围:适合范围查询

  • 基于哈希:数据均匀分布

  • 基于标签:手动控制数据分布


21. 分片与复制工作原理

分片架构:

应用 → Mongos → 配置服务器 → 分片集群
  • 分片:数据水平分区

  • 块(Chunk):数据迁移的基本单位

  • 均衡器:自动在分片间迁移块

复制集架构:

  • Primary:写操作

  • Secondary:读操作+数据冗余

  • Arbiter:投票节点,不存储数据


22. 数据扩展时机

分片触发条件:

  • 块数量:至少2个块才会触发迁移

  • 块大小:默认64MB,可配置

  • 均衡阈值:分片间数据量差异达到阈值

迁移过程:

  • 均衡器检测不均衡

  • 选择要迁移的块

  • 在分片间迁移块数据


23. 迁移中更新操作

并发控制:

  1. 更新操作在旧分片上立即执行

  2. 迁移过程记录所有变更

  3. 所有权转移前同步变更到新分片

  4. 完成迁移,更新路由信息

数据一致性:

  • 迁移过程中保证数据一致性

  • 应用无感知的数据迁移


24. 分片故障查询行为

查询处理:

  • 停止的分片

    • 默认返回错误

    • Partial选项允许返回部分结果

  • 慢响应的分片:等待直到超时

容错配置:

// 允许部分结果
db.collection.find().readPref("secondary").allowPartialResults(true)

25. moveChunk 临时文件

文件管理:

  • 位置moveChunk目录下的临时文件

  • 用途:数据迁移过程中的中间文件

  • 清理:迁移完成后手动清理

风险提示:

  • 迁移过程中不要删除文件

  • 确认迁移完成后再清理


26. 查看连接信息

连接监控:

// 查看连接池统计
db.adminCommand("connPoolStats")// 查看当前连接
db.currentOp(true).inprog.forEach(op => printjson(op.client)
)

关键指标:

  • 活跃连接数

  • 连接池使用情况

  • 客户端信息


27. 块移动失败处理

重试机制:

  • 自动重试:失败后自动重试迁移

  • 一致性保证:迁移是原子操作

  • 最终状态:数据只存在于新分片

监控命令:

// 查看分片状态
sh.status()
// 查看迁移状态
db.getSiblingDB("config").chunks.find()

28. 混合日志配置

配置灵活性:

  • 不同节点可以有不同的journaling配置

  • 但建议生产环境统一配置

一致性考虑:

  • 有journal的节点恢复更快

  • 无journal的节点需要从其他节点同步数据


29. 迁移中更新操作(重复)

同第23题,强调在数据迁移过程中更新的处理机制。


30. 复合索引顺序

索引匹配规则:

  • 前缀匹配:索引A:[B,C]支持查询AA:[B]

  • 顺序敏感:不支持A:[C,B]查询

  • 覆盖查询:只使用索引不访问文档

最佳实践:

  • 根据查询模式设计索引顺序

  • 使用explain()分析索引使用


31. 分片故障查询(重复)

同第24题,强调分片故障时的查询行为和处理选项。


32. 存储过程支持

实现方式:

// 定义存储过程
db.system.js.save({_id: "hello",value: function(name) {return "Hello " + name;}
})// 调用存储过程
db.eval("hello('World')")

使用场景:

  • 复杂业务逻辑

  • 减少网络往返

  • 但性能需谨慎评估


33. GridFS 机制

设计原理:

  • 文件分块:大文件分割为255KB的块

  • 元数据存储fs.files集合存储文件信息

  • 数据存储fs.chunks存储文件块

优势:

  • 突破16MB文档大小限制

  • 支持流式读写

  • 文件完整性校验

使用场景:

  • 大文件存储(视频、图片、文档)

  • CDN替代方案

  • 版本文件管理


总结

覆盖了MongoDB的核心概念,从基础理论到高级特性都有涉及。

http://www.dtcms.com/a/602174.html

相关文章:

  • 企业网站 设计国外免费建站网站不用下载
  • LeetCode算法学习之数组中的第K个最大元素
  • 应急调度系统让每一次救援都精准到位
  • RL机器人人库使用简介
  • 北京网络公司建站百度爱采购优化排名软件
  • 长沙微网站开发重庆网站建设及优化公司
  • Java集合框架深度剖析 — 从源码看ArrayList、HashMap的设计与优化
  • 网站关键词排名快速提升thinkphp建站网址
  • JavaScript中??、、||、?.运算的区别
  • 微信公众号网站怎么做上海网站开发报价
  • Python压缩音乐文件大小
  • 用什么软件写网站荷城网站设计
  • 长治哪家公司做网站好怎么做网站教程视频
  • 跟踪导论(三)——滤波的释义位置信息的“观测+修正”
  • 一个电商网站开发周期是多久搜索引擎营销流程是什么?
  • 计算机做网站难吗网站建设费可以走办公费吗
  • 做公众号还是网站建网站哪家划算
  • 从App时代到智能体时代,如何打破“三堵墙”
  • jsp怎么拿到url参数
  • 有机蔬菜:清爽解腻的炖锅搭档
  • 网站的时间对齐应该怎么做wordpress中文评论插件
  • 515ppt网站建设岳麓区专业的建设网站公司
  • mysql第5次作业---hyx
  • LLM的“哥白尼革命”:物理AI与世界模型,AI的下一个战场!
  • VC软件编译C语言 | 详细教程与常见问题解答
  • 高职单招与统招比较及职业发展指南
  • Cursor vs Claude Code:AI编程工具深度对比与选择指南
  • php论坛网站源码下载大型购物网站设计
  • 网站建设标书样本如何修改wordpress登录域名
  • 深圳网站建设联系方式crm客户管理系统论文