目录
参考: https://docs.mongoing.com/
介绍
Mongodb 是一个开源的,高性能,五模式的文档行数据库,当初的设计就是用于简化开发和方便扩展,是 NoSQL 数据库产品中的一种。是最像关系型数据库 MYSQL 的非关系型和数据库
它支持的数据结构非常松散,是一种类似于 JSON 的格式,叫做 BSON , 所以它既可以存储比较复杂的数据类型,又相对灵活
Mongodb 中的记录是一个文档,它是一个由字段和值组成的数据结构,简称键值对结构,Mongodb 文档类似于 JSON 对象,即一个文档认为是一个对象,字段的数据类型是字符型,它的值除了使用基本的一些类型以外,还可以包括其他文档,普通数组和文档数组
体系结构
SQL 术语 | MongoDB 术语 | 说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表 / 集合 |
row | document | 数据记录行 / 文档 |
column | field | 数据记录列 / 域 |
index | index | 索引 |
table joins | 联表 | |
嵌入文档 | Mongodb 通过嵌入文档来替换多表连接 | |
primary key | primary 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 数据类型
数据类型 | 描述 | 举例 |
---|---|---|
string | UTF-8 字符串都可以表示为字符串类型的数据 | {“X”:"foober"} |
object id | 对象 id 是文档的 12 字节的唯一 id | {"X":ObjectId()} |
boolean | true / 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
在开始前,大家可以先检查一下自己的电脑是否支持 avx 指令集
cat /proc/cpuinfo | grep avx
不支持的话可能会在部署完成之后 mongodb 无法运行
单机部署
普通安装
MongoDB 仅支持这些平台的 64 位版本。要确定您的主机当前正在运行的 Ubuntu 版本,请在主机的终端上运行以下命令:
root@slave03:~# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_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 ]]; then
log "$RED [ERROR] $NC" "$RED $1 faild $NC"
exit 1;
else
log "$GREEN [SUCCESS] $NC" "$GREEN $1 success $NC"
fi
}
# Ubuntu install mongodb function
Ubuntu_setup(){
apt-get install gnupg curl
Server_Status "Gnupg and curl download"
# import 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
Server_Status "Import MongoDB GPG"
# Create /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
Server_Status "Create mongodb-org-7.0.list"
# Update apt
apt-get update
Server_Status "Update apt"
# Install MongoDB Community Server
apt-get install -y mongodb-org
Server_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
EOF
Server_Status "mongodb-org-7.0.repo configuration"
yum install -y mongodb-org
Server_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.14
Server_Status "Install MongoDB related softword package"
# Auto Update softword package
exclude=mongodb-org,mongodb-org-database,mongodb-org-server,mongodb-mongosh,mongodb-org-mongos,mongodb-org-tools
Server_Status "Auto Update softword package"
chown -R mongod:mongod /var/log/mongodb
# Install SELinux strategy
yum install git make checkpolicy policycoreutils selinux-policy-devel
Server_Status "Install SELinux strategy"
which git
if [ $? -eq 0 ];then
git clone https://github.com/mongodb/mongodb-selinux
Server_Status "SELinux strategy clone"
cd mongodb-selinux
make && make install
Server_Status "make && make install"
else
log "$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 install
log "$YELLOW [INFO] $NC" "$YELLOW Ubuntu install ... $NC"
Ubuntu_setup
else
log "$YELLOW [INFO] $NC" "$YELLOW CentOS install ... $NC"
CentOS_setup
fi
}
main(){
SysVersion
info
}
main
Docker Compose 安装
创建数据目录
mkdir -p /root/mongo/data
docker-compose.yml
services:
mongodb:
container_name: mymongo
image: mongo:latest
restart: always
ports:
- "27017:27017"
environment:
- MONGO_INITDB_ROOT_USERNAME=root
- MONGO_INITDB_ROOT_PASSWORD=root
volumes:
- /root/mongo/data:/data/db
command:
- "--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