mongodb——原理简介,docker单机部署
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 admindocker 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, seehttps://docs.mongodb.com/
Questions? Try the MongoDB Developer Community Forumshttps://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数据库中可用。超级账号,超级权限
相关文章:

mongodb——原理简介,docker单机部署
MongoDB noSQL数据库 特点 数据文件存储格式为 BSON (JSON 的扩展) {“name”:“joe”}这是 BSON 的例子,其中"name"是键,"joe"是值。键值对组成了 BSON 格式。面向集合…...

ThinkPHP 系列漏洞
目录 2、thinkphp5 sql注入2 3、thinkphp5 sql注入3 4、 thinkphp5 SQL注入4 5、 thinkphp5 sql注入5 6、 thinkphp5 sql注入6 7、thinkphp5 文件包含漏洞 8、ThinkPHP5 RCE 1 9、ThinkPHP5 RCE 2 10、ThinkPHP5 rce3 11、ThinkPHP 5.0.X 反序列化漏洞 12、ThinkPHP…...

系列十、你说你做过JVM调优和参数配置,请问如何盘点JVM系统的默认值?
一、JVM的参数类型 1.1、标配参数 java -versionjava -help 1.2、XX参数 1.2.1、Boolean类型 公式:-XX:或者- 某个属性值 表示开启、-表示关闭 # 是否打印GC收集细节 -XX:PrintGCDetails -XX:-PrintGCDetails# 是否使用串行垃圾收集器 -XX:UseSerialGC -XX:-UseS…...

