公告介绍MongoDB 8.0,史上最快的MongoDB!了解更多 >>介绍MongoDB 8.0,史上最快的MongoDB!>>

您是否有一个用户基础不断增长的应用程序,或者您有一个预期未来会增长的应用程序?如果是这样,那么随着应用程序保存的数据量增大,您数据库的负载很可能也在增长。无论是所需的连接数、要存储的数据量还是增加的处理能力,任何数据库最终都会达到其处理能力的极限。


目录

什么是数据库可伸缩性?

数据库可伸缩性是指根据您应用程序使用量的变化来扩展或收缩系统资源的能力。这既可以是应用程序使用量的增加,也可以是减少。应用程序使用量的增加会给您的数据库服务器带来三个主要挑战

  1. CPU 和/或内存过载,数据库服务器可能无法响应所有请求吞吐量,或者无法在合理的时间内响应。

  2. 数据库服务器存储空间不足,因此无法存储所有数据。

  3. 网络接口过载,因此无法支持接收的所有网络流量。

您可能首先采取的措施来满足增加容量需求是应用程序和数据库的 优化。例如,优化应用程序代码、缓存和适当索引查询模式。这些优化可以提高应用程序的效率,并应带来一些缓解。然而,当系统资源限制达到极限时,您将需要考虑垂直、水平或同时进行 扩展


什么是垂直和水平扩展?

垂直扩展是指增加单个服务器或集群的处理能力。关系型和非关系型数据库都可以向上扩展,但最终在最大处理能力和吞吐量方面都会有极限。水平扩展,也称为扩展,是指引入额外的节点来分担负载。

MongoDB Atlas 可以根据需要轻松进行垂直或水平扩展或缩减。您甚至可以启用自动扩展,以确保您的可用资源始终满足需求。

如何提高数据库性能并使其更具可伸缩性

根据数据库系统和所使用的组件,有许多不同的扩展技术。然而,它们都使用 节点 的概念,即存储某些或全部数据的单个机器。一起工作的节点组称为集群。

有两种常用的水平数据库扩展技术:复制水平 分区(或 分片)。MongoDB 是一种支持这两种技术的现代文档数据库。


复制

副本指的是创建数据库或数据库节点的副本。副本增加了系统的容错性。集群中的每个节点都包含数据的副本。如果一个节点出现故障,集群仍然可以处理客户端请求,因为集群中的其他节点可以响应这些请求。

An image showing how replication can replicate data.

副本也是一种扩展形式,因为客户端请求可以分散到集群中的所有节点,而不是压垮单个节点。这增加了系统处理更多数据库读取请求的能力。

在MongoDB中,一组副本节点被称为副本集。副本集中的节点之一是主节点,其他节点是次节点。读取请求在各个节点之间分配。但是,只有主节点可以被写入,对主节点的更新随后会被复制到其他节点。

Replica set example in mongodb

MongoDB Atlas默认包含副本功能,提供更高的可用性和容错性,无需额外的复杂配置或设置工作。

副本既不增加系统的总存储容量,也不增加其处理写入请求的能力。对于这些需求,我们需要考虑分区

分区(又称分片)

分区将数据分布在集群中的多个节点上。集群中的每个副本集(在MongoDB中称为分片)只存储基于集合分片键(分片策略)的数据部分,该策略决定了数据的分布。这使得集群的存储容量几乎可以无限扩展。由于每个节点只负责处理其存储的数据,因此读取和写入的整体处理能力也相应增加。

例如,在下图所示中,数据分片数据子集是根据价格范围划分的。

Database shards determined by price range.

然而,分区比副本更复杂的扩展策略。因为每个节点只存储部分数据,对于每个请求,数据库查询需要确定哪些节点包含相关数据。在MongoDB中,客户端应用程序通过路由器连接到分片集群,路由器将请求定向到适当的节点。

如果数据存储在多个节点上,读取和写入可以并行进行。对于大量数据读取,性能得到提升,因为每个节点可以与其他节点并行读取其数据部分。

从多个节点读取存在一定的开销。所有节点的数据仍然需要通过网络传输,然后组合成一个查询结果集。对于小量数据读取,网络延迟可能是整体查询时间的重要组成部分。在这种情况下,使用定向操作更有效。

MongoDB可以在分片集群中存储分片和非分片集合。这使得应用程序能够充分利用集群处理大数据集,同时使用主分片处理小数据集。

通过MongoDB Atlas,即简化分片集群实现的开发者数据平台,部署和管理分片集群既简单又方便,成本效益也最高。

MongoDB Atlas 扩展

作为一个服务产品,MongoDB Atlas将扩展简化为设置正确的配置。支持水平和垂直扩展。

垂直扩展与配置集群层一样简单。请注意,即使在同一层内,还可以进行进一步的扩展(包括从M10层向上的自动扩展)。我们稍后再讨论这一点。

水平扩展是通过部署分片集群来实现的。

部署分片集群

