首页 > 编程笔记 > MongoDB 阅读:7

MongoDB数据库分片是什么意思?(新手必看)

MongoDB 数据库分片是一种跨多台机器分布数据的方法。MongoDB 使用分片来支持超大数据集和高吞吐量操作的部署。

分片的含义

MongoDB 数据库分片就是将数据分成块,再将块存储到不同的服务器上,其实是一种分布式存储数据的方法。如果数据库系统存在大型数据集或高吞吐量应用程序的情形,可能会对单个服务器的容量构成挑战。

例如,较高的查询速率可能会耗尽服务器的 CPU 容量。大于系统 RAM 的工作集大小会对磁盘驱动器的 I/O 容量造成压力。因此,有两种方法可以解决系统扩展的问题,分别是垂直扩展(Vertical Scaling)和水平扩展(Horizontal Scaling)。

1) 垂直扩展

涉及增大单个服务器的容量,例如使用更强大的 CPU、添加更多 RAM 或增加存储空间量。可用技术所存在的限制可能会导致单个机器对于给定工作负载来说不够强大。因此,垂直扩展存在实际的最大值。

2) 水平扩展

涉及将系统数据集和负载划分到多个服务器,以及按需增加服务器以提高容量。虽然单个机器的总体速度或容量可能不高,但每个机器均可处理总体工作负载的一部分,因此可能会比单个高速、高容量服务器提供更高的效率。

扩展部署的容量只需按需添加额外的服务器,而且这可能会比添加单个机器的高端硬件整体成本更低,但这种做法的代价在于会增大部署的基础设施与维护的复杂性。

对于 MongoDB 数据库而言,支持通过分片进行水平扩展。

分片键的含义

MongoDB 数据库使用分片键在分片之间分发集合的文档,分片键由文档中的一个或多个字段组成,分片集合中的文档可能缺少分片键字段。

当跨分片分发文档时,缺少的分片键字段时将被视为 null 值,但在路由查询时则不会。

MongoDB 在对集合进行分片时会选择分片键。从 MongoDB 5.0 版本开始,就可以通过更改集合的分片键对集合重新分片。此外,还可以通过向现有分片键添加后缀字段或添加新字段来优化分片键。文档的分片键值决定了其在各分片中的分布。我们可以更新文档的分片键值,除非分片键字段是不可变的 _id 字段。

分片键索引用于对已填充的集合进行分片,该集合必须具有以分片键开头的索引。对空集合进行分片时,如果该集合还没有指定分片键的适当索引,MongoDB 数据库会创建支持索引。

分片键策略对于分片键的选择会影响分片集群的性能、效率和可扩展性。具有最佳硬件和基础架构的集群,可能会因为选择分片键而遇到瓶颈,分片键及其后备索引的选择也会影响集群可以使用的分片策略。

MongoDB 数据库将数据分片为数据段,每个数据段都有一个基于分片键、包含下限且不包含上限的范围。为了实现数据在集群中所有分片上的均匀分布,负载均衡器会在后台运行,以便在各分片之间迁移范围。

分片的优点

MongoDB 数据库分片具有如下几项优点。

1) 读取/写入优点

MongoDB 在分片集群中的分片之间分配读写工作负载,支持每个分片处理集群操作的子集。通过添加更多的分片,读写工作负载都可以在集群中横向扩展。

对于包含分片键或复合分片键前缀的查询,mongos 可将查询定向到特定分片或一组分片。这些有针对性的操作通常比向集群中的每个分片进行广播更为有效。

2) 存储容量优点

分片将数据分布在集群中的分片上,从而允许每个分片包含整个集群数据的子集。随着数据集的增长,更多的分片会增加集群的存储容量。

3) 高可用性优点

按副本集来部署配置服务器和分片,可提高可用性。即使一个或多个分片副本集变为完全不可用,分片集群仍可继续执行部分读取和写入操作。

换言之,即便无法访问不可用分片上的数据,针对可用分片的读取或写入仍可成功完成。

相关文章