MongoDB 快速入门+单机部署(附带脚本)

ops/2024/10/19 1:25:11/

目录

介绍

体系结构

数据模型

BSON

BSON 数据类型

特点

高性能

高可用

高扩展

丰富的查询支持

其他特点

部署

单机部署

普通安装

脚本安装

Docker Compose 安装

卸载

停止 MongoDB

删除包

删除数据目录


参考: https://docs.mongoing.com/

介绍

Mongodb 是一个开源的,高性能,五模式的文档行数据库,当初的设计就是用于简化开发和方便扩展,是 NoSQL 数据库产品中的一种。是最像关系型数据库 MYSQL 的非关系型和数据库

它支持的数据结构非常松散,是一种类似于 JSON 的格式,叫做 BSON , 所以它既可以存储比较复杂的数据类型,又相对灵活

Mongodb 中的记录是一个文档,它是一个由字段和值组成的数据结构,简称键值对结构,Mongodb 文档类似于 JSON 对象,即一个文档认为是一个对象,字段的数据类型是字符型,它的值除了使用基本的一些类型以外,还可以包括其他文档,普通数组和文档数组

体系结构

SQL 术语MongoDB 术语说明
databasedatabase数据库
tablecollection数据库表 / 集合
rowdocument数据记录行 / 文档
columnfield数据记录列 / 域
indexindex索引
table joins联表
嵌入文档Mongodb 通过嵌入文档来替换多表连接
primary keyprimary key主键,Mongodb 会自动将 id 设置为主键

数据模型

Mongodb 的最小单位就是文档(document)对象,文档对象对应关系型数据库的行,数据在 Mongodb 中以 BSON 格式存储数据在磁盘上

BSON

BSON (Binary Serialized Document Format) 是一种类似 json 的一种二进制形式的存储,简称 Binary JSON , BSON 和 JSON 一样支持嵌套文档对象和数组对象,但是 BSON 还多出一些数据类型,比如:Date 和 BinD艾特类型

BSON 采用了类似 C 语言结构体的名称,对表示方法,支持内嵌的文档对象和数组对象,具有轻量性,可遍历性,高效性三个特点,可以有效描述非结构化数据和结构化数据。这种格式的优点是灵活性高,但是它的缺点是空间利用率不是很理想

BSON 中,除了基本的 JSON 类型, String ,Integer ,Boolean , Double , Null , Array 和 Object 。mongo 还使用了特殊的数据类型,这些类型包括 data , object id,binary data , regularexpression 和 code 。 每一个驱动都以特定的语言方式实现了这些类型,查看你的驱动的文档来获取详细信息

BSON 数据类型

数据类型描述举例
stringUTF-8 字符串都可以表示为字符串类型的数据{“X”:"foober"}
object id对象 id 是文档的 12 字节的唯一 id{"X":ObjectId()}
booleantrue / false{"X":true}+
array值的集合或者列表可以表示成数组{“X”:["a","b","c"]}
32位整数类型不可用。js仅支持 64 位浮点数,所以该整数会被自动转换shell 也不支持,shell 会默认将其转换成 64 位
64位整数不支持这个类型,js 仅支持 64 位浮点型,shell 会使用一个特殊的内嵌文档来显示 64 位整数和上述一致
64位浮点型shell 中的数字就是这种类型{“X”:3.1415926,"y":3}
null表示空值或者未定义的对象{“x”:null}
undefined文档中也可以使用未定义类型{“x”:undefined}
符号shell 不支持,自动转换成字符型
正则表达式使用的是 js 的正则表达式规则{“x”:/doober/i}
代码文档中还可以包含 js 代码{“x”: function}
二进制数据二进制数据可以由任意字节组成,不过 shell 无法支持
最大/最小值BSON 包含一个特殊的数据类型,表示可能的最大/最小值,但是 shell 没有这个类型

shell 默认使用 64 位浮点型数值。对于整型,可以使用 Numberlnt (4 字节符号整数)或者 NumberLong (8字节长整型)

特点

高性能

Mongodb 提供高性能的数据持久化,特别是对嵌入式数据模型的支持减少了数据系统上的 I/O 活动

索引支 持更快的查询,并且可以包括孩子嵌入式文档和数据的键。(文本索引解决搜索的需求,TTL 索引解决历史数据自动过期的需求,地理位置索引可用于构建各种 O2O 应用)

mmapv1 , wiredtiger . mongorocks (rocksdb) , in-memory 等多引擎支持满足各种场景需求

Gridfs 解决文件存储需求

高可用

Mongodb 的复制工具称为副本集 ( replica set ) , 它可以提供自动故障转移和数据冗余

高扩展

Mongodb 提供了水平可扩展性作为其核心功能的一部分

分片将数据分布在一组集群的机器上。 海量数据存储,服务能力水平扩展

从 3.4 开始,Mongodb 支持基于**片键**创建数据区域。在一个平衡的集群中,MongoDB 将一个区域多覆盖的读写只定向到该区域内的那些片

丰富的查询支持

