MongoDB 是一个非关系型数据库(NoSQL)。它拥有很多优秀特性,例如高性能、高可用、支持丰富的查询语句、无需预定义数据模型和水平可伸缩等,这些特性使它受到众多开发者的青睐。
内容提要:在认识 MongoDB 之前,我们需要了解一些非关系型数据库的概念,这有助于我们更全面的认识 MongoDB。接着学习 MongoBD 的安装、交互式接口的使用和 MongoDB 的数据类型。
初识 NoSQL
NoSQL 泛指非关系型数据库,该词是关系型数据库(即 SQL)的相对称呼。我们常用的关系型数据库无法满足 WEB2.0 时代的需求,在实际应用中暴露了很多难以克服的问题。NoSQL 的产生就是为了解决例如海量数据的存储、弹性可伸缩和灵活性等方面的挑战。
NoSQL 的分类
NoSQL 数据库数量很多,但可以划分为如下图所示的 4 大类:
每种类型都有一个我们熟知的数据库代表,例如文档型存储数据库的代表就是 MongoDB。以下列出不同类型数据库的适用场景和数据库代表:
键值存储数据库:查询速度快,非常适合业务关系简单的场景。数据库代表——Redis;
列存储数据库:数据以列簇形式存储,通常用来应对分布式存储的海量数据,数据库代表——HBase;
文档型存储数据库:适合存储结构化、半结构化的文档和特定格式的文档。数据库代表——MongoDB;
图形数据库:它使用灵活的图形模型,适合推荐系统、社交网络。数据库代表——Neo4J。
NoSQL 的范围和定义
NoSQL 数据库并没有明确的范围和定义,但它们都存在以下特征:
不需要预定义模式:不需要事先定义数据模式,预定义表结构。数据中的每条记录都可能有不同的属性和格式。当插入数据时,并不需要预先定义它们的模式。
无共享架构:相对于将所有数据存储的存储区域网络中的全共享架构。NoSQL往往将数据划分后存储在各个本地服务器上。因为从本地磁盘读取数据的性能往往好于通过网络传输读取数据的性能,从而提高了系统的性能。
弹性可扩展:可以在系统运行的时候,动态增加或者删除结点。不需要停机维护,数据可以自动迁移。
分区:相对于将数据存放于同一个节点,NoSQL 数据库需要将数据进行分区,将记录分散在多个节点上面。并且通常分区的同时还要做复制。这样既提高了并行性能,又能保证没有单点失效的问题。
异步复制:和 RAID 存储系统不同的是,NoSQL 中的复制,往往是基于日志的异步复制。这样,数据就可以尽快地写入一个节点,而不会被网络传输引起迟延。缺点是并不总是能保证一致性,这样的方式在出现故障的时候,可能会丢失少量的数据。
BASE:相对于事务严格的ACID特性,NoSQL 数据库保证的是BASE特性。BASE是最终一致性和软事务。
归纳:NoSQL 适用于数据模型较简单、无高度的数据一致性需求,但要求高性能和灵活性的情况。
安装 MongoDB
MongoDB 官网有详细的安装指引,我们只需要根据指引进行操作即可。这里以 Ubuntu 18.04 TLS 系统和 macOS 系统为例,演示如何在系统中安装 MongoDB。
在 Ubuntu 18.04 TLS 中安装 MongoDB
安装共有 5 个步骤:导入公钥,创建列表,更新库列表,安装,验证。
Ubuntu 软件包管理工具要求使用 GPG 密钥签署软件包,以确保软件包一致性和真实性,所以我们在安装前必须导入 MongoDB 的 GPG 密钥。在终端输入以下命令:
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
命令执行后,终端输出内容如下:
gpg: 密钥 68818C72E525xxxx:公钥“MongoDB 4.0 Release Signing Key <packaging@mongodb.com>”已导入
gpg: 合计被处理的数量:1
gpg: 已导入:1
这说明密钥添加成功。接着为 MongoDB 创建列表文件。在终端输入以下命令:
$ echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
然后更新库列表,对应命令如下:
$ sudo apt-get update
待列表更新完毕后,就可以执行 MongoDB 的安装命令了。对应命令如下:
$ sudo apt-get install -y mongodb-org
命令执行后,终端输出内容如下:
完成。
正在添加用户"mongodb"到"mongodb"组...
正在将用户“mongodb”加入到“mongodb”组中
完成。
正在设置 mongodb-org (4.0.10) ...
这代表 MongoDB 已成功安装。要注意的是,apt-get
命令会在新版本可用时升级软件包。为防止意外升级,我们可以将软件包固定在当前安装的版本上。对应命令如下:
$ echo "mongodb-org hold" | sudo dpkg --set-selections
$ echo "mongodb-org-server hold" | sudo dpkg --set-selections
$ echo "mongodb-org-shell hold" | sudo dpkg --set-selections
$ echo "mongodb-org-mongos hold" | sudo dpkg --set-selections
$ echo "mongodb-org-tools hold" | sudo dpkg --set-selections
最后,使用 --version
验证 MongoDB 是否安装成功。验证命令如下:
$ mongo --version
命令执行后,终端输出内容如下:
MongoDB shell version v4.0.10
git version: c389e7f69f637f7a1ac3cc9fae843b635f20b766
OpenSSL version: OpenSSL 1.1.0g 2 Nov 2017
allocator: tcmalloc
modules: none
build environment:
distmod: ubuntu1804
distarch: x86_64
target_arch: x86_64
这说明 MongoDB 已成功安装。MongoDB 安装完成后并未自动启动,启动命令如下:
$ sudo systemctl start mongod
命令执行后,如无报错信息即视为启动成功。当然,我们也可以为它设置开机启动。对应命令如下:
$ sudo systemctl enable mongod
以上就是在 Ubuntu 18.04 TLS 系统中安装 MongoDB 的过程。
在 macOS 中安装 MongoDB
在 macOS 中,我们通常使用 Homebrew 安装应用,因此我们在安装 MongoDB 前必须先安装 Homebrew。Homebrew 官方网址为:https://brew.sh/,我们按照其指引进行安装即可。在终端执行以下命令:
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
命令执行后,系统就会自动安装 Homebrew。接着我们就可以使用 brew install name
这样的命令安装其他应用了。首先,我们将 MongoDB 的包添加到 Homebrew,对应命令如下:
$ brew tap mongodb / brew
接着执行安装命令:
$ brew install mongodb-community
命令执行后,就会在系统中安装 MongoDB。安装后会创建对应的文件,例如:
配置文件,路径为:
/usr/local/etc/mongod.conf
;日志目录,路径为:
/usr/local/var/log/mongodb
;数据目录,路径为
/usr/local/var/mongodb
;
MongoDB 安装完成后通常会自己启动,或者我们可以输入命令启动它。例如前台运行(进程方式)的命令如下:
$ mongod --config /usr/local/etc/mongod.conf
或者作为服务启动,对应命令如下:
$ brew services start mongodb-community
安装完后,我们就该:
认识 MongoDB
交互式接口 MongoShell的使用
MongoDB 数据类型
数据库和集合的 CRUD 操作
由于篇幅有限
文章内容还特别夯实
感兴趣的同学可以扫描二维码阅读完整文章
???
细心的读者可能已经发现了,本篇并没有介绍数据库重命名的方法。这是因为 MongoDB 并未提供直接为数据库改名的方法,虽然可以使用 db.copyDatabase()
方法复制数据库,然后删除原数据库这种方式,但这在实际应用中是不可取的。你可以想象,拷贝一个庞大的数据库所耗费的时间和资源。
接下来我还会继续撰写流式聚合操作,并深入了解语句的执行效率。
在效率提升方面,数据模型也是必须要了解的知识。然后我们将深入学习能够提高数据服务可用性的复制集。接着,我们将了解 MongoDB 的水平扩展能力。最后,我们将了解 MongoDB 数据的备份与还原,并为数据服务开启访问控制。
感兴趣的同学还可以加入 MongoDB 交流群哦
扫描二维码发送暗号「db」即可
如若添加不上的话,可以直接搜索微信号「huacode」
是不是很不错??