【愚公系列】2022年05月 .NET架构班 057-分布式中间件 Mongodb的架构

举报
愚公搬代码 发表于 2022/05/06 23:31:50 2022/05/06
【摘要】 前言mongodb是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。mongodb是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。mongodb最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对...

前言

mongodb是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

mongodb是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。mongodb最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

一、MongoDB全局架构设计

高度模块化的设计是 MongoDB 的架构基础。在 MongoDB 中,除了少量的核心代码,其他一切皆为模块。

所有模块间是分层次、分类别的,MongoDB 官方共有五大类型的模块:核心模块、配置模块、事件模块、HTTP 模块、mail 模块、stream模块。它们之间的关系如下:

在这里插入图片描述
在这 5 种模块中,配置模块和核心模块是与 MongoDB 框架密切相关的。而事件模块则是 HTTP 模块和 mail 模块的基础。HTTP 模块和 mail 模块的“地位”类似,它们都是更关注于应用层面。

二、MongoDB Wiredtiger架构设计

1.Wiredtiger引擎写入原理

在这里插入图片描述
第一件事:把商品数据存储到缓存中

第二件事:把缓存中的数据同步到磁盘

2.Wiredtiger数据防丢失原理

在这里插入图片描述
如上图,图中多了一个 journaling buffer 和 journal 文件

2.1 journaling buffer

存放 mongodb 增删改指令的缓冲区

2.2 journal 文件

类似于关系数据库中的事务日志

引入 Journaling 的目的是:

Journaling 能够使 mongodb 数据库由于意外故障后快速恢复

3.Wiredtiger 索引原理

在这里插入图片描述
MongoDB中缓存和磁盘存储数据都是依靠B+树数据结构实现数据存储,root节点和Internal 节点存储索引数据,leaf存储真实数据

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。