Mongodb 支持丰富的查询语言,支持读写操作(CRUD),比如数据聚合,文本搜索和地理空间查询等

其他特点

如:无模式(动态模式),灵活的文档模型

部署

参考: 在 Ubuntu 上安装 MongoDB Community Edition - MongoDB 手册 v7.0

单机部署

普通安装

MongoDB 仅支持这些平台的 64 位版本。要确定您的主机当前正在运行的 Ubuntu 版本,请在主机的终端上运行以下命令:

 root@slave03:~# cat /etc/lsb-releaseDISTRIB_ID=UbuntuDISTRIB_RELEASE=22.04DISTRIB_CODENAME=jammyDISTRIB_DESCRIPTION="Ubuntu 22.04.4 LTS"

导入公钥

 sudo apt-get install gnupg curl

要导入 MongoDB 公共 GPG 密钥,请运行以下命令:

curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | \sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg \--dearmor#

创建列表文件

为您的 Ubuntu 版本创建列表文件 /etc/apt/sources.list.d/mongodb-org-7.0.list

echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list

重新加载包数据库

 sudo apt-get update

安装 MongoDB Community Server集群部署

 sudo apt-get install -y mongodb-org

如果通过软件包管理器安装,则在安装过程中会创建数据目录 /var/lib/mongodb 和日志目录 /var/log/mongodb

默认情况下,MongoDB 使用 mongodb 用户账户运行。如果更改运行 MongoDB 进程的用户,您还必须修改数据和日志目录以赋予该用户访问这些目录的权限。

配置文件

目录:/etc/mongod.conf

启动 MongoDB。

sudo systemctl start mongod

如果收到类似下方的错误

Failed to start mongod.service: Unit mongod.service not found.

首先运行以下命令

 sudo systemctl daemon-reload

再次启动

验证 MongoDB 是否已成功启动。

 sudo systemctl status mongod

开机自启动

 sudo systemctl enable mongod

开始使用 MongoDB

默认端口号为 27017

 mongosh

退出:exit

附赠一篇脚本

注意:脚本安装只限于 Ubuntu22.04 以及 CentOS8

