Mongodb的体系结构,语法,底层原理,怎么开发使用,使用场景有哪些?

MongoDB 教材

MongoDB 是一个开源的 NoSQL 数据库,以其高性能、高可用性和自动扩展性广受欢迎。本文将详细介绍 MongoDB 的体系结构、语法、底层原理、开发使用方法及常见使用场景。

目录

  1. MongoDB 简介
  2. MongoDB 体系结构
  3. MongoDB 语法
    • 基本操作
    • 高级查询
    • 聚合操作
  4. 底层原理
  5. 开发使用
    • 安装与配置
    • 基本 CRUD 操作
    • 索引与优化
    • 复制与分片
  6. 使用场景

MongoDB 简介

MongoDB 是一个面向文档的 NoSQL 数据库,数据以 BSON(二进制 JSON)格式存储。它提供了灵活的数据模型,适合处理大规模数据和高并发访问的应用场景。

MongoDB 体系结构

MongoDB 的体系结构包含以下几个关键组件:

  1. 数据库(Database):多个集合(Collection)的集合。
  2. 集合(Collection):多个文档(Document)的集合。
  3. 文档(Document):MongoDB 中的基本数据单位,以 BSON 格式存储。
  4. 分片(Sharding):将数据水平切分到多个服务器上,以实现扩展性和高性能。
  5. 复制(Replication):通过主从复制保证数据的高可用性和可靠性。

MongoDB 的体系结构如下图所示:

+------------------+
|   MongoDB Server |
+------------------+|          ||          |
+-----+   +-----+
| DB1 |   | DB2 |
+-----+   +-----+|         |
+----+   +----+
|C1  |   |C2  |
|C2  |   +----+
+----+     ||+----+|D1  ||D2  |+----+

MongoDB 语法

基本操作
  1. 插入文档
db.collection.insertOne({ name: "Alice", age: 25 });
db.collection.insertMany([{ name: "Bob", age: 30 }, { name: "Charlie", age: 35 }]);
  1. 查询文档
db.collection.find({ name: "Alice" });
db.collection.find({ age: { $gt: 25 } });
  1. 更新文档
db.collection.updateOne({ name: "Alice" }, { $set: { age: 26 } });
db.collection.updateMany({ age: { $gt: 25 } }, { $inc: { age: 1 } });
  1. 删除文档
db.collection.deleteOne({ name: "Alice" });
db.collection.deleteMany({ age: { $lt: 30 } });
高级查询
  1. 投影
db.collection.find({ age: { $gt: 25 } }, { name: 1, _id: 0 });
  1. 排序
db.collection.find().sort({ age: -1 });
  1. 分页
db.collection.find().skip(10).limit(5);
聚合操作

MongoDB 提供强大的聚合框架,支持复杂的数据处理流程。

db.collection.aggregate([{ $match: { status: "A" } },{ $group: { _id: "$cust_id", total: { $sum: "$amount" } } },{ $sort: { total: -1 } }
]);

底层原理

MongoDB 使用多种技术来保证其高性能和高可用性:

  1. 存储引擎:MongoDB 默认使用 WiredTiger 存储引擎,支持文档级并发控制和压缩。WiredTiger 提供了高效的读写性能和数据压缩功能,能够显著减少存储占用。
  2. 内存映射文件:MongoDB 将数据文件映射到内存中,以提高数据访问速度。这种机制利用操作系统的虚拟内存管理,将常用数据页保存在内存中,减少磁盘 I/O。
  3. 索引:MongoDB 支持多种索引类型,如单字段索引、复合索引、地理空间索引、全文索引等,能够显著提高查询性能。索引使用 B 树结构,提供高效的查找、插入和删除操作。
  4. 复制集(Replica Set):MongoDB 通过复制集实现数据的高可用性和容错能力。复制集包含一个主节点和多个从节点,主节点负责处理写操作,从节点负责同步数据和处理读操作。
  5. 分片(Sharding):MongoDB 通过分片实现水平扩展,将数据分布到多个服务器上。分片键用于决定数据如何分布,每个分片存储数据的一部分,协调节点负责路由请求到相应的分片。

开发使用

安装与配置
  1. 安装 MongoDB

在 Linux 系统上可以通过包管理器安装 MongoDB,例如在 Ubuntu 上:

sudo apt-get update
sudo apt-get install -y mongodb

在 Windows 系统上,可以下载 MongoDB 安装包并运行安装程序。

  1. 启动 MongoDB

安装完成后,可以使用以下命令启动 MongoDB 服务:

sudo service mongodb start
  1. 配置文件

MongoDB 的配置文件通常位于 /etc/mongodb.conf。可以在配置文件中设置数据目录、日志文件路径、网络绑定地址等。

基本 CRUD 操作
  1. 插入数据
// 插入单个文档
db.collection.insertOne({ name: "Alice", age: 25 });// 插入多个文档
db.collection.insertMany([{ name: "Bob", age: 30 }, { name: "Charlie", age: 35 }]);
  1. 查询数据
