我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mongo进阶-mongodb体系结构

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mongo进阶-mongodb体系结构

上面章节已经对MongoDB生态中工具以及使用有了基础,后续文章我们将开始理解MongoDB是如何支撑这些功能的。我们将从最基本的MongoDB的体系结构开始介绍,主要包括MongoDB的包结构MongoDB的数据逻辑结构MongoDB的数据文件结构。其中围绕着MongoDB的数据文件结构,将为我们后续介绍MongoDB的存储引擎详解打下基础。

MongoDB包组件结构

主要是MongoDB数据库服务以及一些工具。

回顾下我们在MongoDB生态中展示的MongoDB Database Tools在新窗口打开

  • 二进制导入导出
    • mongodump Creates a binary export of the contents of a mongod database.
    • mongorestore Restores data from a mongodump database dump into a mongod or mongos
    • bsondump Converts BSON dump files into JSON.
  • 数据导入导出
    • mongoimport Imports content from an Extended JSON, CSV, or TSV export file.
    • mongoexport Produces a JSON or CSV export of data stored in a mongod instance.
  • 诊断工具
    • mongostat Provides a quick overview of the status of a currently running mongod or mongos instance.
    • mongotop Provides an overview of the time a mongod instance spends reading and writing data.
  • GridFS 工具
    • mongofiles Supports manipulating files stored in your MongoDB instance in GridFS objects.

除了上述没有列举到,还有:

  • mongoperf: mongoDB自带工具,用于评估磁盘随机IO性能。

包组件可以在官网MongoDB Package Components在新窗口打开找到详细的用法。

其中最主要的程序当然是mongod(数据库服务),mongod在不同的部署方案中(单机部署,副本集部署,分片集群部署),通过不同的配置,可以扮演多种不同的角色:

  • 在单机部署中扮演 数据库服务器(提供所有读写功能)
  • 在副本集部署中,通过配置,可以部署为 primary节点(主服务器,负责写数据,也可以提供查询)、secondary节点(从服务器,它从主节点复制数据,也可以提供查询)、以及arbiter节点(仲裁节点,不保存数据,主要用于参与选举投票)
  • 在分片集群中,除了在每个分片中扮演上述角色外,还扮演着配置服务器的角色(存储有分片集群的所有元数据信息,mongos的数据路由分发等都要依赖于它)

在一台服务器上,可以启动多个mongod服务。但在实际生产部署中,通常还是建议一台服务器部署一个mongod实例,这样不仅减少资源竞争,而且服务器故障也不会同时影响到多个服务。

MongoDB数据逻辑结构

MongoDB 数据逻辑结构分为数据库(database)、集合(collection)、文档(document)三层 :

  • 一个mongod实例中允许创建多个数据库。
  • 一个数据库中允许创建多个集合(集合相当于关系型数据库的表)。
  • 一个集合则是由若干个文档构成(文档相当于关系型数据库的行,是MongoDB中数据的基本单元)。

数据库

一个数据库中可以创建多个集合,原则上我们通常把逻辑相近的集合都放在一个数据库中,当然出于性能或者数据量的关系,也可能进行拆分。

在MongoDB中有几个内建的数据库:

  • admin admin库主要存放有数据库帐号相关信息。
  • local local数据库永远不会被复制到从节点,可以用来存储限于本地单台服务器的任意集合副本集的配置信息、oplog就存储在local库中。
    • 重要的数据不要存储在local库,因为没有冗余副本,如果这个节点故障,存储在local库的数据就无法正常使用了。
  • config config数据库用于分片集群环境,存放了分片相关的元数据信息。
  • test MongoDB默认创建的一个测试库,连接mongod服务时,如果不指定连接的具体数据库,默认就会连接到test库。

集合

集合由若干条文档记录构成。

  • 前面介绍MongoDB的时候提到过,集合是schema-less的(无模式或动态模式),这意味着集合不需要在读写数据前创建模式就可以使用,集合中的文档也可以拥有不同的字段,随时可以任意增减某个文档的字段。
  • 在集合上可以对文档进行增删改查以及进行聚合操作。
  • 在集合上还可以对文档中的字段创建索引
  • 除了一般的集合外,还可以创建一种叫做**定容集合(capped collection)**类型的集合,这种集合与一般集合主要的区别是,它可以限制集合的容量大小,在数据写满的时候,又可以从头开始覆盖最开始的文档进行循环写入。
  • 副本集就是利用这种类型的集合作为oplog,记录primary节点上的写操作,并且同步到从节点重放,以实现主副节点数据复制的功能