在MongoDB中,分片集群由分片、路由器/均衡器和元数据的配置服务器组成。虽然手动设置需要一些基础设施设置和配置,但Atlas使这一过程变得相当简单。只需为您的MongoDB集群打开选项,并选择分片的数量。


Sharding your cluster in mongodb atlas

(请注意:此功能仅适用于M30集群及其以上版本。)


默认设置会为每个分片和配置服务器创建副本集和mongods。这通过使用两种类型的水平扩展提供了高可用性、冗余和增加的读写性能。路由器或mongos根据该分片上的数据将查询和写操作分布到各个分片。

别忘了,需要配置分片键,并且有几种不同的选项。有关更多信息,请参阅MongoDB关于分片键的文档。

MongoDB Atlas全局集群

MongoDB Atlas还提供创建全局集群的选项,该集群在地理上分区(分片)数据库,以便符合法规要求,并将相关数据靠近终端用户,以实现低延迟的读写操作。

Setting up global clusters in MongoDB Atlas

在MongoDB Atlas中设置全局集群时,您可以从中选择几个预配置的选项或自定义区域配置以满足应用程序和客户的需求。

MongoDB自动扩展

MongoDB Atlas具有集群自动扩展功能,它根据集群使用情况进行垂直扩展。这就像配置集群层一样简单。

setting up auto-scaling in mongodb atlas

集群层/CPU功率和存储量都可以自动扩展。这为您提供了自动和反应性的垂直扩展,无论是向上还是向下,而无需担心设置新服务器、迁移数据,甚至中间的停机。如果需要,集群还可以暂停,有效地将整个集群的扩展到0,除了存储。

无服务器架构

无服务器是一种下一代云原生开发模型,允许开发者在不考虑服务器配置、管理和扩展的情况下构建应用程序和运行代码。术语“无服务器”并不意味着没有服务器,而是反映服务器配置和管理已被抽象(或隐藏)从最终用户。

MongoDB Atlas包括对无服务器部署的支持。在考虑具有可变资源需求的应用程序时,自动扩展和无服务器架构都可以优化性能,同时最大限度地减少成本。

总结

在本文中,我们回顾了不同类型的数据库扩展以及如何在MongoDB Atlas中实现这些扩展。您可以在您的免费MongoDB Atlas账户中尝试这些不同的扩展选项。

常见问题解答

MongoDB是否可扩展?

是的。MongoDB允许您通过向集群添加更多虚拟资源或通过分片来分区数据来垂直扩展您的集群。

如何扩展数据库?

数据库通过添加更多虚拟资源到现有机器(垂直扩展)或添加更多机器、在那些机器上分配数据并跨这些机器处理数据(水平扩展)来扩展。

什么是数据库管理系统中的扩展?

数据库管理系统中的扩展是指扩展数据库系统容量的能力,以便在不牺牲性能的情况下支持更多的请求和/或存储更多的数据。

什么是可伸缩性问题?

可扩展性问题是由系统无法支持虚拟资源(如存储/内存、处理和网络带宽)增长需求而产生的问题。这些问题通常表现为系统性能下降、错误或无响应。

如何测试可扩展性?

可扩展性通常通过负载测试来测试,例如模拟现实生活中的大量请求,并确保系统可以支持这些请求并适应不同的负载量。

关系型数据库可扩展吗?

是的。然而,关系型数据库不像更现代的非关系型数据库那样容易扩展。例如,MongoDB 就是从头开始构建以实现大规模扩展和高可用性的。

为什么 NoSQL 数据库比 RDBMS 数据库更可扩展?

NoSQL 数据库通常是为了分布式数据库环境而设计的,这使得它们可以利用更多的内置可用性和分区网络解决方案,这有时是以一致性为代价的。

大多数关系型数据库管理系统(RDBMS),如 SQL Server 和 Oracle,选择一致性而不是可用性。这些系统通常专注于存储业务交易信息,因此一致性对其操作至关重要。

另一方面,大多数非关系型和非 SQL 数据库选择可用性而不是一致性,因为它们的主要关注点是即使在某些数据库节点出现故障的情况下,也能支持大量用户和数据量。这有助于通过“数据分区”方法支持可扩展性。MongoDB 通过副本集和多文档事务实现了可用性和一致性,这有助于使其成为一个ACID 兼容的数据库,并减少了开发人员通常必须做出的权衡。

我该如何扩展 SQL 数据库?

通常,您首先通过添加更多存储、CPU 和内存进行垂直扩展。您还可以启用复制,并从集群中的不同节点处理一些读取请求。然而,这可能需要应用程序知道不同的节点。

我该如何水平扩展数据库?

水平扩展涉及添加额外的服务器,并将系统数据集和负载分区到这些服务器上。垂直扩展涉及扩展单个服务器/副本集使用的资源。

水平扩展或垂直扩展哪个更好?

两者都不更好。您应选择满足您用例的数据库扩展类型。垂直扩展通常更简单但更有限。水平扩展更复杂,但支持更大的负载,包括请求处理的数量以及总数据存储量。

准备好开始了吗?

启动新的集群或将迁移到 MongoDB Atlas,零停机时间。