// 查询所有文档
db.collection.find();// 查询符合条件的文档
db.collection.find({ age: { $gt: 25 } });
  1. 更新数据
// 更新单个文档
db.collection.updateOne({ name: "Alice" }, { $set: { age: 26 } });// 更新多个文档
db.collection.updateMany({ age: { $gt: 25 } }, { $inc: { age: 1 } });
  1. 删除数据
// 删除单个文档
db.collection.deleteOne({ name: "Alice" });// 删除多个文档
db.collection.deleteMany({ age: { $lt: 30 } });
索引与优化
  1. 创建索引
// 创建单字段索引
db.collection.createIndex({ name: 1 });// 创建复合索引
db.collection.createIndex({ name: 1, age: -1 });
  1. 查看索引
// 查看集合中的所有索引
db.collection.getIndexes();
  1. 删除索引
// 删除指定索引
db.collection.dropIndex("index_name");// 删除所有索引
db.collection.dropIndexes();
复制与分片
  1. 设置复制集

配置文件中添加复制集名称:

replication:replSetName: "rs0"

启动 MongoDB 实例后,初始化复制集:

rs.initiate();

添加从节点:

rs.add("hostname:port");
  1. 设置分片

启动配置服务器和分片服务器:

mongod --configsvr --replSet configReplSet --port 27019 --dbpath /data/configdb
mongod --shardsvr --replSet shardReplSet --port 27018 --dbpath /data/sharddb

启动路由服务器:

mongos --configdb configReplSet/hostname:27019

添加分片:

sh.addShard("shardReplSet/hostname:27018");

启用集合分片


javascript
sh.enableSharding("myDatabase");
sh.shardCollection("myDatabase.myCollection", { shardKey: 1 });

使用场景

MongoDB 由于其灵活的数据模型、高性能和可扩展性,适用于多种应用场景:

  1. 内容管理系统(CMS):由于数据结构灵活,MongoDB 非常适合用于内容管理系统,可以轻松处理复杂的内容类型和关系。
  2. 实时分析:MongoDB 的高性能读写能力和聚合框架非常适合实时分析和数据挖掘应用,例如点击流分析、用户行为分析等。
  3. 物联网(IoT):MongoDB 可以处理大量的传感器数据和设备日志,支持高吞吐量和低延迟的数据写入。
  4. 电商平台:电商平台需要处理大量的产品信息、用户数据和交易记录,MongoDB 的文档模型可以灵活地适应多变的数据结构。
  5. 社交网络:MongoDB 可以快速存储和检索用户生成的内容,如帖子、评论、点赞等,支持高并发的读写操作。
  6. 游戏应用:游戏应用需要处理大量的用户数据和游戏状态,MongoDB 的高可用性和扩展性可以满足游戏应用的需求。

注意

MongoDB 是一个功能强大且灵活的 NoSQL 数据库,适用于多种应用场景。本文介绍了 MongoDB 的体系结构、基本操作、底层原理以及常见的开发和使用方法。通过掌握这些知识,开发者可以充分利用 MongoDB 的优势,构建高性能、高可用的应用系统。

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

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

相关文章

RDMA建链的3次握手和断链的4次挥手流程?

文章目录 基础信息建链 3次握手断链4次挥手建联状态active端passive端 报文结构函数关系其他后记 基础信息 CM: Communication Management 通信管理 连接管理SIDR: Service ID Resolution Protocol. 作用: enables users of Unreliable Datagram service to locate …

实验4 图像空间滤波

1. 实验目的 ①掌握图像空间滤波的主要原理与方法; ②掌握图像边缘提取的主要原理和方法; ③了解空间滤波在图像处理和机器学习中的应用。 2. 实验内容 ①调用 Matlab / Python OpenCV中的函数,实现均值滤波、高斯滤波、中值滤波等。 ②调…

【操作系统期末速成】 EP02 | 学习笔记(基于五道口一只鸭)

文章目录 一、前言🚀🚀🚀二、正文:☀️☀️☀️2.1 考点二:操作系统的功能及接口2.2 考点三:操作系统的发展及分类2.3 考点四:操作系统的运行环境(重要) 一、前言&#x…

从零开始三天学会微信小程序开发(三)

看到不少入门的小程序开发者不断的问重复性的问题,我们从实战角度开发了这个课程,希望能够帮助大家了解小程序开发。 课程分三天: 第一天:微信小程序开发入门第二天:给小程序接入云端数据第三天:完善我的…

MySQL高级-MVCC- readview介绍

文章目录 1、介绍2、ReadView中包含了四个核心字段:3、版本链数据的访问规则:4、不同的隔离级别,生成ReadView的时机不同: 1、介绍 ReadView(读视图)是 快照读 SQL执行时MVCC提取数据的依据,记录…

【计算机组成原理实验】——运算器组成实验

计组TEC4实验——运算器组成实验 1. 实验目的 (1)掌握算术逻辑运算加、减、乘、与的工作原理。 (2) 熟悉简单运算器的数据传送通路。 (3) 验证实验台运算器的8位加、减、与、直通功能。 (4) 验证实验台的4位乘4位功能。 (5) 按给定数据,完成几种指…