文档

文档是MongoDB中数据的基本存储单元,它以一种叫做BSON文档的结构表示。BSON,即Binary JSON,多个键及其关联的值有序地存放在其中,类似映射,散列或字典。

  • 文档中的键/值对是有序的,不同序则是不同文档。并且键是区分大小写的,否则也为不同文档。
  • 文档的键是字符串,而值除了字符串,还可以是int, long, double,boolean,子文档,数组等多种类型。
  • 文档中不能有重复的键。
  • 每个文档都有一个默认的_id键,它相当于关系型数据库中的主键,这个键的值在同一个集合中必须是唯一的,_id键值默认是ObjectId类型,在插入文档的时候,如果用户不设置文档的_id值得话,MongoDB会自动生成生成一个唯一的ObjectId值进行填充。

MongoDB数据库文件

注意

MongoDB数据库文件和MongoDB存储的引擎有直接关系,MongoDB一共提供了三种存储引擎:WiredTiger,MMAPV1和In Memory;在MongoDB3.2之前采用的是MMAPV1; 后续版本v3.2开始默认采用WiredTiger; 且在v4.2版本中移除了MMAPV1的引擎。

在后续文章中,还将对MongoDB存储引擎进行详解。

MongoDB - MMAPv1引擎下的数据库文件

由于v3.0后续版本已经弃用了,所以这里不会详细介绍。

  • journal 日志文件
  • namespace 表名文件
  • data 数据及索引文件
db
|------journal
           |----_j.0
           |----_j.1
           |----lsn
|------local
           |----local.ns
           |----local.0
           |----local.1
|------mydb
           |----mydb.ns
           |----mydb.0
           |----mydb.1

MongoDB - WiredTiger

MongoDB v3.2已经将WiredTiger设置为了默认的存储引擎

  • collection-*.wt 存储collection的数据
  • index-*.wt 存储索引的数据
  • WiredTiger 存储基本配置信息
  • WiredTiger.wt 存储所有其它collection的元数据信息
  • WiredTiger.lock 存储进程ID,用于防止多个进程连接同一个Wiredtiger数据库
  • WiredTiger.turtle 存储WiredTiger.wt的元数据信息
  • journal 存储Write ahead log

后续的文章将对WiredTiger存储引擎进行详解。

参考文章

  • https://blog.csdn.net/eagle89/article/details/80606372
  • https://blog.csdn.net/iteye_19607/article/details/82643225
  • https://blog.csdn.net/zhaowen25/article/details/41871383
  • https://zhuanlan.zhihu.com/p/34248254

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

mongo进阶-mongodb体系结构

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

mongo进阶-mongodb体系结构

上面章节已经对MongoDB生态中工具以及使用有了基础,后续文章我们将开始理解MongoDB是如何支撑这些功能的。我们将从最基本的MongoDB的体系结构开始介绍,主要包括MongoDB的包结构,MongoDB的数据逻辑结构,MongoDB的数据文件结构。其中围绕着MongoDB的数据文件结构,将为我们后续介绍Mong
mongo进阶-mongodb体系结构
2024-04-02

mongo进阶-wt引擎-数据结构

MongoDB的WiredTiger存储引擎背后采用了什么样的数据结构呢?本文将从常见引擎数据结构,典型B-Tree数据结构,磁盘数据结构, 内存数据结构, Page数据结构等方面详解介绍。Mongo进阶 - WT引擎:数据结构存储引擎及常见数据结构典型B-Tree数据结构WiredTiger数据文件在磁盘上的数据结构
mongo进阶-wt引擎-数据结构
2024-04-02

mongo进阶-系统设计-模式构建

MongoDB使用文档数据模型具有内在的灵活性,允许数据模型支持你的应用程序需求, 灵活性也可能导致模式比它们应有样子的更复杂。这涉及到如何在MongoDB中设计数据库模式(schema),有一个严峻的现实,大多数性能问题都可以追溯到糟糕的模式设计。Mongo进阶 - 系统设计:模式构建多态模式属性模式桶模式异常值模式
mongo进阶-系统设计-模式构建
2024-04-02

