mongodb——原理简介,docker单机部署

news2025/1/12 19:07:54

MongoDB

noSQL数据库

特点

  • 数据文件存储格式为 BSON (JSON 的扩展)
    {“name”:“joe”}这是 BSON 的例子,其中"name"是键,"joe"是值。键值对组成了 BSON 格式。
  • 面向集合存储,易于存储对象类型和 JSON 形式的数据
    所谓集合(collection)有点类似一张表格,区别在于集合没有固定的表头。
  • 模式自由
    一个集合中可以存储一个键值对的文档,也可以存储多个键值对的文档,还可以存储键不一样
    的文档,而且在生产环境下可以轻松增减字段而不影响现有程序的运行。
  • 支持动态查询
    MongoDB 支持丰富的查询表达式,查询语句使用 JSON 形式作为参数,可以很方便地查询内嵌
    文档和对象数组
  • 完整的索引支持
  • 支持复制和故障恢复
    MongoDB 数据库从节点可以复制主节点的数据,主节点所有对数据的操作都会同步到从节点,
    从节点的数据和主节点的数据是完全一样的,以作备份。当主节点发生故障之后,从节点可以升级
    为主节点,也可以通过从节点对故障的主节点进行数据恢复
  • 二进制数据存储
    MongoDB 使用传统高效的二进制数据存储方式,可以将图片文件甚至视频转换成二进制的数据
    存储到数据库中
  • 自动分片
    自动分片功能支持水平的数据库集群,可动态添加机器。分片的功能实现海量数据的分布式存
    储,分片通常与复制集配合起来使用,实现读写分离、负载均衡,当然如何选择片键是实现分片功
    能的关键。
  • MongoDB 使用的是内存映射存储引擎。
    MongoDB 会把磁盘 IO 操作转换成内存操作,如果是读操作,内存中的数据起到缓存的作用:
    如果是写操作,内存还可以把随机的写操作转换成顺序的写操作,总之可以大幅度提升性能。但坏
    处是没有办法很方便地控制 MongoDB 占多大内存,MongoDB 会占用所有能用的内存,所以最好不
    要把别的服务和 MongoDB 放在同一台服务器部署

原理简介

MongoDB 存取读写速度快,甚至可以用来当作缓存数据库。但是在使用过程中会发现 MongoDB
服务非常占内存,几乎是服务器有多少内存就会占用多少内存。为什么会出现这种情况呢?我们要
从 MongoDB 的读写工作流程和对内存的使用方式说起
MongoDB 在存取工作流程上有一个设计决策,MongoDB 的所有数据实际上是存放在硬盘的,然后把部分或者全部要操作的数据通过内存映射存储引擎映射到内存中。 即是:虚拟内存+持久化的存储方式

在这里插入图片描述
如果是读操作,直接从内存中取数据,如果是写操作,就会修改内存中对应的数据,然后就不
需要管了。操作系统的虚拟内存管理器会定时把数据刷新保存到硬盘中。 内存中的数据什么时候写
到硬盘中,则是操作系统的事情了。

MongoDB 的存取工作流程区别于一般硬盘数据库在于两点:

  • 读:一般硬盘数据库在需要数据时才去硬盘中读取请求数据, MongoDB 则是尽可能地放入内
    存中。
  • 写:一般硬盘数据库在有数据需要修改时会马上写入刷新到硬盘,MongoDB 只是修改内存中的
    数据就不管了,写入的数据会排队等待操作系统的定时刷新保存到硬盘。

mongoDB的设计思路有两个好处:

  • 将什么时候调用 IO 操作写入硬盘这样的内存管理工作交给操作系统的虚拟内存管理
    器来完成,大大简化了 MongoDB 的工作。
  • 把随机的写操作转换成顺序的写操作,顺其自然地写入,而不是有数据修改就调 IO 操
    作去写入,这样减少了 IO 操作,避免了零碎的硬盘操作,大幅度提升性能。

当然也有坏处

  • 如果 MongoDB 在内存中修改了数据,在数据刷新到硬盘之前,停电了或者系统岩机
    了,就会丢失数据了。

针对这样的问题, MongoDB 设计了 Journal 模式, Journal 是服务器意外岩机的情况下,将数据库操作进行重演的日志(类似redolog)。如果打开 Journal ,默认情况下 MongoDB 100 毫秒(这是在数据文件和 Journal 文件处于同磁盘卷上的情况,而如果数据文件和 Journal 文件不在同磁盘卷上时,默认刷新输出时间是 30 毫秒)往 Journal 文件中 flush 次数据,那么即使断电也只会丢失 100ms 的数据,这对大多数应用来说都可以容忍了。从版 1.9.2+, MongoDB 默认打开 Journal 功能,以确保数据安全。而且 Journal 的刷新时间是可以改变的,使用–journalCommitInterval 命令修改,范围是2~300ms 值越低,刷新输出频率越高,数据安全度也就越高,但磁盘性能上的开销也更高。MongoDB 存取工作流程的实现关键在于通过内存映射存储引擎把数据映射到内存中。