SerDes介绍以及原语使用介绍(4)ISERDESE2原语仿真

文章目录 前言一、iserdese2_module模块二、oserdese2_module模块三、顶层模块四、仿真结果分析 前言 上文详细介绍了ISERDESE2原语的使用,本文根据仿真对ISERDESE2原语的使用进一步加深印象。在仿真时,与OSERDESE进行回环。 一、iserdese2_module模块…

昇思MindSpore学习笔记4--数据集 Dataset

昇思MindSpore学习笔记4--数据集 Dataset 摘要: 昇思MindSpore数据集Dataset的加载、数据集常见操作和自定义数据集方法。 一、数据集 Dataset概念 MindSpore数据引擎基于Pipeline 数据预处理相关模块: 数据集Dataset加载原始数据,支持文本…

移动端H5应用,使用了postcss-px-to-viewport插件,750设计稿兼容Vant框架

目前在搞一个移动端的H5项目,使用的是Vue3Vant框架。设计稿是750的,而且使用了postcss-px-to-viewport。所以发现使用Vant框架的时候,发现有点问题,好像缩小了,后来百度了一下,是需要设置portcss.config.js…

vue components

vue components intro 组件是带有名称的可复用实例。 因为组件是可复用的组件实例,所以它们与根实例接收相同的选项,例如 data、computed、watch、methods 以及生命周期钩子等。 组成 props: 组件的attributes,可以传任意类型…

大创项目推荐 题目:基于机器视觉的图像矫正 (以车牌识别为例) - 图像畸变校正

文章目录 0 简介1 思路简介1.1 车牌定位1.2 畸变校正 2 代码实现2.1 车牌定位2.1.1 通过颜色特征选定可疑区域2.1.2 寻找车牌外围轮廓2.1.3 车牌区域定位 2.2 畸变校正2.2.1 畸变后车牌顶点定位2.2.2 校正 7 最后 0 简介 🔥 优质竞赛项目系列,今天要分享…

题目的起名

整个经济社会描绘为无数个交织的方程组。机场航班的起降时间、物流的路径规划、金属冶炼的原料配比、工厂店铺的选址……”而这些方程组的价值在于,“为了实现经济学最简单而又最权威的目标——对稀缺资源进行最佳利用,必须快速求出这些方程组的最优解。…

Leetcode3192. 使二进制数组全部等于 1 的最少操作次数 II

Every day a Leetcode 题目来源:3192. 使二进制数组全部等于 1 的最少操作次数 II 解法1:遍历 由于 nums[i] 会被其左侧元素的操作影响,所以我们先从最左边的 nums[0] 开始思考。 分类讨论: 如果 nums[0]1,无需反…

debian 安装mongodb

安装所需工具 apt install gnupg curl 添加公钥 wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add - 添加源 echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg ] https://repo.mongodb.org/apt…

amis-editor 注册自定义组件

建议先将amis文档从头到尾,仔细看一遍。 参考:amis - 低代码前端框架 amis 的渲染过程是将 json 转成对应的 React 组件。先通过 json 的 type 找到对应的 Component,然后把其他属性作为 props 传递过去完成渲染。 import * as React from …

Linux开发讲课17--- 在shell脚本中,如何将一个命令存储在一个变量中

问: 将一个命令保存到一个变量中,以便稍后再使用(不是命令的输出,而是命令本身)。 有一个简单的脚本如下: command"ls"; echo "Command: $command"; #Output is: Command: ls b$com…

c++ 给定一个非常巨大的数组,如何找到它的中值

快速选择算法&#xff08;最优解&#xff09; #include <iostream> #include <vector> #include <algorithm>using namespace std;class Solution { private:// 快速选择算法中的分区函数int partition(vector<int>& nums, int left, int right)…

逆向学习汇编篇:参数传递与返回地址的使用

本节课在线学习视频&#xff08;网盘地址&#xff0c;保存后即可免费观看&#xff09;&#xff1a; ​​https://pan.quark.cn/s/b5b046015da2​​ 在汇编语言中&#xff0c;函数调用和参数传递是编程的基础组成部分。了解如何在汇编中传递参数以及如何处理返回地址对于逆向工…

LeetCode 78. 子集

更多题解尽在 https://sugar.matrixlab.dev/algorithm 每日更新。 组队打卡&#xff0c;更多解法等你一起来参与哦&#xff01; LeetCode 78. 子集&#xff0c;难度中等。 迭代 解题思路&#xff1a; 初始化结果集 result&#xff0c;其中包含一个空集 []&#xff1b;遍历数…

flex讲解

随着前端技术的不断发展和更新&#xff0c;flex布局成为前端布局的主流。但是仍然有很多前端新手搞不懂flex到底怎么用&#xff01;&#xff01;&#xff01;今天我们就来好好讲讲flex布局 老规矩先上定义 什么是flex布局 布局的传统解决方案&#xff0c;基于盒状模型&#x…