【MongoDB系列】-MongoDB详解(一文让你明白什么是MongoDB)

  • MongoDB简介
    MongoDB 是一个开源的、跨平台的、面向文档的、基于分布式文件存储的数据库系统,MongoDB 是由 C++ 语言开发,旨在为 Web 应用提供可扩展的高性能数据存储解决方案。在高负载的情况下,通过添加更多的节点,可以保证服务器性能。
    MongoDB常常被归类为NoSQL数据库系统,也是当前NoSQL数据库的一种。
  • MongoDB特点
    1. 高可用:MongoDB提供复制工具(副本集),支持自动故障转移,数据冗余,副本集一组相同数据集合的MongoDB实例,提供数据高可用的冗余数据。
    2. 高性能:MongoDB提供数据持久化方式,包含对嵌入式数据模型的支持,支持数据索引,并且索引可以包含文档及其数组的键
    3. 水平拓展:MongoDB提供分片来完成数据库水平上的扩展。分片(sharding)是指将数据拆分,将其分散存在不同的机器上的过程。分片也称为分区(partitioning)。将数据分散到不同的机器上,实现对数据的分布式存储,到达存储海量数据,负载更多请求。
    4. 支持多种存储引擎:MongoDB支持多个存储引擎:WiredTiger存储引擎、MMAPv1存储引擎、InMemory内存存储引擎。另外,MongoDB提供可插拔的存储引擎API供第三方开发自己的存储引擎。
    5. 丰富的查询语言:MongoDB提供丰富的查询语言以支持读写操作及其数据的聚会、文本搜索和地理信息查询。
  • MongoDB体系结构MongoDB是一个实例,由多个数据库(Database)组成;一个数据库,由多个集合(Collection)组成;一个集合,又由多个文档(Document)组成。结构关系如下图

    image

    MongoDB名词解释:
    1. 实例:由后台进程及其高速缓存组成,负责维护和访问数据库数据
    2. 数据库(Database):一个MongoDB实例可以创建多个数据库,需要注意不同的数据库存放在不同的文件中。
      MongoDB中有三个特殊的数据库:admin、local(本地数据库,永远不可以复制,且一台服务器上的所有本地集合都可以放在这个数据库中)、config(用于分片设置、保存分片信息)。
    3. 集合(Collection):集合可以看做是关系型数据库中的表,不同的是关系型数据库中的表存放的是表数据,但 Collection 存放的是文档。需要注意的是:集合是“动态模式”的,对于文档的格式没有要求,所以十分自由。
  • MongoDB常用术语与SQL类比
编号MongoDB术语/概念SQL术语/概念说明
1databasedatabase数据库
2collectiontable数据库/集合
3documentrow数据记录行/文档
4fieldcolumn数据字段/域
5indexindex索引
6primary keyprimary key主键
7Embedded DocumentsTable join表链接
  • MongoDB 数据存储结构
    MongoDB的默认数据目录是/data/db,它负责存储所有的MongoDB的数据文件。在MongoDB内部,每个数据库包含一个*.ns文件和一些数据文件,而且这些数据文件会随着数据量的增加而变得越来越多。
    MongoDB 内部有预分配空间的机制,每个预分配的文件都用 0 进行填充,由于有了这个机制,MongoDB 始终保持额外的空间和空余的数据文件,从而有效避免了由于数据暴增而带来的磁盘压力过大的问题。
    数据库的每张表都对应一个命名空间,每个索引也有对应的命名空间。这些命名空间的元数据都集中在在 *.ns 文件中。
  • MongoDB体系结构详细说明
