MongoDB的应用

news2024/11/27 21:56:21

目录

一、MongoDb是什么

1.特点

 2.功能

3.基本的指令

二、MongoDB的使用场景

1.适用场合

2.常见应用场景

三、可能遇到的问题

1.MongoDB是否支持事务?

2.MongoDB大数据迁移怎么做?

3.MongoDB的水平扩展是什么原理?

4.MongoDB出现负载过高的情况如何处理?


一、MongoDb是什么

MongoDB是高性能、开源、无模式的文档型数据库。它是一个非结构化介于关系和非关系数据库之间的产品,使用C++开发。

1.特点

1)面向集合

数据被分组存储在数据集中,被称为一个集合。每个集合在数据库中都有唯一一个标识名,并且可以包含无数个文档,其概念类似与关系型数据中的表即table。

2)模式自由

意味着存储在数据库中的数据,我们不需要知道它的任何结构定义即schema。

3)文档型

意思是我们存储的是键值对,键是字符串,值可以是数据集合类型中的任意类型,包括数组和文档。

 逻辑体系架构:

 

 2.功能

(1)面向集合的存储:适合存储对象和JSON形式的数据。

(2)动态查询:支持丰富的查询表达式,查询指令采用JSON形式的标记,可以轻松查询内嵌的对象及数组。

(3)完整的索引支持:包括内嵌的文档及数组。查询优化器能分析查询表达式生成高效的查询计划。

(4)查询监控:提供了一系列监视工具用以分析数据库操作性能。

(5)复制及自动故障转移:支持主-从模式及服务器之间的相互复制,目标是提供冗余及自动故障转移。

(6)高效的传统存储方式:支持二进制数据及大型对象。
(7)自动分片及支持云级别的伸缩性:自动分片支持水平的数据库集群,可以动态添加机器。

3.基本的指令

基本的操作命令和mysql极为类似

#显示当前所有的数据库
show dbs

show databases

#进入到指定的数据库中
use 数据库名
#当前处于哪个数据库
db
#查看数据库里面的所有集合
show collections

 数据库的增删改查

#想数据库中插入文档
db.<集合名>.insert(doc) 示例:db.user.insert({name:"zs",age:"23"})
#查找集合中的内容
db.<集合名>.find() 示例:db.user.find() find可以接收一个对象作为条件参数
#修改集合中的内容
db.<集合名>.update(查询条件,新对象) 如果需要修改指定的属性需要使用“修改操作符”
$set 可以用来修改文档指定属性 示例:db.user.update({name:"zs"},$set{name:"ls"})

$unset 删除文档中指定属性
#删除文档
db.<集合名>.remove()

二、MongoDB的使用场景

1.适用场合

(1)网站数据:非常适合实时的插入,更新和查询,并具备实时数据存储所需的复制及高度伸缩性

(2)缓存:性能很高可用于持久化缓存层。

(3)大尺寸低价值的数据:替代一些文件存储。

(4)高伸缩性的场景:集群分布计算支持。

(5)用于对象和JSON数据的存储:BSON格式非常适合文档化格式的数据存储及查询。

2.常见应用场景

(1)存储日志:在物联网或者运维监控场景下,存储较为复杂的设备快照或者日志数据,可以做成相关监控报表。

(2)存储状态变更信息:在电商或者物流场景下,以内嵌数组的形式记录订单信息、状态信息,一次性就可以把订单的所有变更查询出来。

(3)存储实时更新数据:在游戏和直播场景下,以内嵌文档的形式存储用户信息、点赞礼物等,方便更新查询。

三、可能遇到的问题

1.MongoDB是否支持事务?

MongoDB只支持行级事务,或者说只保证单行操作的原子性。

2.MongoDB大数据迁移怎么做?

一般来说mongodump来迁移即可。集群迁移的话,可以直接在目标服务器上搭建从节点,全部搭建完之后把从节点升级为主节点,再把老机器剔除去集群。

3.MongoDB的水平扩展是什么原理?

MongoDB的水平扩展之后主要依赖于有config组件负责管理数据元位置,mongo的路由会从config获取数据所在或者应该所在的节点位置,从而去对应的数据节点读取(路由本身也会缓存)。

 

4.MongoDB出现负载过高的情况如何处理?

