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

目录

介绍

体系结构

数据模型

BSON

[BSON 数据类型](#BSON 数据类型)

特点

高性能

高可用

高扩展

丰富的查询支持

其他特点

部署

单机部署

普通安装

脚本安装

[Docker Compose 安装](#Docker Compose 安装)

卸载

[停止 MongoDB](#停止 MongoDB)

删除包

删除数据目录


参考: 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

单机部署

普通安装

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

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

相关推荐
赵 XiaoQin2 小时前
缓存池和数据库连接池的使用(Java)
java·数据库·缓存
Yan-D2 小时前
【Redis 源码】4adlist列表.md
数据库·redis·缓存
Death2003 小时前
深入掌握 Qt 中的数据库操作:从基础到高级技巧
开发语言·数据库·c++·qt·opencv
2401_858120263 小时前
Spring Boot实现IT知识分享社区
java·数据库·spring boot
喝旺仔la3 小时前
MongoDB的使用
数据库·mongodb
晨曦启明6343 小时前
MySQL表的增删改查(基础)
数据库·mysql
Mephisto.java3 小时前
【力扣 | SQL题 | 每日四题】力扣1571, 1715, 1699, 1445, 1495, 1683
数据库·sql·leetcode
bug菌¹4 小时前
滚雪球学Oracle[3.2讲]:查询与数据操作基础
数据库·oracle·查询·数据操作基础
bug菌¹4 小时前
滚雪球学Oracle[2.3讲]:Oracle Listener配置与管理
数据库·oracle·listener