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

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

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

相关文章

【蓝桥杯选拔赛真题13】Scratch接苹果游戏 少儿编程scratch蓝桥杯选拔赛真题讲解

目录 scratch接苹果游戏 一、题目要求 编程实现 二、题目分析

【JAVA】String 类

⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 📀 收录专栏:浅谈Java 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 String 1. 字符串构造2. String对象的比…

2005-2022年全国各地级市经济增长目标约束

2005-2022年全国各地级市经济增长目标约束 1、时间:2005-2022年 2、来源:政府工作报告 3、指标:省份、城市、年份、经济增长目标硬约束、经济增长目标软约束 4、范围:地级市,每年具体城市数量参看下面图片 5、指标…

第七周 停车场模拟

烟台大学计算机与控制工程学院 作者: 郝环宇 日期:10.13 问题描述:设停车场是一个可停放n辆汽车的狭长死胡同,南边封口,汽车只能从北边进出(这样的停车场世间少有)。 汽车在停车场内按车辆到达时间的先后…

实战项目密室逃脱

密室逃脱 对摄像机的智能控制(很有用),当遇到墙壁时可以自动抬高。 把环境设为静态的,调小slope,调小半径,bake。 创建AI机器人,给上如图组件,大的球碰撞器用来检测是否遇到玩家…

【Java】789. 逃脱阻碍者---简化主题大意,主要求x+y和到达目标点的最短距离,快速解决问题!!!

你在进行一个简化版的吃豆人游戏。你从 [0, 0] 点开始出发,你的目的地是 target [xtarget, ytarget] 。地图上有一些阻碍者,以数组 ghosts 给出,第 i 个阻碍者从 ghosts[i] [xi, yi] 出发。所有输入均为 整数坐标 。 每一回合,…

【蓝桥模板】——迷宫逃脱夺命3问,你能坚持到哪1问?(BFS模板)

大家好,我是爱分享的小蓝,欢迎交流指正~ 全文目录🧭 🎁说在前面 🏆模板-BFS迷宫⭐ 🚀传送锚点​ 💡思路点拨 🍞代码详解 🏆走迷宫Ⅰ⭐ 🚀传送锚点 &…

MVSNet 和 PatchMatchNet 的DTU数据集 几个不同之处 一定要注意

文章目录 1 测试集 数据加载不同2 训练集 数量 分辨率不同 1 测试集 数据加载不同 1.MVSNet 的DTU测试数据集和PatchmatchNet测试数据集不一样; 区别在于数据加载,前者 cams文件最后是最小深度和间隔,后者是最小深度和最大深度。 2 训练集 …

最强嘴提o.o文字转语音

下载 链接:https://pan.baidu.com/s/1cb24WW2dihtRpMz4giMxyw 提取码:k3xu 解压密码:领航员未鸟 项目源码:https://github.com/Plachtaa/VITS-fast-fine-tuning/tree/main 使用 解压后来到,该目录下,把…

覆盖诊所全流程管理,适合中大型诊所门诊的门诊管理系统

诊所全流程管理查询 从线上与线下的角度入手,一套合格好用的诊所管理系统包括互联网医疗的线上咨询问诊、预约挂号,并且还有线下的患者登记、病历处方录入、药品进销存、财务报表等管理,将各位患者的信息数据在平台共享,方便医生…

医生病人管理系统MySQL设计_医院门诊管理系统的设计与实现(JSP,MySQL)(含录像)

医院门诊管理系统的设计与实现(JSP,MySQL)(含录像)(毕业论文6800字,程序代码,MySQL数据库) 随着信息化的飞速发展和普遍使用,计算机在各行各业得到越来越广泛的应用,医疗卫生领域作为实现信息化的重点,医院面临信息时代的挑战,医院…

门诊分诊管理系统分诊台程序

其详细功能如下:1. 设置挂号数量警报线系统可以为每个科室的每个医生(特别是专家号),设定挂号数量警报线。当就诊病人数量超过限定的数量时,计算机系统会自动报警来通知管理人员、护士、医生,以便及时提示护…

网络工程毕业设计 SSM疫情期间医院门诊管理系统(源码+论文)

文章目录 1 项目简介2 实现效果2.1 界面展示 3 设计方案3.1 概述3.2 系统开发流程3.3 系统结构设计 4 项目获取 1 项目简介 Hi,各位同学好呀,这里是M学姐! 今天向大家分享一个今年(2022)最新完成的毕业设计项目作品,【基于SSM的…

ssm java mysql_医院门诊管理系统_

息化不断建设发展的今天,医院看病预约,医生的挂号等,已经十分方便,通过在线挂号,医生的查看,就能够了解到医院的门诊基本信息,并且可以在线进行门诊的医生查看,医院最新的资讯等&…

java校园医院门诊管理系统ssm

系统分为用户,医生和管理员三个角色 1.系统登录:系统登录是用户访问系统的路口,设计了系统登录界面,包括用户名、密码和验证码,然后对登录进来的用户判断身份信息,判断是管理员用户还是普通用户…

计算机毕业设计 SSM+MySQL毕业设计 疫情期间医院门诊管理系统

摘 要 21世纪的到来,国家的方方面面、各行各业都在努力与现代的先进技术接轨,智能科技时代崛起的优势,医院门诊管理系统当然也不能排除在外。疫情期间医院门诊管理系统是以实际运用为开发背景,运用软件工程开发方法,…

基于javaweb+jsp的医院门诊病例管理系统

基于javawebjsp的医院门诊病例管理系统 JavaWeb JavaBean JSP MVC MySQL Tomcat JavaScript Bootstrap 基础JSPServlet或JSPSSM(Spring、SpringMVC、MyBatis)框架或JSPSSMMaven(pom.xml)框架或SpringBoot…均可修改 开发工具:eclipse/idea/myeclipse/sts等均可配…

涛然自得周刊(第06期):韩版苏东坡的突围

作者:何一涛 日期:2023 年 8 月 27 日 涛然自得周刊主要精选作者阅读过的书影音内容,不定期发布。历史周刊内容可以看这里。 电影 兹山鱼谱 讲述丁若铨因政治事件被贬黜到了遥远的黑山岛。来到岛上后,丁被大自然环境疗愈&#…

Springboot+vue的医院门诊管理系统的设计与实现(也有SpringCloud版本)

基于Springboot的门诊管理系统的设计与实现 Springboot(springcloud)vue的门诊管理系统的设计与实现系统整体功能设计患者端医生模块实现管理员模块实现 Springboot(springcloud)vue的门诊管理系统的设计与实现 由需求分析阶段可以得出本门诊管理系统的各功能模块如图4.1所示。…

基于springboot的医院门诊管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 系统功能…