存储引擎

MongoDB 目前支持的 MMAP,MMAPV1,WiredTiger 以及 In-Memory 存储引擎。目前主要流行 WiredTiger
引擎。官方讲解:wireTiger存储引擎

测试

docker部署单机mongo
拉取镜像
docker pull mongo:latest
运行容器
docker run -itd --name mongo -p 27017:27017 mongo --auth

# --auth 需要认证才能访问
创建用户设置密码
docker exec -it mongo mongo admin
 
docker exec -it mongo mongosh admin (5.0版本以上连接mongo使用命令mongosh)
 
 
创建一个名为 admin,密码为 test123456的用户
db.createUser({ user:'admin',pwd:'test123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});
 
 
尝试使用上面创建的用户信息进行连接
db.auth('admin', 'test123456');

talenty@k8smaster:~$ docker exec -it mongo mongo admin
MongoDB shell version v5.0.5
connecting to: mongodb://127.0.0.1:27017/admin?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("23af949c-008d-4963-9136-7240ad487a9d") }
MongoDB server version: 5.0.5
================
Warning: the "mongo" shell has been superseded by "mongosh",
which delivers improved usability and compatibility.The "mongo" shell has been deprecated and will be removed in
an upcoming release.
For installation instructions, see
https://docs.mongodb.com/mongodb-shell/install/
================
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
        https://docs.mongodb.com/
Questions? Try the MongoDB Developer Community Forums
        https://community.mongodb.com
>
> db.createUser({ user:'admin',pwd:'test123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});
Successfully added user: {
        "user" : "admin",
        "roles" : [
                {
                        "role" : "userAdminAnyDatabase",
                        "db" : "admin"
                },
                "readWriteAnyDatabase"
        ]
}
>
> db.auth('admin','test123456')
1
> exit
bye

用户权限
权限	             说明
read 	             允许用户读取指定数据库
readWrite	         允许用户读写指定数据库
dbAdmin	             允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin	         允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户
clusterAdmin	     只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限
readAnyDatabase	     只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase 只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase 只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase	 只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限
root	             只在admin数据库中可用。超级账号,超级权限

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

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

相关文章

【开源】基于Vue和SpringBoot的康复中心管理系统

项目编号: S 056 ,文末获取源码。 \color{red}{项目编号:S056,文末获取源码。} 项目编号:S056,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 普通用户模块2.2 护工模块2.3 管理员…

C++之谓词

C之谓词 一元谓词 #include<iostream> using namespace std; #include<vector> #include<algorithm> //仿函数 返回值类型是boo1数据类型&#xff0c;称为谓词 //一元谓词class GreaterFive { public:bool operator()(int val){return val > 5;} };void …

Windows 下 Sublime Text 2.0.2 下载及配置

1 下载地址&#xff1a; https://www.sublimetext.com/2 Sublime Text 2.0.2 (此版本选择了 portable version)&#xff0c;直接解压就可以使用。 https://download.sublimetext.com/Sublime Text 2.0.2.zip 2 配置Python相关环境 (前提 Pyhon 已加入环境变量) 2.1 新建 py …

Java 某市教育局综合信息管理平台

1) 项目简介 “互联网智慧教育”管理平台&#xff0c;实现全市教育信息系统集中建设和教育数据在云平台的汇集&#xff0c;在全市中小学整体实现电子班牌、家校通等功能&#xff0c;选取部分重点学校进行一卡通系统试点建设&#xff0c;实现智能化门禁、道闸、实体卡等功能…

【小黑送书—第八期】>>别再吐槽大学教材了,来看看这些网友强推的数学神作!

导读&#xff1a;关于大学数学教材的吐槽似乎从来没停止过。有人慨叹&#xff1a;数学教材晦涩难懂。错&#xff01;难懂&#xff0c;起码还可以读懂。数学教材你根本读不懂&#xff1b;也有人说&#xff1a;数学教材简直就是天书。 数学教材有好有坏&#xff0c;这话不假&…

实验三 页面置换算法

一. 实验目的&#xff1a; 1、熟悉虚存管理的各种页面淘汰算法 二、实验环境&#xff1a; 硬件环境&#xff1a;计算机一台&#xff0c;局域网环境&#xff1b; 软件环境&#xff1a;Windows XP及以上版本 Professional操作系统平台&#xff0c;Visual C 6.0专业版或企业版…

企业计算机服务器中了mallox勒索病毒怎么解决,勒索病毒解密文件恢复

随着科技技术的不断发展&#xff0c;网络技术得到了快速提升&#xff0c;但网络安全威胁也不断增加&#xff0c;近期&#xff0c;云天数据恢复中心陆续接到很多企业的求助信息&#xff0c;企业的计算机服务器遭到了mallox勒索病毒攻击&#xff0c;导致企业的所有业务中断&#…

网站被攻击怎么办

随着互联网的普及和网络攻击的日益增多&#xff0c;网站安全成为了众多企业和个人必须面对的重要问题。为了保护网站和用户数据的安全&#xff0c;内容分发网络&#xff08;CDN&#xff09;成为了一种有效的解决方案。本文将介绍CDN在保护网站安全、抵御网络攻击方面的作用和应…

C++之函数对象

C之函数对象 #include<iostream> using namespace std; #include<string> ///函数对象 (仿函数) //函数对象在使用时&#xff0c;可以像普通函数那样调用&#xff0c;可以有参数&#xff0c;可以有返回值 //函数对象超出普通函数的概念&#xff0c;函数对象可以有自…

优质好文链接

文章目录 1.开放源码有利于系统安全2.yum源配置&#xff0c;这一篇就够了&#xff01;(包括本地&#xff0c;网络&#xff0c;本地共享yum源)3.rpm包是什么4.SSH是什么意思&#xff1f;有什么功能&#xff1f; 1.开放源码有利于系统安全 开放源码有利于系统安全 2.yum源配置…

SQL零基础入门教程,贼拉详细!贼拉简单! 速通数据库期末考!(七)

LEFT JOIN LEFT JOIN 同样用于关联两个表&#xff0c;ON 关键字后指定两个表共有的字段作为匹配条件&#xff0c;与 INNER JOIN 不同的地方在于匹配不上的数据行&#xff0c;INNER JOIN 对两表匹配不上的数据行不返回结果&#xff0c;而 LEFT JOIN 只对右表&#xff08;table2…

80C51单片机的七种寻址方式

首先理解这样的等式 地址是20H的寄存器中&#xff0c;存放的内容是01H (20H)#01H 符号指令的书写格式 单个操作数的指令&#xff1a; 操作助记符 [目的操作数] 两个操作数的指令&#xff1a; 操作助记符[目的操作数],[源操作数] 描述符号 Rn(n0~7)当前工作寄存器组中的寄…

Pandas分组聚合_Python数据分析与可视化

Pandas分组聚合 分组单列和多列分组Series 系列分组通过数据类型或者字典分组获取单个分组对分组进行迭代 聚合应用单个聚合函数应用多个聚合函数自定义函数传入 agg() 中对不同的列使用不同的聚合函数 分组聚合的流程主要有三步&#xff1a; 分割步骤将 DataFrame 按照指定的…

【如何将任何直流电机变成伺服电机】

【如何将任何直流电机变成伺服电机】 1 前沿2 伺服电机工作原理3 如何制作定制伺服电机4 AS5600 编码器 – 磁性旋转位置传感器5 定制伺服电机电路图6 PCB设计7 自定义伺服3D模型8 定制伺服齿轮箱的 3D 打印零件9 对控制器进行编程9.1 引导加载程序刻录9.2 代码上传9.3 源代码9…

echarts 中如何添加左右滚动条 数据如何进行堆叠如何配置那些数据使用那个数据轴

左右滚动条的效果 此项的具体配置可参考 https://echarts.apache.org/zh/option.html#dataZoom-inside.moveOnMouseWheel dataZoom: [{id: dataZoomX,type: inside,// start: 0,// end: this.xAxis.length > 5 ? 10 : 100,startValue: this.xAxis.length > 5 ? 5 : 0,/…

linux如何重置root密码

目录 当我们想要重置root管理员密码时&#xff0c;我们可以有两种方法进行&#xff1a; 方法一、init方法 1、重启系统&#xff0c;在下图所示界面按e键 2、随后进入以下界面&#xff0c;、将ro修改为rw&#xff0c;在行末尾添加init/bin/sh。​编辑 3、随后按Ctrlx启动到s…

Java集合大总结——Iterator(迭代器)接口

Iterator接口 在程序开发中&#xff0c;经常需要遍历集合中的所有元素。针对这种需求&#xff0c;JDK专门提供了一个接口java.util.Iterator。 Iterator接口也是Java集合中的一员&#xff0c;但它与Collection、Map接口有所不同。 Collection接口与Map接口主要用于存储元素Ite…

C语言--有 n 个人围成一圈,顺序排号。 从第 1 个人开始报数,从 1 到 3 报数,凡是报到 3 的人退出圈子,问最后留下的是原来的第几号?

今天小编给大家分享以下约瑟夫环问题的处理。 一.题目描述 有 n 个人围成一圈,顺序排号。 从第 1 个人开始报数,从 1 到 3 报数,凡是报到 3 的人退出圈子,问最后留下的是原来的第几号? 这是一个典型的约瑟夫环的问题。 二.思路分析 难点一&#xff1a;我们如何表示人退出圈…

QEMU显示虚拟化的几种选项

QEMU可以通过通过命令行"-vga type"选择为客户机模拟的VGA卡的类别,可选择的类型有多个: -vga typeSelect type of VGA card to emulate. Valid values for type arecirrusCirrus Logic GD5446 Video card. All Windows versions starting from Windows 95 should …