您是否有一个用户基础不断增长的应用程序,或者您有一个预期未来会增长的应用程序?如果是这样,那么随着应用程序保存的数据量增大,您数据库的负载很可能也在增长。无论是所需的连接数、要存储的数据量还是增加的处理能力,任何数据库最终都会达到其处理能力的极限。
目录
数据库可伸缩性是指根据您应用程序使用量的变化来扩展或收缩系统资源的能力。这既可以是应用程序使用量的增加,也可以是减少。应用程序使用量的增加会给您的数据库服务器带来三个主要挑战
CPU 和/或内存过载,数据库服务器可能无法响应所有请求吞吐量,或者无法在合理的时间内响应。
数据库服务器存储空间不足,因此无法存储所有数据。
网络接口过载,因此无法支持接收的所有网络流量。
您可能首先采取的措施来满足增加容量需求是应用程序和数据库的 优化。例如,优化应用程序代码、缓存和适当索引查询模式。这些优化可以提高应用程序的效率,并应带来一些缓解。然而,当系统资源限制达到极限时,您将需要考虑垂直、水平或同时进行 扩展。
垂直扩展是指增加单个服务器或集群的处理能力。关系型和非关系型数据库都可以向上扩展,但最终在最大处理能力和吞吐量方面都会有极限。水平扩展,也称为扩展,是指引入额外的节点来分担负载。
MongoDB Atlas 可以根据需要轻松进行垂直或水平扩展或缩减。您甚至可以启用自动扩展,以确保您的可用资源始终满足需求。
根据数据库系统和所使用的组件,有许多不同的扩展技术。然而,它们都使用 节点 的概念,即存储某些或全部数据的单个机器。一起工作的节点组称为集群。
有两种常用的水平数据库扩展技术:复制 和 水平 分区(或 分片)。MongoDB 是一种支持这两种技术的现代文档数据库。
副本指的是创建数据库或数据库节点的副本。副本增加了系统的容错性。集群中的每个节点都包含数据的副本。如果一个节点出现故障,集群仍然可以处理客户端请求,因为集群中的其他节点可以响应这些请求。
副本也是一种扩展形式,因为客户端请求可以分散到集群中的所有节点,而不是压垮单个节点。这增加了系统处理更多数据库读取请求的能力。
在MongoDB中,一组副本节点被称为副本集。副本集中的节点之一是主节点,其他节点是次节点。读取请求在各个节点之间分配。但是,只有主节点可以被写入,对主节点的更新随后会被复制到其他节点。
MongoDB Atlas默认包含副本功能,提供更高的可用性和容错性,无需额外的复杂配置或设置工作。
副本既不增加系统的总存储容量,也不增加其处理写入请求的能力。对于这些需求,我们需要考虑分区。
分区将数据分布在集群中的多个节点上。集群中的每个副本集(在MongoDB中称为分片)只存储基于集合分片键(分片策略)的数据部分,该策略决定了数据的分布。这使得集群的存储容量几乎可以无限扩展。由于每个节点只负责处理其存储的数据,因此读取和写入的整体处理能力也相应增加。
例如,在下图所示中,数据分片数据子集是根据价格范围划分的。
然而,分区比副本更复杂的扩展策略。因为每个节点只存储部分数据,对于每个请求,数据库查询需要确定哪些节点包含相关数据。在MongoDB中,客户端应用程序通过路由器连接到分片集群,路由器将请求定向到适当的节点。
如果数据存储在多个节点上,读取和写入可以并行进行。对于大量数据读取,性能得到提升,因为每个节点可以与其他节点并行读取其数据部分。
从多个节点读取存在一定的开销。所有节点的数据仍然需要通过网络传输,然后组合成一个查询结果集。对于小量数据读取,网络延迟可能是整体查询时间的重要组成部分。在这种情况下,使用定向操作更有效。
MongoDB可以在分片集群中存储分片和非分片集合。这使得应用程序能够充分利用集群处理大数据集,同时使用主分片处理小数据集。
通过MongoDB Atlas,即简化分片集群实现的开发者数据平台,部署和管理分片集群既简单又方便,成本效益也最高。
作为一个服务产品,MongoDB Atlas将扩展简化为设置正确的配置。支持水平和垂直扩展。
垂直扩展与配置集群层一样简单。请注意,即使在同一层内,还可以进行进一步的扩展(包括从M10层向上的自动扩展)。我们稍后再讨论这一点。
水平扩展是通过部署分片集群来实现的。
在MongoDB中,分片集群由分片、路由器/均衡器和元数据的配置服务器组成。虽然手动设置需要一些基础设施设置和配置,但Atlas使这一过程变得相当简单。只需为您的MongoDB集群打开选项,并选择分片的数量。
(请注意:此功能仅适用于M30集群及其以上版本。)
默认设置会为每个分片和配置服务器创建副本集和mongods。这通过使用两种类型的水平扩展提供了高可用性、冗余和增加的读写性能。路由器或mongos根据该分片上的数据将查询和写操作分布到各个分片。
别忘了,需要配置分片键,并且有几种不同的选项。有关更多信息,请参阅MongoDB关于分片键的文档。
MongoDB Atlas还提供创建全局集群的选项,该集群在地理上分区(分片)数据库,以便符合法规要求,并将相关数据靠近终端用户,以实现低延迟的读写操作。
在MongoDB Atlas中设置全局集群时,您可以从中选择几个预配置的选项或自定义区域配置以满足应用程序和客户的需求。
在本文中,我们回顾了不同类型的数据库扩展以及如何在MongoDB Atlas中实现这些扩展。您可以在您的免费MongoDB Atlas账户中尝试这些不同的扩展选项。
NoSQL 数据库通常是为了分布式数据库环境而设计的,这使得它们可以利用更多的内置可用性和分区网络解决方案,这有时是以一致性为代价的。
大多数关系型数据库管理系统(RDBMS),如 SQL Server 和 Oracle,选择一致性而不是可用性。这些系统通常专注于存储业务交易信息,因此一致性对其操作至关重要。
另一方面,大多数非关系型和非 SQL 数据库选择可用性而不是一致性,因为它们的主要关注点是即使在某些数据库节点出现故障的情况下,也能支持大量用户和数据量。这有助于通过“数据分区”方法支持可扩展性。MongoDB 通过副本集和多文档事务实现了可用性和一致性,这有助于使其成为一个ACID 兼容的数据库,并减少了开发人员通常必须做出的权衡。