脚本安装
#!/bin/bash
#### @Author: huangqian# @Date: 2024-09-30 17:18:03# @LastEditors: huangqian # @LastEditTime: 2024-09-30 19:05:12# @FilePath: \shellProject\数据库\mongodb_setup.sh# @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
### # define Color
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # null Color# logs function
log() {echo -e "$1 $YELLOW $(date '+%F %T') $NC - $2" | tee -a "/var/log/mongodb_setup.log" | sed 's/\x1b\[[0-9;]*m//g'
}# Server status function
Server_Status(){if [[ $? -ne 0 ]]; thenlog "$RED [ERROR] $NC" "$RED $1 faild $NC"exit 1;elselog "$GREEN [SUCCESS] $NC" "$GREEN $1 success $NC"fi
}# Ubuntu install mongodb function
Ubuntu_setup(){apt-get install gnupg curlServer_Status "Gnupg and curl download"# import MongoDB GPGcurl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg --dearmorServer_Status "Import MongoDB GPG"# Create /etc/apt/sources.list.d/mongodb-org-7.0.listecho "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.listServer_Status "Create mongodb-org-7.0.list"# Update aptapt-get updateServer_Status "Update apt"# Install MongoDB Community Serverapt-get install -y mongodb-orgServer_Status "Install mongodb-org"systemctl daemon-reload
}# Centos install mongodb function
CentOS_setup(){cat > /etc/yum.repos.d/mongodb-org-7.0.repo << EOF
[mongodb-org-7.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/8/mongodb-org/7.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://pgp.mongodb.com/server-7.0.asc
EOFServer_Status "mongodb-org-7.0.repo configuration"yum install -y mongodb-orgServer_Status "Install mongodb-org"yum install -y mongodb-org-7.0.14 mongodb-org-database-7.0.14 mongodb-org-server-7.0.14 mongodb-mongosh-7.0.14 mongodb-org-mongos-7.0.14 mongodb-org-tools-7.0.14Server_Status "Install MongoDB related softword package"# Auto Update softword packageexclude=mongodb-org,mongodb-org-database,mongodb-org-server,mongodb-mongosh,mongodb-org-mongos,mongodb-org-toolsServer_Status "Auto Update softword package"chown -R mongod:mongod /var/log/mongodb# Install SELinux strategyyum install git make checkpolicy policycoreutils selinux-policy-develServer_Status "Install SELinux strategy"which gitif [ $? -eq 0 ];thengit clone https://github.com/mongodb/mongodb-selinuxServer_Status "SELinux strategy clone"cd mongodb-selinuxmake && make installServer_Status "make && make install"elselog "$RED [ERROR] $NC" "git uninstall or not configuration PATH"fi
}info(){echo "$GREEN Enter [ systemctl start mongod ] start MongoDB $NC"echo "$GREEN Enter [ systemctl status mongod ] check status MongoDB $NC"echo "$GREEN Enter [ systemctl enable mongod ] starting Up start MongoDB $NC"echo "$GREEN Check MongoDB logs [ cat /var/log/mongodb_setup.log ] $NC"
}# Confirm system version
SysVersion(){local SYSTEM_VERSION=$(cat /etc/lsb-release | awk 'NR==2');if [[ $SYSTEM_VERSION = 'DISTRIB_RELEASE=22.04' ]];then# Start installlog "$YELLOW [INFO] $NC" "$YELLOW  Ubuntu install ... $NC"Ubuntu_setupelselog "$YELLOW [INFO] $NC" "$YELLOW CentOS install ... $NC"CentOS_setupfi
}main(){SysVersioninfo
}main
Docker Compose 安装

创建数据目录

 mkdir -p /root/mongo/data

docker-compose.yml

services:mongodb:container_name: mymongoimage: mongo:latestrestart: alwaysports:- "27017:27017"environment:- MONGO_INITDB_ROOT_USERNAME=root- MONGO_INITDB_ROOT_PASSWORD=rootvolumes:- /root/mongo/data:/data/dbcommand:- "--auth"

启动

 docker compose up -d

后续的使用和上诉安装之后是一致的

卸载

docker 版本的如何卸载不用过多赘述

停止 MongoDB

sudo service mongod stop

删除包

sudo apt-get purge "mongodb-org*"

删除数据目录

sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongodb

有关副本集群的搭建请跳转至:链接:https://blog.csdn.net/qq_62866151/article/details/142671701?sharetype=blogdetail&sharerId=142671701&sharerefer=PC&sharesource=qq_62866151&spm=1011.2480.3001.8118


http://www.ppmy.cn/ops/122329.html

相关文章

Spring Boot电商开发:购物商城系统

第2章 关键技术简介 2.1 Java技术 Java是一种非常常用的编程语言&#xff0c;在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中&#xff0c;Java的身影无处不在&#xff0c;并且拥有旺盛的生命力。Java的跨平台能力十分强大&#xff0c;只需一次编译&#xf…

Raspberry Pi3B+之Rpanion(gst)和ffmpeg验证

Raspberry Pi3B之Rpanion-gst和ffmpeg验证 1. 源由2. 分析3. 环境搭建步骤1&#xff1a;安装镜像步骤2&#xff1a;系统更新步骤3&#xff1a;安装numpy组件步骤4&#xff1a;安装python3-picamera2组件步骤4&#xff1a;安装cv2组件步骤5&#xff1a;安装ffmpeg组件步骤6&…

(Linux驱动学习 - 6).Linux中断

一. Linux 中断 API 函数 1.中断号 每个中断都有一个中断号&#xff0c;通过中断号即可区分不同的中断&#xff0c;有的资料也把中断号叫做中 断线。在 Linux 内核中使用一个 int 变量表示中断号。 2.申请中断 - request_irq 函数原型&#xff1a; int request_irq(unsigne…

ChatGPT+R语言助力生态环境数据统计分析!回归与混合效应模型、多元统计分析、结构方程模型(SEM)(lavaan)、Meta分析、贝叶斯回归等

从生态环境领域数据特点及统计方法介绍、GPT入门到GPT辅助R语言基础&#xff1b;数据准备及ggplot 绘图基础&#xff1b;回归和混合效应模型&#xff08;包含方差分析、协方差分析&#xff09;&#xff1b;多元统计分析&#xff08;排序、聚类和分组差异检验&#xff09;&#…

AAA Mysql与redis的主从复制原理

一 &#xff1a;Mysql主从复制 重要的两个日志文件&#xff1a;bin log 和 relay log bin log&#xff1a;二进制日志&#xff08;binnary log&#xff09;以事件形式记录了对MySQL数据库执行更改的所有操作。 relay log&#xff1a;用来保存从节点I/O线程接受的bin log日志…

如何在微信小程序中实现分包加载和预下载

如何在微信小程序中实现分包加载和预下载 概述 微信小程序提供了分包加载和预下载功能&#xff0c;这有助于优化应用的加载时间&#xff0c;提升用户体验。本文将详细介绍如何在微信小程序中配置分包加载和预下载。 步骤一&#xff1a;配置分包加载 修改app.json文件&#x…

使用 docker-compose 启动 es 集群 + kibana

编写 docker-compose yaml version: v3 services:elasticsearch-node1:image: elasticsearch:7.17.24container_name: elasticsearch-node1ports:- "9200:9200"- "9300:9300"environment:- node.nameelasticsearch-node1- cluster.namemy-es-cluster- dis…

在QT中将Widget提升为自定义的Widget后,无法设置Widget的背景颜色问题解决方法

一、问题 在Qt中将QWidget组件提升为自定义的QWidget后&#xff0c;Widget设置的样式失效&#xff0c;例如设置背景颜色为白色失效。 二、解决方法 将已经提升的QWidget实例对象&#xff0c;脱离父窗体的样式&#xff0c;然后再重新设置自己的样式。