可能的情况有连接数突然变高,查询突然变多,查询没有索引,大表索引等。

简单点看db.currentop或者看mongotop和mongostat,currentop是看当前正在执行的是什么任务,数量有多少,也可以去showlog里面看是否有记录,然后mogotop和mongostat是用了查看和平时比有什么异常。

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

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

相关文章

Jenkins UI与接口自动化测试持续集成实战

篇幅较长&#xff0c;要耐心阅读哦~ 基础知识简要回顾 持续集成、持续交付的好处与产生的必然性Jenkins服务的搭建方法Jenkins节点管理与用户权限Jenkins插件Jenkins父子多任务关联运行Jenkins报警机制 目录 SeleniumUI自动化测试持续集成演练接口自动化测试持续集成演练 …

采埃孚-4D毫米波雷达拆解分析

采埃孚4D毫米波雷达拆解分析 4D毫米波雷达具有4个维度的信息&#xff0c;分别是距离、速度、方向角和高度。下面分析采埃孚再飞凡汽车上的4D毫米波雷达。 4D毫米波雷达共由四部分组成&#xff0c;分别为&#xff1a;数字接口板及结构件、屏蔽罩、发射单元及PCB以及雷达天线罩…

如何在 Linux、Windows 和 Mac 上查找 WiFi 密码?

无线网络已成为我们日常生活中不可或缺的一部分&#xff0c;我们经常需要连接各种WiFi网络。但是&#xff0c;有时我们可能会忘记自己的WiFi密码&#xff0c;或者需要连接到一个以前连接过的网络。在这种情况下&#xff0c;我们可以使用一些方法来查找已连接网络的密码。 本文将…

研报精选230526

目录 【行业230526山西证券】有色金属行业周报&#xff1a;锂价强势反弹回30万元or吨 【行业230526开源证券】食品饮料行业投资策略&#xff1a;消费复苏贯穿全年&#xff0c;结构分化择机布局 【行业230526德邦证券】核电行业深度系列报告&#xff1a;积极安全有序发展核电&am…

8-JDBC 编程

目录 1.数据库编程的必备条件 PS&#xff1a;程序是怎么操作数据库的&#xff1f; 2.什么是JDBC&#xff1f; 2.1.JDBC定义 2.2.JDBC工作原理 3.JDBC使用 3.1.创建项目并添加MySQL驱动包 3.2.使用代码操作数据库 3.2.1.获得数据源 3.2.2.获得连接 3.2.3.获得执行器 …

软考A计划-2022年11月软件设计师下午真题及答案解析

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

【云原生|Kubernetes】06-Pod的生命周期和重启策略

【云原生|Kubernetes】06-Pod的生命周期和重启策略 文章目录 【云原生|Kubernetes】06-Pod的生命周期和重启策略Pod生命周期生命周期Pod的状态Pod子状态 Pod重启策略调试PodPod 停滞在 Pending 状态Pod 停滞在 Waiting 状态Pod 处于 Crashing 或别的不健康状态Pod 处于 Running…

【LeetCode热题100】打卡第4天:寻找两个正序数组的中位数

文章目录 寻找两个正序数组的中位数⛅前言&#x1f512;题目&#x1f511;题解 寻找两个正序数组的中位数 ⛅前言 大家好&#xff0c;我是知识汲取者&#xff0c;欢迎来到我的LeetCode热题100刷题专栏&#xff01; 精选 100 道力扣&#xff08;LeetCode&#xff09;上最热门的…

89.qt qml-WorkerScript多线程使用(无需C++代码)

由于我们自定义Table中需要实现排序,如下图所示: 考虑到如果数据量太大的情况,为了避免主线程阻塞,所以我们添加多线程排序功能,为了方便大家更好学习qml组件,所以学习WorkerScript实现多线程,无需C++ 1.描述 使用 WorkerScript 在新线程中运行操作。这对于在后台运行操…

微信小程序为什么不用HTML5、CSS,自己搞了个WXML、WXSS,很多框架用不了,好处一点不知道?

你在小程序中需要使用HTML5、 CSS来创建页面&#xff0c;那么你一定会碰到一些问题&#xff0c;比如&#xff1a; 1.小程序中的布局没有 JS支持&#xff0c;没有 JS渲染逻辑。 2.没有内置 css&#xff0c;都是靠 JS自己实现的。 3.很多框架不能使用&#xff0c;比如&#xf…