编号名称说明
1mongod数据库服务
2mongos分片集群部署中,数据和查询的路由服务
3mongoshell客户端
4mongoimport / mongoexport导入导出工具
5mongodump / mongorestore备份恢复工具
6mongooplog拉取并重放oplog的工具
7mongostat、mongotop、mongosniff监控工具
8mongofilesGridFS的命令行操作工具
9mongoperf性能测试工具-(当前版本只能测试I/O)
10bsondump查看bson文件的工具
  • MongoDB数据库文件类型MongoDB的数据库文件主要有3种:
    1. journal 日志文件
    2. namespace 表名文件
    3. data 数据及索引文件
    • 日志文件
      MongoDB的日志文件只是用来在系统出现宕机时候恢复尚未来得及同步到硬盘的内存数据。日志文件会存放在一个分开的目录下面。启动时候MongoDB会自动预先创建3个每个为1G的日志文件(初始为空)。除非你真的有持续海量数据并发写入,一般来说3个G已经足够。
    • 命名文件 dbname.ns
      用来存储整个数据库的集合以及索引的名字。这个文件不大,默认16M,可以存储24000个集合或者索引名以及那些集合和索引在数据文件中得具体位置。通过这个文件MongoDB可以知道从哪里去开始寻找或插入集合的数据或者索引数据。这个值可以通过参数调整至2G。
    • 数据文件 dbname.0, dbname.1,… dbname.n
      MongoDB的数据以及索引都存放在一个或者多个MongoDB数据文件里。第一个数据文件会以“数据库名.0”命名,如 my-db.0。这个文件默认大小是64M,在接近用完这个64M之前,MongoDB 会提前生成下一个数据文件如my-db.1。数据文件的大小会2倍递增。第二个数据文件的大小为128M,第三个为256M。一直到了2G以后就会停止,一直按这个2G这个大小增加新的文件。
      当然MongoDB还会生成一些临时文件如 _tmp 和 mongod.lock等, 不过他们跟我们的讨论都没有太大相关性
  • 数据文件结构MongoDB把所存储的BSON文档的数据和B树索引组织到逻辑容器“Extent”里面。Extent特性:
    • 一个文件可以有多个Extent。
    • 每一个Extent只会包含一个集合的数据或者索引。
    • 同一个集合的数据或索引可以分布在多个Extent内。
    • 同一个Extent不会又有数据又有索引。
  • 每一个Extent存放多个Record,每个记录包含一个记录头及MongoDB的BSON文档,以及一些额外的padding空间。Padding是MongoDB在插入记录时额外分配一些未用空间。这样设计的目的是在文件变大的时候不至于把文档迁移到别处。记录头以整个记录的大小开始,包括该记录自己的位置以及前一个记录和后一个记录的位置。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/92525.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【面试题】UDP和TCP有啥区别?

UDP UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就…

【Git】测试持续集成——Git+Gitee+PyCharm