Java Web——Web开发介绍
什么是Web开发 Web开发是一种创建和维护全球广域网(World Wide Web)上的网站和应用的技术。全球广域网也称为万维网(www World Wide Web),是一个能够通过浏览器访问的互联网上的巨大信息库。 Web开发的目标是创建功能齐全、易于使用和安全的…...
Vue 数据监听机制及 Vue 2.0 和 Vue 3.0 的比较
Vue 数据监听机制 在 Vue 中,数据的变化通常是通过数据劫持(Data Binding)和观察者模式来实现的。当数据发生变化时,Vue 能够自动更新视图。 Vue 2.0 的数据监听 在 Vue 2.0 中,数据监听是通过 Object.defineProper…...
QT多线程项目中子线程无法修改主线程的ui组件
情况描述 今天我创建了一个QT多线程的工程,框架如下。我希望通过指针的方式,让子线程去直接修改主线程的ui组件,但事与愿违。 class ChildThread : public QThread {Q_OBJECT public:ChildThread (MainThread* par):m_Par(par){}; protecte…...

Python 如何实现备忘录设计模式?什么是备忘录设计模式?Python 备忘录设计模式示例代码
什么是备忘录(Memento)设计模式? 备忘录(Memento)设计模式是一种行为型设计模式,用于捕获一个对象的内部状态,并在对象之外保存这个状态,以便在需要时恢复对象到先前的状态。这种模…...

LangChain 代理 Agent(学习笔记)
原文:LangChain 代理 Agent(学习笔记) - 尘叶心繁的专栏 - TNBLOG LangChain 代理 Agent(学习笔记) LangChain 代理 Agent(学习笔记) 简介Agent Zero-shot ReActStructured Input ReActOpenAI FunctionsConversationalSelf ask with searchReAct document storePlan…...

实验三 页面置换算法
一. 实验目的: 1、熟悉虚存管理的各种页面淘汰算法 二、实验环境: 硬件环境:计算机一台,局域网环境; 软件环境:Windows XP及以上版本 Professional操作系统平台,Visual C 6.0专业版或企业版…...
Node.js中的Buffer和Stream
Node.js中的Buffer和Stream 计算机只能理解二进制数据,即0和1形式的数据。这些数据的顺序移动称为流。以称为块(chunk)的破碎部分流式传输数据;计算机一收到数据块就开始处理数据,而不用等待整个数据。 我们这篇文章…...

3.5 Windows驱动开发:应用层与内核层内存映射
在上一篇博文《内核通过PEB得到进程参数》中我们通过使用KeStackAttachProcess附加进程的方式得到了该进程的PEB结构信息,本篇文章同样需要使用进程附加功能,但这次我们将实现一个更加有趣的功能,在某些情况下应用层与内核层需要共享一片内存…...

【小黑送书—第八期】>>别再吐槽大学教材了,来看看这些网友强推的数学神作!
导读:关于大学数学教材的吐槽似乎从来没停止过。有人慨叹:数学教材晦涩难懂。错!难懂,起码还可以读懂。数学教材你根本读不懂;也有人说:数学教材简直就是天书。 数学教材有好有坏,这话不假&…...

MatLab的下载、安装与使用(亲测有效)
1、概述 MatLab是由MathWorks公司开发并发布的,支持线性代数、矩阵运算、绘制函数和数据、信号处理、图像处理以及视频处理等功能。广泛用于算法开发、数据可视化、数据分析以及数值计算等。 Matlab 的主要特性包括: 简单易用的语法,使得程…...

无人智能货柜:引领便捷购物新体验
无人智能货柜:引领便捷购物新体验 无人智能货柜利用人工智能技术,将传统货架与电子商务相结合,形成智能销售终端。其采用先拿货后付款的购物模式,用户只需扫码、拿货、关门三个简洁流畅的步骤,极大地提升了消费者的购物…...

4.6 Windows驱动开发:内核遍历进程VAD结构体
在上一篇文章《内核中实现Dump进程转储》中我们实现了ARK工具的转存功能,本篇文章继续以内存为出发点介绍VAD结构,该结构的全程是Virtual Address Descriptor即虚拟地址描述符,VAD是一个AVL自平衡二叉树,树的每一个节点代表一段虚…...

基于世界杯算法优化概率神经网络PNN的分类预测 - 附代码
基于世界杯算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于世界杯算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于世界杯优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络…...

NPM 与 XUI 共存!Nginx Proxy Manager 搭配 X-UI 实现 Vless+WS+TLS 教程!
之前分享过搭建可以与宝塔共存的一个 “魔法” 服务器状态监控应用 ——xui,支持 VmessWSTLS。 最近 Docker 视频出的比较多,前阵子又出现了宝塔国内版存在隐私泄露的问题,很多小伙伴其实都不用宝塔了,那么,在我们现在…...

【网络奇遇记】那年我与计算机网络的浅相知
🌈个人主页:聆风吟 🔥系列专栏:网络奇遇记、数据结构 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 一. 计算机网络的定义1.1 计算机早期的一个最简单的定义1.2 现阶段计算机网络的一个较好的定义 二. …...
LeetCode26.删除有序数组中的重复项(双指针法)
LeetCode26.删除有序数组中的重复项 1.问题描述2.解题思路3.代码 1.问题描述 给你一个 非严格递增排列 的数组 nums ,请你** 原地** 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然…...

原型网络Prototypical Network的python代码逐行解释,新手小白也可学会!!-----系列8
文章目录 前言一、原始代码二、对每一行代码的解释:总结 前言 这是该系列原型网络的最后一段代码及其详细解释,感谢各位的阅读! 一、原始代码 if __name__ __main__:##载入数据labels_trainData, labels_testData load_data() # labels_…...

网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...

苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...

Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...

向量几何的二元性:叉乘模长与内积投影的深层联系
在数学与物理的空间世界中,向量运算构成了理解几何结构的基石。叉乘(外积)与点积(内积)作为向量代数的两大支柱,表面上呈现出截然不同的几何意义与代数形式,却在深层次上揭示了向量间相互作用的…...

DeepSeek越强,Kimi越慌?
被DeepSeek吊打的Kimi,还有多少人在用? 去年,月之暗面创始人杨植麟别提有多风光了。90后清华学霸,国产大模型六小虎之一,手握十几亿美金的融资。旗下的AI助手Kimi烧钱如流水,单月光是投流就花费2个亿。 疯…...