MongoDB数据库核心知识

本文章由博主学习阿里云MongoDB从入门到高级云上开发实战课程后整理的笔记,访问超链接即可了解更多内容

3.MongoDB数据库核心知识

3.1 MongoDB数据库架构

3.1.1 MongoDB数据库体系架构

3.1.2 MongoDB数据逻辑架构

MongoDB
Journal日志
Collection集合
Index索引
固定集合Capped
Document文档
Field字段
  • MongoDB允许集合中的数据缺失或者修改,部分不一致,出现字段的删减与添加
  • 一个MongoDB可以包含多个集合,一个集合可以包含多个文档

3.2 MongoDB存储引擎

MongoDB查询语言
MongoDB存储引擎
MMAPv1
WiredTiger
Encrypted
In-Memory
RocksDB
TerarkDB
其他引擎

存储引擎负责管理数据存储,包括内存和磁盘2各区域

  1. MongoDB官方支持的四种引擎:

    • MMAPv1为3.2版本之前默认引擎,WiredTiger为3.2版本之后默认引擎

    • EncryptedIn-Memory为企业付费版,Encrypted为加密引擎

  2. 阿里云数据库MongoDB版拓展支持的存储引擎

    • TerarkDB在提高压缩率的同时,解决存储空间以及查询性能的优化,RocksDB用于写入性能的优化

查询存储引擎的版本

db.serverStatus().storageEngine

3.3 集合Collection

3.3.1 MongoDB集合(Collection)

  • 类似于关系型数据库中的表Table

  • MongoDB数据库可以包含多个集合,一个集合可以包含多个文档( Document ) 1

  • 如果集合不存在, MongoDB会在保存第一条数据的时候创建集合

  • 可以使用db.createCollection()创建集合

  • 集合不限制文档Document的字段架构

  • MongoDB 3.2开始可以启用Schema Validation强制验证文档结构

  • MongoDB还提供了Capped Collection固定容量大小的集合 2

  • 使用命令行创建集合

    db.createCollection("log", { capped : true, size : 5242880, max : 5000 }) 
    
    • size用于控制数据容量大小

    • max用于控制文档个数

    • 只要两个条件满足一个就会淘汰数据

3.3.2 查询集合状态

db.orders.stats() //orders is collection name

3.4 文档模型与BSON

3.4.1 MongoDB文档模型

  1. Document文档 ,类似于关系型数据库中的行Row ,数据基本单元

  2. 文档结构类似于JSON文档 ,存储键值对Key-Value数据

  3. MongoDB保存数据的基本格式是BSON Document

  4. BSON是二进制JSON ,目的节约存储空间

  5. MongoDB的文档支持更丰富的数据类型

  6. _id是默认的主键 ,使用的是ObjectId类型保证唯一, 也可以自定义

  7. 字段存储有特定的顺序 ,允许嵌套复杂类型,如文档类型的数据

  8. 除了数据使用文档、查询、过滤、索引管理等功能也全部使用文档

  9. BSON文档大小有 16M的限制

  10. 超出16M限制的数据可以使用GridFS存储

3.4.1 MongoDB文档模型设计原则

数据模型的两种方式:

  1. Normalized 范式

  2. Denormalized 反范式

Mongodb文档结构分为:

  1. 引用方式:也就是RDBMS中的外键关联

  2. 嵌入式:也就是Ducoment文档中的内嵌节点

3.5 日志Log机制

3.5.1 Mongodb日志Journal

  • 为了防止突发故障导致的数据丢失, MongoDB提供了日志机制

  • WiredTiger使用写前日志write-ahead transaction logCheckpoint检查点一起来确保数据正确持久性

  • 如果MongoDB日志存在检查点,就使用日志重放修改直到上一一个检查点

  • 日志使用了snappy压缩库

  • 最小日志大小128字节,小于此大小不启用压缩.

  • 单节点,不启用日志,可能导致数据修改丢失

  • WiredTiger引擎日志默认100毫秒刷一次磁盘,日志文件最大100M ,超过会自动创建新文件

3.5.2 控制WiredTiger日志持久化

  1. MongoDB的日志在DbPath目录下的Journal目录下
  2. 启动参数–journal开启使用–nojournal 关闭,也可以配置文件关闭
  3. WiredTiger默认提交日志时间是间隔100毫秒
  4. 3.2版本WiredTiger写入日志间隔默认50毫秒
  5. 3.6以后WiredTiger设置检查点间隔是60秒
  6. 如果写入操作设置了j: true ,引擎会立即写磁盘
  7. 日志大小是100 MB ,写满以后,重新创建日志文件
  8. 如果强制关闭Mongod进程可能会导致日志丢失
  9. 使用storage.journal.commitIntervalMs控制间隔
  10. In-Memory引擎不支持此参数
  11. MMAPv1引擎默认提交日志时间是间隔30毫秒
  12. WiredTiger引擎自动删除直到上一个CheckPoint的日志文件

3.6 MongoDB面试题

  1. Document内嵌VS引用

    • Embedding内嵌
      • 快速读取
      • 数据冗余
      • 数据更新时较为复杂
    • Linking引用
      • 节约空间
      • 关系灵活
      • 数据更新时比较简单
      • 需要从多个表读取数据
  2. MongoDB存储引擎主要有哪些?

  3. 几种主流存储引擎的差异?优缺点?

  4. MongoDB日志结构?

  5. MongoDB恢复数据库数据的原理?

  6. BSON如何保证数据的序列化?

  7. MongoDB文档模型?

  8. MongoDB文档模型优缺点?

  9. 如何控制MongoDB日志写入时间?


  1. 数据封装的基本单位,要区别于Word文档 ↩︎

  2. 当超过容量,会删除最早进入的数据,先进先出 ↩︎

猜你喜欢

转载自blog.csdn.net/weixin_43699716/article/details/104754362