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

news2024/11/19 7:40:27
  • 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在插入记录时额外分配一些未用空间。这样设计的目的是在文件变大的时候不至于把文档迁移到别处。记录头以整个记录的大小开始,包括该记录自己的位置以及前一个记录和后一个记录的位置。 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于YOLOV8模型的人脸口罩目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要:基于YOLOV8模型的人脸口罩目标检测系统可用于日常生活中检测与定位人脸口罩,利用深度学习算法可实现图片、视频、摄像头等方式的目标检测,另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算法训练数…

基于android的学生公寓后勤系统/学生公寓管理系统APP

摘 要 随着网络科技的发展,移动智能终端逐渐走进人们的视线,相关应用越来越广泛,并在人们的日常生活中扮演着越来越重要的角色。因此,关键应用程序的开发成为影响移动智能终端普及的重要因素,设计并开发实用、方便的应…

Git企业开发控制理论和实操-从入门到深入(四)|Git的远程操作|Gitee

前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…

Dart PowerTCP Emulation for .NET Crack

Dart PowerTCP Emulation for .NET Crack .NET CF上的PowerTCP Emulation为手持设备提供了高级的Internet通信组件。这些功能允许同步操作,这样可以消耗更少的资源,提供更大的灵活性,并生成易于维护的软件。带有.NET的PowerTCP仿真包括VT52、…

阿里云架构

负载均衡slb 分类以及应用场景 负载均衡slb clb 传统的负载均衡(原slb) 支持4层和7层(仅支持对uri(location),域名进行转发) 一般使用slb(clb) alb 应用负载均衡 只支持7层,整合了nginx负载均衡的各种功能,可以根据用户请求头,响应头 如果需要详细处理用户请求(浏…

OLED透明屏全贴合技术:未来显示技术的突破性创新

在现代科技发展的浪潮中,OLED透明屏全贴合技术以其独特的优势和无限的应用前景引起了广泛的关注。 在这篇文章中,尼伽将深入探索OLED透明屏全贴合技术,介绍其优势和特点,并展望其在不同领域的应用前景。 一、OLED透明屏全贴合技术…

29 - ref 和 $refs 获取dom和组件

作用: 利用 ref 和 $refs 可以用于 获取 dom 元素, 或 组件实例 特点: 查找范围 -> 当前组件内(更精确稳定) 1. 获取 dom: (1). 目标标签 - 添加 ref属性 <div ref"chartRef">我是渲染图表的容器</div> (2). 恰当时机,通过this.$refs.xxx,获取目标…

python-数据可视化-使用API

使用Web应用程序编程接口 &#xff08;API&#xff09;自动请求网站的特定信息而不是整个网页&#xff0c;再对这些信息进行可视化 使用Web API Web API是网站的一部分&#xff0c;用于与使用具体URL请求特定信息的程序交互。这种请求称为API调用 。请求的数据将以易于处理的…

.NET 操作 TDengine .NET ORM

TDengine 是国内比较流的时序库之一&#xff0c;支持群集并且免费&#xff0c;在.NET中资料比较少&#xff0c;这篇文章主要介绍SqlSugar ORM来操作TDengine 优点&#xff1a; 1、SqlSugar支持ADO.NET操作来实现TDengine&#xff0c;并且支持了常用的时间函数、支持联表、分…

channel并发编程

不要通过共享内存通信&#xff0c;要通过通信共享内存。 channel是golang并发编程中一种重要的数据结构&#xff0c;用于多个goroutine之间进行通信。 我们通常可以把channel想象成一个传送带&#xff0c;将goroutine想象成传送带周边的人&#xff0c;一个传送带的上游放上物品…

TouchGFX之调试

DebugPrinter类是一种在显示屏上打印调试消息的简单方法&#xff0c;无需向屏幕添加控件。 在使用DebugPrinter之前&#xff0c;需要分配一个实例并将其传递给Application类&#xff0c;且DebugPrinter实例必须兼容所使用的LCD类。 该表列出了DebugPrinter类名称&#xff1a; …

解决报错: Could not initialize class com.platform.cache.J2CacheUtils

今天运行一个比较久远的SSM项目&#xff0c;访问接口时报错&#xff1a; Could not initialize class com.platform.cache.J2CacheUtils 找了半天也没有发现问题所在&#xff0c;突然发现报错里面有ShiroFilter字样&#xff0c;然后想起以前shiro好像是要跟redis对接&#xff0…

Redis各类数据结构应用场景总结

Redis各类数据结构应用场景总结 引言String应用场景 List应用场景 Hash应用场景 Set应用场景 ZSet应用场景 小结 引言 实际面试过程中更多看重的是对Redis相关数据结构的活学活用&#xff0c;同时也可能会引申出Redis相关底层数据结构原理的实现&#xff0c;笔者最近面试过程中…

【ARP欺骗】嗅探流量、限速、断网操作

【ARP欺骗】 什么是ARP什么是ARP欺骗ARP欺骗实现ARP断网限制网速嗅探流量 什么是ARP ARP&#xff08;Address Resolution Protocol&#xff0c;地址解析协议&#xff09;是一个TCP/IP协议&#xff0c;用于根据IP地址获取物理地址。在计算机网络中&#xff0c;当一个主机需要发…

查看windows当前占用的所有端口、根据ipt终止任务进程、OS、operatingSystem

文章目录 查询端口查询指定端口根据进程pid查询进程名称查看所有进程名称根据pid终止任务进程根据进程名称终止任务 查询端口 netstat -ano查询指定端口 netstat -ano | findstr "80"根据进程pid查询进程名称 tasklist | findstr "660"查看所有进程名称 ta…

从哈希表到红黑树:探讨 epoll 是如何管理事件的?

揭开pkill的秘密&#xff1a;在Linux中杀死进程的完整指南 一、引言二、 传统事件管理的局限性三、epoll 概述3.1、epoll 的基本概念和工作原理3.2、epoll 在 Linux 内核中的实现方式 四、哈希表在事件管理中的挑战五、 红黑树在 epoll 中的应用六、epoll 中的事件注册与触发七…

TCP 和 UDP 的区别、TCP 是如何保证可靠传输的?

先来介绍一些osi七层模型 分为应用层、表示层、会话层、运输层、网络层、链路层、物理层。 应用层(数据)&#xff1a;确定进程之间通信的性质以及满足用户需要以及提供网络和用户应用&#xff0c;为应用程序提供服务&#xff0c;DNS&#xff0c;HTTP&#xff0c;HTTPS&#xf…

strcpy函数

目录 函数介绍&#xff1a; 函数声明&#xff1a; 具体使用&#xff1a; 情况一&#xff1a; 情况二&#xff1a; 注意事项&#xff1a; 1.源字符必须以 \0结束&#xff1a; 2.目标空间必须足够大&#xff0c;以确保能放源字符串&#xff1a; 3.目标空间必须可变&…

阿里2面:你们部署多少节点?1000W并发,当如何部署?

说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如阿里、网易、有赞、希音、百度、网易、滴滴的面试资格&#xff0c;遇到一几个很重要的面试题&#xff1a; 1000W并发&#xff0c;需部署多少个节点&#xff1f;如何觉得部署多少…

<八> objectARX开发:动态拖动Jig创建自定义实体

1、介绍 接上一篇文章,在某些情况下,CAD中的实体对象初始参数并不是固定的,我们需要通过jig动态拖动方式来绘制自定义实体,下面就用一个简单的例子来介绍一下自定义实体动态绘制。   实体形状:包括实体夹点和文字夹点拖动实现。 2、效果 3、源码 static void RYMyGrou…