新钛云服已累计为您分享697篇技术干货


接下来的一些列文章会为大家介绍日常工作中常用的 NoSQL 产品 MongoDB。主要涉及到:
1、MongoDB 的安装及基本使用
2、MongoDB 文档查询
3、MongoDB 复制集的介绍及搭建
4、MongoDB 分片集群的介绍及搭建
5、MongoDB 的备份及恢复
6、MongoDB 安全加密
7、MongoDB Change Stream 功能介绍及代码演示
8、MongoDB 其他
我们会用八篇文章近五万字来阐述 MongoDB 运维相关的日常实战事宜。您当前看到的是系列文章的第一篇:《MongoDB 的安装及基本使用》。
闲篇
在进入正题前,我们先自问自答一下为什么要自建 MongoDB?如果不自建则使用公有云厂商提供的 SaaS 版,其费用会怎样呢?我们这里以阿里云为例。首先看下SaaS 版(分片集群所需要的配置)的费用问题。

那么上述配置的费用为:96.316 * 24 * 365 = 843728.16 元。如果觉得上述配置比较高,可以考虑降低一些配置,那么费用如下图所示:

那么上述配置的费用为:58.774 * 24 * 365 = 514860.24 元。
可以看到,如果对数据安全性要求比较高,使用分片集群的话,每年的费用至少是 50 ~ 80 万元。如果不差钱到无所谓,如果预算有限,项目上还必须要使用的话,就必须要自己来搭建维护了。
文档
MongoDB 将数据记录存储为 BSON 文档。BSON 是 JSON 文档的二进制表示形式,尽管它包含的数据类型比 JSON 多。有关 BSON 规范,请参阅 bsonspec.org(http://bsonspec.org/)。另请参阅 BSON (https://docs.mongodb.com/manual/reference/bson-types/)类型。
MongoDB 将 BSON 文档(即数据记录)存储在集合中;将集合存储在数据库中。文档是 MongoDB 的核心概念。多个键及其关联的值有序地放置在一起便是文档。
· 文档中的键/值对是有序的。
· 文档中的值不仅可以是在双引号里面的字符串,还可以是其它几种数据类型。
· 文档的键是字符串。除了少数例外情况,键可以是任意 UTF8 字符。
· 键不能含有 \0(空字符)。这个字符用来表示键的结尾。
· 和 $ 有特别的意义,只有在特定环境下才能使用。
· 以下划线 _ 开头的键是保留的,虽然这个并不是严格要求的。
MongoDB 不但区分类型,也区分大小写。MongoDB 的文档不能有重复的键。
集合
集合就是一组文档。如果说 MongoDB 中的文档类似于关系型数据库中的行,那么集合就如同表。
数据库
MongoDB 中多个文档组成集合,同样多个集合可以组成数据库。一个 MongoDB 实例可以承载多个数据库,它们之间可视为完全独立的。每个数据库都有独立的权限控制,即便是在磁盘上,不同的数据库也放置在不同的文件中。

与关系型数据库的对比
与关系型数据库的区别:
总结一下 MongoDB 与 RDBMS 的区别:
· 数据库及索引 (类似 SQL 的数据库)
· 集合 (类似 SQL 的表)
· 文档 (类似 SQL 的行)
· 字段 (类似 SQL 的列)
· 嵌入及关联的文档 (类似 SQL 的连接(join))
一些更具体的对比如下表格:


MongoDB 的特点及使用场景
一些关键特征如下:
它是一个通用数据库:与为特定目的构建的其他 NoSQL 数据库(例如图形数据库)不同,MongoDB 可以在应用程序中提供异构负载和多种用途。在 4.0 版本还引入多文档 ACID 事务。
灵活的模式设计:具有可以随时修改的非定义属性的面向文档的方法是 MongoDB 和关系数据库之间的关键对比。
轻松实现高可用性:在我们可用性为五个九的时代,这必须是理所当然的。再加上检测到服务器故障时的自动故障转移,这有助于实现高正常运行时间。
功能丰富:提供全方位的SQL 等效运算符,以及 MapReduce、聚合框架、Time to Live 和上限集合以及二级索引等功能,无论需求多么多样化,MongoDB 都可以适应许多用例。
可扩展性和负载平衡:它是为垂直和(主要是)水平缩放而构建的。使用分片,架构师可以在不同实例之间共享负载,并实现读写可扩展性。数据平衡通过碎片均衡器自动进行(对用户透明)。
聚合框架:在数据库中内置 ETL 框架意味着开发人员可以在数据离开数据库之前执行大部分 ETL 逻辑,在许多情况下,无需复杂的数据管道。
原生复制:数据将在副本集中复制,而无需复杂的设置。
安全功能:将身份验证和授权都考虑在内,以便架构师可以保护他们的 MongoDB 实例。
用于存储和传输文档的JSON(BSON和二进制JSON)对象:JSON 在网络上广泛用于前端和 API 通信,因此,当数据库使用相同的协议时会更容易。
MapReduce:尽管 MapReduce 引擎不如专用框架先进,但它仍然是构建数据管道的绝佳工具。
多文档ACID事务:从 4.0 版本开始,MongoDB 支持跨多个文档的 ACID 事务。
成熟工具:MongoDB 的工具已发展到支持从 DBaaS 到 Sync、Mobile 和无服务器(Stitch)。
其许多最成功的用例集中在以下领域:
· 整合简洁数据,提供单一视图
· IoT 物联网
· 移动应用程序
· 实时分析
· 个性化
· 目录管理
· 内容管理
安装
版本选择
通常情况下,我们应该选择偶数版本(如:4.2)。奇数版本(如:4.3)是开发版本,不适合在生产环境中使用。目前,MongoDB 已经发展到了 6.0 版本。但从公有云厂商提供的版本(3.4、4.0、4.2)来看,4.x 版本依然是主流。因此,我们这里选择了最新的 4.4 版本。
环境准备
我们这里选择 CentOS 7.9 作为接下来所有的演示操作,当然我们也可以选择其他发行版。
[root@mongo01 ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
系统设置
[root@mongo01 ~]# echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
[root@mongo01 ~]# echo "never" > /sys/kernel/mm/transparent_hugepage/defrag
上述是临时性的设置,系统重启就会失效。永久性设置:
[root@mongo01 ~]# cat >> /etc/rc.d/rc.local <<EOF
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo "never" > /sys/kernel/mm/transparent_hugepage/defrag
fi
EOF
由于 /etc/rc.d/rc.local 文件默认没有可执行权限,需要增加可执行权限,那么在下次开机时它会自动执行。如下:
[root@mongo01 ~]# chmod +x /etc/rc.d/rc.local
[root@mongo01 ~]# ls -l /etc/rc.d/rc.local
-rwxr-xr-x. 1 root root 725 Jul 29 02:32 /etc/rc.d/rc.local

本文是MongoDB运维系列的第一篇,详细介绍了MongoDB的安装过程,包括版本选择、环境准备、YUM安装等步骤。文章还讨论了MongoDB的特点、使用场景和与关系型数据库的对比,强调了其在高可用性、灵活性和扩展性等方面的优势。最后,文章展示了创建用户、启用认证和远程连接MongoDB的基本操作。

最低0.47元/天 解锁文章
509

被折叠的 条评论
为什么被折叠?