5年华为外包,外包究竟怎么样....

最近身边很多人进了外包或者被问到进到外包公司怎么样&#xff0c;感觉大家对外包公司不是很了解&#xff0c;也有一些误解&#xff0c;我们看看过来人怎么说。 5年外包时光 我曾是华为外包软件测试员工&#xff0c;就职于东莞松山湖&#xff0c;2017年9月12号入职&#xff0c…

ARM--计算机基础知识

目录 一.Linux层次结构 谈谈对嵌入式的理解 三层&#xff1a; 应用层 内核层 硬件层 二、计算机的进制 三、计算机的组成 1.输入设备 2.输出设备 3.存储器 4.运算器 5.控制器 总线 四、ARM存储模型 1. Cache:高速缓冲存储器 2. 主存储器&#xff1a;相当于内存 …

Day1:手写第一个Win32程序

学习重点&#xff1a; 1. 理解这个Win32窗口程序的实现逻辑 2. 学习Windows消息循环机制 3. 了解Windows的数据类型 4. 明白Winmain函数的作用 首先这个Winodws窗口程序在之后的学习并不需要进行手写&#xff0c;这里的重点是学习代码的逻辑&#xff0c;虽然有一些参数的含义尚…

vue3 集成kindeditor研究

kindeditor虽然老&#xff0c;但是稳定&#xff0c;最大的好外是word贴进去不变形&#xff0c;后端部分有安全隐患&#xff0c;我给去掉了&#xff0c;只保留了前端&#xff0c;集成jquery添加了跨域ajax上传功能。 用iframe引用实属无奈&#xff0c;因为尝试了好多次用ts封装都…

如何在华为OD机试中获得满分?Java实现【快速开租建站】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述4. Java算法源码5. 测试6.解题思路1. 题目描述 当前IT部门支撑了子公司…

【2023年电工杯竞赛】B题 人工智能对大学生学习影响的评价 数学建模方案和python代码

1 题目 B题 人工智能对大学生学习影响的评价 人工智能简称AI&#xff0c;最初由麦卡锡、明斯基等科学家于1956年在美国达特茅斯学院开会研讨时提出。 2016年&#xff0c;人工智能AlphaGo 4:1战胜韩国围棋高手李世石&#xff0c;期后波士顿动力公司的人形机器人Atlas也展示了…

【PICO G2 4K】 + 【Unity2020.3.40】 :Android 发布设置

一、【设备】设置 设备开始USB调试模式&#xff0c;然后用usb线连接到电脑&#xff0c;识别后下拉框会显示该设备 二、【脚本调试】的Debug设置 如果要在PICO上读取脚本的Debug信息&#xff0c;则需要开启下图中选项&#xff0c;并配置adb工具读取log日志。 参考之前的blog…

学了两个多月软件测试,顺利过了试用期,拿到12K的我很满足了

先介绍一下&#xff0c;我是机械专业的&#xff0c;在一个大厂做售后工程师&#xff08;就是修东西的&#xff09;&#xff0c;做了几年没啥成绩&#xff0c;年龄越大&#xff0c;心里压力也越大&#xff0c;而且这种大型设备维修很容易出事故&#xff0c;就想着搞一门好点的技…

软件测试面试题【内附超详细面试宝典】

一般软件测试的面试分为三轮&#xff1a;笔试&#xff0c;HR面试&#xff0c;技术面试。 前两轮&#xff0c;根据不同企业&#xff0c;或有或无&#xff0c;但最后一个技术面试是企业了解你“行不行”的关键环节&#xff0c;每个企业都会有的。 在平时的学习、工作中一定要善…

《Zookeeper》从零开始学Zookeeper源码(一)之源码环境搭建

目录 源码环境搭建1. 下载源码2. 编译3. Eclipse启动服务端4. 启动客户端 源码环境搭建 1. 下载源码 下载地址&#xff1a; github 2. 编译 进入下载好的源码的根目录&#xff0c;因为下载依赖的时候需要apache的maven元数据&#xff0c;目前最高的版本为3.8.0-SNAPSHOT&am…