编程热搜

  • mongo入门-基本使用-安装和crud
    在理解MongoDB基础概念后,本文将介绍MongoDB的安装和最基本的CURD操作。Mongo入门 - 基本使用:安装和CRUDMongoDB安装一些参考文档以Linux为例安装连接和建库CRUD操作InsertQueryUpdateDeleteBulkWrite参考文档# MongoDB安装MongoDB的安装比较
    mongo入门-基本使用-安装和crud
  • mongo入门-基本使用-java-api
    本文为低优先级,只是向你介绍下MongoDB提供的原生的JavaAPI;而大多数公司使用Spring框架,会使用Spring Data对MongoDB原生API的封装,比如JPA,MongoTemplate等。Mongo入门 - 基本使用:Java APIMongoDB Driver代码测试# MongoDB Driv
    mongo入门-基本使用-java-api
  • mongo进阶-db核心-索引实现
    为什么需要索引?当你抱怨MongoDB集合查询效率低的时候,可能你就需要考虑使用索引了,为了方便后续介绍,先科普下MongoDB里的索引机制(同样适用于其他的数据库比如mysql)。mongo-9552:PRIMARY> db.person.find(){ "_id"&nb
    mongo进阶-db核心-索引实现
  • mongo进阶-wt引擎-checkpoint原理
    Checkpoint主要有两个目的: 一是将内存里面发生修改的数据写到数据文件进行持久化保存,确保数据一致性;二是实现数据库在某个时刻意外发生故障,再次启动时,缩短数据库的恢复时间,WiredTiger存储引擎中的Checkpoint模块就是来实现这个功能的。Mongo进阶 - WT引擎:checkpoint原理为什么
    mongo进阶-wt引擎-checkpoint原理
  • mongo进阶-db核心-分片sharding
    分片(sharding)是MongoDB通过水平扩展将数据集分布在不同的服务器上来提高自己的存储容量和吞吐量。和MySQL分区方案相比,MongoDB的最大区别在于它几乎能自动完成所有事情,只要告诉MongoDB要分配数据,它就能自动维护数据在不同服务器之间的均衡。Mongo进阶 - DB核心:分片Sharding分片
    mongo进阶-db核心-分片sharding
  • mongo入门-mongodb整体生态
    很多人在学习Mongo时仅仅围绕着数据库功能,围绕着CRUD和聚合操作,但是MongoDB其实已经基本形成了它自身的生态了。我们在学习一项技能时一定要跳出使用的本身,要从高一点的格局上了解整个生态,这样会对你构筑知识体系有很大的帮助。Mongo入门 - MongoDB整体生态整体生态MongoDB ServerMong
    mongo入门-mongodb整体生态
  • mongo入门-基本使用-spring集成
    本文为主要介绍Spring Data对MongoDB原生API的封装,比如Spring-data-mongo,MongoTemplate等。以及原生API和Spring data系列之间的关系。Mongo入门 - 基本使用:Spring集成Spring Data 与 MongoDBSpring Data的层次结构spr
    mongo入门-基本使用-spring集成
  • mongo入门-mongodb基础概念
    在学习MongoDB之前先简单了解相关概念。Mongo入门 - MongoDB基础概念什么是NoSQL?为什么使用NoSQL?NoSQL数据库的简要历史NoSQL的功能什么是MongoDBMongoDB功能为什么使用MongoDBMongoDB常用术语MongoDB与RDBMS区别# 什么是NoSQL?NoSQL是一种
    mongo入门-mongodb基础概念
  • mongo入门-基本使用-效率工具
    本文将主要介绍常用的MongoDB的工具,这些工具可以极大程度的提升你的效率。Mongo入门 - 基本使用:效率工具官方MongoDB CompassNoSQLBoosterRobot3TVs Code plugin其它# 官方MongoDB Compass推荐使用MongoDB Compass,所以详细截几个图给大家
    mongo入门-基本使用-效率工具
  • mongo进阶-db核心-复制集
    在实际的生产环境中,我们需要考虑数据冗余和高可靠性,即通过在不同的机器上保存副本来保证数据的不会因为单点损坏而丢失;能够随时应对数据丢失、机器损坏带来的风险。MongoDB的复制集就是用来解决这个问题的,一组复制集就是一组mongod实例掌管同一个数据集,实例可以在不同的机器上面。实例中包含一个主导,接受客户端所有的写
    mongo进阶-db核心-复制集

目录