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
命令执行后,终端输出内容如下: