MongoDB 是一种面向文档的NoSQL数据库

这是关于MongoDB基本概念的总结。这是一个关于MongoDB的网站摘录,整理了已经存在于网络上的优质解释性内容。MongoDB是一种开源文档导向的非关系型数据库。

我们采用了一个结果整合性保证模型,实现了高可用性和水平扩展性。

MongoDB是一种适用于分布式计算环境的数据库,通过只保证“结果一致性”来实现水平扩展。

若有人更新了数据并且足够的时间已经过去以使该数据被复制,之后再没有进行更新,则肯定可以访问到该新数据。

换句话说,即使在MongoDB中,数据更新请求已完成,但并不能保证分布环境中所有复制的数据都已更新完毕。因此,如果在此时从外部进行数据读取,也并不一定能够读取到更新后的数据。

所以,在MongoDB中,无法进行事务处理。此外,也不能进行表的JOIN操作(即无法在数据库端对多个文档进行连接)。

然而,这种明确放弃完全一致性的决策不仅可以实现在关系数据库系统中难以达到的水平扩展,还能轻松地实现多份数据副本并实现高可用性。

文档导向的数据库

MongoDB是一种文档导向的无模式数据库,这意味着它不需要事先定义数据类型,可以直接存储各种类型的数据。

在MongoDB中,我们通过以下概念来操作数据。

・数据库
・集合 (Collection)
・文档 (Document = 对象)

利用 JSON 形式来表示被称为 “文档” 的结构化数据,并将这些文档的集合作为 “集合” 进行管理(对应 RDB 的表)。集合没有像 RDBMS 那样固定的模式。文档可以具有复杂的层次结构,并可以通过简单的指定来指定查询或生成索引,以指定包含在这些结构中的字段。

虽然无法像RDBMS那样高效地执行复杂的连接操作,但可以快速地进行数据的添加、更新、删除和查询。

然而,尽管MongoDB不需要定义模式,但考虑到性能,通常需要定义模式,并且可以通过逐渐定义和修改模式来实现灵活的开发,使其成为一种可实现的数据库。

尽管是noSQL,但能够支持多样化的查询。

使用类似于SQL的操作语言Mongo查询语言(MongoDB Query Language)来访问数据库。

数据结构是数据库 -> 集合 -> 文档,处理的文档数据是JSON格式的数据,可以重新创建除了JOIN之外的大部分SQL。

另外,由于可以描述变量和控制结构等,因此也可以描述高级查询,如聚合等。

[使用控制結構的例子]
在MongoDB中,可以使用JavaScript的控制結構。例如,可以使用for循環將數據插入,如下所示:
for (var i = 1; i <= 20; i++) db.col1.insert( { x : 4 , j : i } )

复制集:实现高可用性的机制。

MongoDB支持主从复制的模式,通过简单的机制可以实现高可用性。

MongoDB在中文中,将主节点称为主服务器(或主库),将从节点称为从服务器(或从库)。从服务器会持有主服务器的数据副本。以复制的形式进行配置,即使主节点发生故障,也具有自动故障转移功能,可以最大限度地减少数据丢失和服务停止时间。MongoDB的最小复制配置需要三个节点。

另外,使用复制功能可以将读(Read)负载分散在节点之间。如果应用程序的负载主要由读操作占据,通过将读负载分散到从节点上可以使系统进行扩展。

自动分片:水平扩展数据库数据

分散数据库是一种将数据分散到多个服务器的功能。通过将数据分散到多个服务器,可以实现CPU和I/O负载的分散。

分片:
实际上存储数据的mongod进程。一个文档存储在一个分片中,不在分片之间复制数据。

MongoDB的分片使用了区间分区的方式。通过指定分片键,确定了存储在每个服务器上的数据范围。在服务器之间没有重复的数据,一个数据将存储在一个服务器上,这个服务器由分片键的范围来确定。

MongoDB具备自动平衡功能,该功能包括键范围调整和伴随调整的服务器之间的数据移动。自动平衡功能的设计使得用户无需关注服务器之间的数据偏差。此外,当添加新的服务器时,系统还会自动调整数据的移动,消除偏差。

MongoDB组件

MongoDB具备主/从复制功能,而且它实现了自动故障转移,在主节点发生故障时能够自动进行故障转移和恢复。为此,MongoDB有三个组成要素:作为主节点的“Primary”(主节点)、作为从节点的“Secondary”(从节点)以及在故障转移时选择新的主节点的组件“Arbiter”(仲裁者)。从节点保留主节点数据的副本,而仲裁者不保留数据的副本。为了配置一个能够自动故障转移的副本集,至少需要三个节点。

主要角色: 复制的主控方。保留数据的主控方。

次要:复制的从属。保留了主数据库上的数据副本。

仲裁者:在自动故障切换时选择新的主节点。

MongoDB的分片功能具备自动负载均衡的功能,可以自动移动服务器之间的数据。为了进行数据管理,需要使用config服务器和mongos服务器这两个组件。

配置服务器:
配置服务器是管理分片元数据的 mongod 进程。由于它是一个单点故障点,所以建议采用多个配置服务器进行配置。

mongos服务器:在分片中负责路由处理的进程,用于协调分片和客户端之间的通信。如果需要,可以建立多个mongos服务器。