数人之道原创文章,转载请关注本公众号联系我们
MongoDB 是基于分布式文件存储的数据库,由 C 语言编写,专为 WEB 应用提供可扩展性、高性能和高可用性的数据存储解决方案。它可以从单服务器部署扩展到大型、复杂的多数据中心架构。利用内存计算的优势,MongoDB 能够提供高性能的数据读写操作。MongoDB 的本地复制和自动故障转移功能让应用程序具有企业级的可靠性和操作灵活性。
1MangoDB 简介
MongoDB 是一个文档数据库,旨在简化开发和扩展。
1.1文档数据库
MongoDB 中的记录是一个文档,它是由字段和值对组成的数据结构。MongoDB 的文档格式是类似于 JSON 对象的 BSON 文档。BSON 是 JSON 文档的二进制表示形式,它包含比 JSON 更多的数据类型,字段的值可以包括其他文档,数组和文档数组。
使用文档的优点是:
- 文档(即对象)对应于许多编程语言中的内置数据类型。
- 嵌入式文档和数组减少了对昂贵连接的需求。
- 动态模式支持流畅的多态性。
集合/视图/按需实例化视图
MongoDB 将文档存储在集合中,集合类似于关系型数据库中的表。
除了集合外,MongoDB 还支持:
- 只读视图(从 MongoDB 3.4 开始)
- 按需实例化视图(从 MongoDB 4.2 开始)。
1.2主要特性
1.2.1. 高性能
MongoDB 提供高性能的数据持久化。特别是在以下方面:
- 对嵌入式数据模型的支持减少了数据库系统上的 I / O 操作。
- 索引支持更快的查询,并且可以包含来自嵌入式文档和数组的键。
1.2.2. 丰富的查询语言
MongoDB 支持丰富的查询语言以支持读写操作(CRUD)以及:
- 数据聚合
- 文本搜索和地理空间查询
- SQL 到 MongoDB 的映射图
- SQL 到聚合的映射图
1.2.3. 高可用
MongoDB 的复制工具(称为副本集)提供:
- 自动故障转移
- 数据冗余
副本集是一组维护相同数据集合的 mongod 实例,提供了冗余和提高了数据可用性。
1.2.4. 水平拓展
MongoDB 提供水平可伸缩性作为其核心功能的一部分:
- 分片会将数据分布在一个集群的机器上。
- 从 3.4 开始,MongoDB 支持基于分片键创建数据区域。在平衡群集中,MongoDB 仅将区域覆盖的读写定向到区域内的那些分片。
1.2.5. 支持多种存储引擎
MongoDB 支持多个存储引擎:
- WiredTiger 存储引擎(包括对静态加密的支持 )
- 内存存储引擎
另外,MongoDB 提供可插拔的存储引擎 API,允许第三方为 MongoDB 开发存储引擎。
2MongoDB 安装
下面介绍如何在 Linux 服务器上安装 MongoDB, 这里使用的操作系统是 CentOS 8.
2.1安装前检查
2.1.1. 安装 Linux 平台依赖包
使用 root 用户执行以下命令安装 openssl,若已安装可忽略此步骤:
代码语言:javascript复制yum install libcurl openssl
2.1.2. 检查系统最大可打开文件数
跟 HBase 一样,MongoDB 对 Linux 系统的最大可打开文件数也有要求,自 MongoDB4.4 版本开始,系统最大可打开文件数若在 64000 以下,启动将会报错。
检查及修改方式详见《安装 HBase - HBase 部署配置》第一节:安装前检查。
2.1.3. 关闭 selinux
MongoDB 需要关闭 selinux,selinux 若在 enforcing 模式,则需要安装 checkpolicy,进行较为复杂的配置。
修改 selinux 配置文件/etc/selinux/config
,将 selinux 参数改为disabled
.
2.1.4. 创建用户
创建名为mongod
的用户,用于安装、使用及管理 MongoDB:
useradd mongod
passwd mongod
设置用户 mongod 用户的 sudo 权限,详见《Hadoop环境搭建及安装》的 2.4 节:设置用户及权限。
切换到 mongod 用户进行下面的安装操作。
2.2安装 MongoDB
2.2.1. 配置 yum 文件
创建 yum 文件:
代码语言:javascript复制sudo vim /etc/yum.repos.d/mongodb-org-5.0.repo
添加以下内容,以使用 yum 进行 MongoDB 安装:
代码语言:javascript复制[mongodb-org-5.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/5.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc
2.2.2. 安装 MongoDB
执行以下命令安装 MongoDB:
代码语言:javascript复制sudo yum install -y mongodb-org-5.0.5 mongodb-org-database-5.0.5 mongodb-org-server-5.0.5 mongodb-org-shell-5.0.5 mongodb-org-mongos-5.0.5 mongodb-org-tools-5.0.5
可自行选择需要安装的组件包。
安装完成后查看守护进程服务 mongod 安装位置,确定安装是否成功:
代码语言:javascript复制whereis mongod
图2-2-1:查看 mongod 安装位置
可以看到,mongod 相应所在的文件位置。
2.3创建存储目录
默认情况下 MongoDB 启动后会初始化以下两个文件存储目录:
- 数据存储目录:/var/lib/mongo
- 日志文件目录:/var/log/mongodb
这里我们修改目录路径,配置成自定义的目录:
2.3.1. 创建自定义目录
创建自定义目录存储数据及日志文件:
代码语言:javascript复制sudo mkdir -p /opt/data/mongo
sudo mkdir -p /opt/mongo/mongodb/log
touch /opt/mongo/mongodb/log/mongod.log
2.3.2. 为 mongod 用户赋权
设置 mongod 用户对所创建的目录拥有读写权限:
代码语言:javascript复制sudo chown -R mongod:mongod /opt/data/mongo/
sudo chown -R mongod:mongod /opt/mongo/
2.3.3. 修改配置文件
修改配置文件/etc/mongod.conf
,配置创建的目录:
- storage.dbPath:配置数据存储目录(/opt/data/mongo)
- systemLog.path:配置日志文件目录(/opt/mongo/mongodb/log/mongod.log)
图2-3-1:配置 mongod.conf 文件
另外,net.bindIp 参数可以根据需求修改成 0.0.0.0,表示允许所有 IP 地址访问 MongoDB 服务。
2.4启动 MongoDB
2.4.1. 启动 MongoDB
执行以下命令启动 MongoDB:
代码语言:javascript复制sudo systemctl start mongod
若启动出现以下错误:
代码语言:javascript复制Failed to start mongod.service: Unit mongod.service not found.
执行以下命令后,重新使用启动命令启动 MongoDB:
代码语言:javascript复制sudo systemctl daemon-reload
2.4.2. 验证启动情况
执行以下命令验证 MongoDB 启动是否成功:
代码语言:javascript复制sudo systemctl status mongod
图2-4-1:验证 MongoDB 启动情况
另外,可以在上面配置的日志/opt/mongo/mongodb/log/mongod.log
中查看启动情况及信息。
2.4.3. 设置随系统启动
执行以下命令可设置 MongoDB 在系统启动的时候自动启动:
代码语言:javascript复制sudo systemctl enable mongod
设置后,系统重启即会自动将 MongoDB 的服务启动,无需手动操作。
2.5进入 MongoDB 命令行
MongoDB Shell 是 MongoDB 自带的交互式 Javascript shell,是用来对 MongoDB 进行操作和管理的交互式环境。
使用以下命令可进入 MongoDB Shell 命令行环境:
代码语言:javascript复制mongosh
在命令行中使用以下命令可查看目前 MongoDB 中的所有数据库:
代码语言:javascript复制show dbs
图2-5-1:进入 MongoDB 命令行环境
进入 MongoDB 命令行后,默认会连接到 test 文档(数据库)。
THE END