文章目录 概述一、使用Gitee1. 注册账号2. 绑定邮箱3. 新建仓库4. 查看项目地址 二、安装配置Git1. 下载安装包2. 校验是否安装成功。3. 配置Git4. Git命令5. Git实操 三、PyCharmGit1. 配置Git2. Clone项目3. 提交文件到服务器4. 从服务器拉取文件 概述 持续集成(…

Elasticsearch 8.X reindex 源码剖析及提速指南

1、reindex 源码在线地址 为方便大家验证,这里给出 reindex github 源码地址。 https://github.com/elastic/elasticsearch/blob/001fcfb931454d760dbccff9f4d1b8d113f8708c/server/src/main/java/org/elasticsearch/index/reindex/ReindexRequest.java reindex 常见…

计网第四章(网络层)(四)

目录 一、IP数据报的发送和转发过程 发送: 1.直接交付和间接交付 如果判断源主机和目的主机是否在同一个网络中? 2.默认网关: 转发: 路由表: 一、IP数据报的发送和转发过程 发送: 由主机发送IP数据…

有什么react进阶的项目推荐的?

前言 整理了一些react相关的项目,可以选择自己需要的练习,希望对你有帮助~ 1.ant-design Star:87.1k 阿里开源的react项目,作为一个UI库,省去重复造轮子的时间 仓库地址:https://github.com/ant-design/…

【现场问题】oracle 11g 和12c 使用jdbc链接,兼容的问题

oracle不同版本 问题是什么寻找解决方式首先Oracle的jdbc链接有几种形式?Oracle 11g的链接是什么呢Oracle 12C的链接是什么呢我的代码是哪种!?发现问题没 解决问题代码 问题是什么 项目上建立Oracle数据源,以前大部分都是,11g的…

【Vue】vue2项目使用swiper轮播图2023年8月21日实战保姆级教程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、npm 下载swiper二、使用步骤1.引入库声明变量2.编写页面3.执行js 总结 前言 swiper轮播图官网 参考文章,最好先看完他的介绍,再看…

SQL Server 执行报错: “minus“ 附近有语法错误。

sql server 执行带 minus 的语句一直报错,如下图: 找了好久才知道minus是Oracle里面的语法,SQL server 应用 EXCEPT。

Vue2向Vue3过度Vuex核心概念module模块

目录 1 核心概念 - module1.目标2.问题3.模块定义 - 准备 state 2 获取模块内的state数据1.目标:2.使用模块中的数据3.代码示例 3 获取模块内的getters数据1.目标:2.语法:3.代码演示 4 获取模块内的mutations方法1.目标:2.注意&am…

docker,nvidia-docker安装

卸载先前的docker Docker 的旧版本被称为 docker,docker.io 或 docker-engine 。如果已安装,请卸载它们: sudo apt-get remove docker docker-engine docker.io containerd runc使用 Docker 仓库进行安装 设置仓库 更新 apt 包索引 sudo…

【C++】特殊类的设计

特殊类的设计 前言正式开始设计一个类,不能被拷贝设计一个类,只能在堆上创建对象设计一个类,只能在栈上创建对象设计一个类,不能被继承设计一个类,只能创建一个对象(单例模式)饿汉模式懒汉模式总结 前言 点进来的同学…

三次握手四次挥手之全连接半连接队列

什么是全连接半连接 在 TCP 三次握手的时候,Linux 内核会维护两个队列,分别是: 半连接队列,也称 Listen 队列;全连接队列,也称 accept 队列; 工作原理 每一个socket执行listen时&#xff0c…

BIO到NIO、多路复用器, 从理论到实践, 结合实际案例对比各自效率与特点(下)

文章目录 多路复用器简介多路复用器的两个阶段Java中的多路复用器封装测试代码压测结果总结 本篇文章是BIO到NIO、多路复用器, 从理论到实践, 结合实际案例对比各自效率与特点(上)的下一篇, 如果没有看的小伙伴, 可以先看下, 不然可能会不连贯. 多路复用器简介 多路复用器是对…

【QT】重写QAbstractLIstModel,使用ListView来显示多列数据

qt提供了几个视图来进行信息的列表显示,QListView可以用来显示继承QStractListModel的字符串列表中的字符串,默认的模型里面只包含一列的内容: 这里以qml为例子,先新建一个qml的项目,示例代码如下: 先创建一…

【提升接口响应能力的最佳实践】常规操作篇

文章目录 1. 并行处理简要说明CompletableFuture是银弹吗?测试案例测试结论半异步,半同步总结 2. 最小化事务范围简要说明编程式事务模板 3. 缓存简要说明 4. 合理使用线程池简要说明使用场景线程池的创建参数的配置建议 线程池的监控线程池的资源隔离 5…

idea的debug断点的使用

添加断点(目前不知道如何添加断点,就给AutoConfigurationImportSelector的每个方法都加上断点): 然后将StockApplication启动类以debug方式运行,然后程序就会停在119行 点击上边的step over让程序往下运行一行&#x…

HLS实现CORDIC算法计算正余弦并上板验证

硬件:ZYNQ7010 软件:MATLAB 2019b、Vivado 2017.4、HLS 2017.4、System Generator 2017.4 1、CORDIC算法计算正余弦 CORDIC算法详细分析网上有很多资料,它的原理是用一系列旋转去逼近目标角度,这一系列旋转的角度为 θ a r c t…

Git gui教程---第七篇 Git gui的使用 返回上一次提交

1. 查看历史,打开gitk程序 2. 选中需要返回的版本,右键,然后点击Rest master branch to here 3.出现弹窗 每个选项我们都试一下,从Hard开始 返回的选项 HardMixedSoft Hard 会丢失所有的修改【此处的…

【Jellyfin影音服务器】 本地部署公网远程影音库

文章目录 1. 前言2. Jellyfin服务网站搭建2.1. Jellyfin下载和安装2.2. Jellyfin网页测试 3.本地网页发布3.1 cpolar的安装和注册3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5. 结语 1. 前言 随着移动智能设备的普及,各种各样的使用需求也被开发出来&…

dig批量域名逆向查询ip

dig批量域名逆向查询ip dig nocmd noall answer -f iplist.txtiplist.txt中内容 效果图: dig其他选项参数: dig www.baidu.com A # 查询A记录,如果域名后面不加任何参数,默认查询A记录 dig www.baidu.com MX # 查询MX记…