MongoDB分片教程

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: MongoDB分片教程

一、概述

分片是一种将数据分布在多个 机器。MongoDB使用分片来支持具有非常大数据的部署 集和高吞吐量操作。

具有大型数据集或高吞吐量应用程序的数据库系统可以 挑战单个服务器的容量。例如,高查询率可以 耗尽服务器的 CPU 容量。工作集大小大于 系统的 RAM 会给磁盘驱动器的 I/O 容量带来压力。

有两种方法可以解决系统增长问题:垂直和水平 缩放。

垂直扩展涉及增加单个服务器的容量,例如 如使用更强大的 CPU、添加更多 RAM 或增加 存储空间。可用技术的限制可能会限制单个 机器对于给定的工作负载来说足够强大。此外 基于云的提供商具有基于可用硬件的硬天花板 配置。因此,垂直缩放有一个实际最大值。

水平扩展涉及划分系统数据集并加载 多台服务器,根据需要添加其他服务器以增加容量。 虽然单台机器的整体速度或容量可能不高,但每台 机器处理整体工作负载的子集,可能提供更好的 比单个高速高容量服务器的效率。扩展 部署容量只需要根据需要添加额外的服务器, 这可能比单台机器的高端硬件更低的总成本。 代价是基础设施和维护的复杂性增加 部署。

MongoDB支持水平扩展分片。

二、分片集群

MongoDB分片集群由以下组件组成:

  • 分片:每个分片包含分片数据的一个子集。每个碎片都可以作为副本集部署。
  • mongos:mongos充当查询路由器,在客户端应用程序和分片集群之间提供接口。从MongoDB 4.4开始,mongos可以支持对冲读取以最小化延迟。
  • 配置服务器:配置服务器存储集群的元数据和配置设置。

下图描述了 分片集群:

image.gif编辑

MongoDB在收集级别,分发 跨集群中的分片收集数据。

1、分片键

MongoDB使用to 跨分片分发集合的文档。分片键 由文档中的一个或多个字段组成:

  • 1、从版本 4.4 开始,分片集合中的文档可以是 缺少分片键字段。缺少分片键字段被视为 跨分片分发文档时具有空值,但 路由查询时不行。
  • 2、在版本 4.2 及更早版本中,分片键字段必须存在于每个 分片集合的文档。

在以下情况下选择分片键对集合进行分片:

  • 1、从MongoDB 5.0开始,您可以通过更改集合的碎片密钥来重新整理集合。
  • 2、从MongoDB 4.4开始,您可以通过向现有分片密钥添加后缀字段来细化分片密钥。
  • 3、在MongoDB 4.2及更早版本中,切分后无法更改切分密钥的选择。

文档的碎片键值决定了它在碎片中的分布:

  1. 1、从MongoDB 4.2开始,您可以更新文档的切分密钥值,除非切分密钥字段是不可变的_id字段。有关详细信息,请参见更改文档的碎片键值。
  2. 2、在MongoDB 4.0及更早版本中,文档的切分键字段值是不可变的。

分片索引

要对填充的集合进行切分,集合必须具有以切分键开头的索引。当对空集合进行分片时,如果该集合尚未为指定的分片键创建适当的索引,MongoDB将创建支持索引。请参见碎片关键索引。

分片键策略

分片键的选择会影响性能、效率和可扩展性 的分片集群。具有最佳硬件和 基础设施可能会因分片键的选择而成为瓶颈。的选择 分片键及其支持索引也会影响分片策略您的集群可以使用。

2、块

MongoDB将数据分片到块.每 块具有基于的包容性下限和排除上限范围分片键。

3、平衡器甚至块分布

试图实现块在所有 集群中的分片,一个平衡器在后台运行到 迁移块横跨碎片.

4、分片的优势

读/写

MongoDB将读写工作负载分布在碎片在分片集群,允许每个分片 处理群集操作的子集。读取和写入工作负载都可以 通过添加更多分片在集群中水平扩展。

对于包含分片键或前缀的查询复合分片键,mongos可以将查询定位在 特定分片或分片集。这些目标 操作通常比广播到集群中的每个分片。

从MongoDB 4.4开始,mongos可以支持对冲 读以最大程度地减少延迟。

存储容量

分片将数据分布在碎片在 集群,允许每个分片包含总集群数据的一个子集。如 数据集增长,额外的分片增加了 簇。

高可用性

配置服务器和分片作为副本集的部署提供 提高了可用性。

即使一个或多个分片副本集变得完全不可用, 分片集群可以继续执行部分读写。 也就是说,当无法访问不可用分片上的数据时, 针对可用分片的读取或写入仍然可以成功。

5、分片前的注意事项

分片集群基础架构要求和复杂性要求 仔细规划、执行和维护。

一旦集合被分片,MongoDB不提供任何方法来 解分 分片集合。

虽然你可以重新分片您的收藏稍后,请务必仔细考虑您的分片键选择 避免可伸缩性和性能问题。

如果查询不包含分片键或前缀复合分片键,mongos执行 一个广播操作,查询分片集群中的所有分片。这些分散/收集查询可以 是长时间运行的操作。

从 MongoDB 5.1 开始,当启动、重新启动或添加分片服务器跟sh.addShard()这集群范围写入关注点 (CWWC)必须设置。

如果未设置且分片已配置 这样CWWC默认写入关注点是分片服务器将无法启动或添加 并返回错误。{ w : 1 }

看默认写入关注点计算为 有关如何计算默认写入关注点的详细信息。

6、分片和非分片集合

数据库可以混合使用分片集合和非分片集合。分片 收藏是分区并分布在碎片在群集中。未分片的集合存储在主分片.每个数据库都有自己的主分片。

image.gif编辑

7、连接到分片集群

您必须连接到mongos路由器才能与碎片集群中的任何集合进行交互。这包括分片和未分片的集合。为了执行读或写操作,客户端不应连接到单个碎片。

image.gif编辑

您可以使用mongosh或MongoDB驱动程序以与mongod相同的方式连接mongos。

8、分片策略

MongoDB支持两种分片策略,用于跨分片集群分发数据。

哈希分片

哈希分片涉及计算分片密钥字段值的哈希。然后,根据散列的碎片键值为每个块分配一个范围。

image.gif编辑

虽然一系列分片键可能“接近”,但它们的哈希值不太可能 要在同一上块.基于哈希值的数据分布 促进更均匀的数据分布,特别是在数据集中 分片键更改单调。

但是,散列分布意味着对分片键进行基于范围的查询 不太可能以单个分片为目标,从而导致集群范围更大广播操作

远程分片

范围分片涉及将数据划分为基于范围 分片键值。每块然后根据 分片键值。

image.gif编辑

9、分片集群中的可用区

分区可以帮助改善跨越多个数据中心的分片集群的数据位置。

在分片集群中,可以基于分片密钥创建分片数据区域。您可以将每个分区与集群中的一个或多个碎片相关联。碎片可以与任意数量的区域关联。在一个平衡集群中,MongoDB只将一个区域覆盖的块迁移到与该区域关联的那些碎片。

每个区域包含一个或多个碎片键值范围。区域覆盖的每个范围始终包括其下边界,不包括其上边界。

image.gif

您必须使用分片键定义新的时 要覆盖的区域的范围。如果使用复合碎片 键,则范围必须包含分片键的前缀。看分片键 在区域中了解更多信息。

10、分片中的排序规则

使用shardCollection命令,可以选择对具有collation : { locale : "simple" }默认排序规则.成功的 分片要求:

  • 集合必须具有前缀为分片键的索引
  • 索引必须具有排序规则{ locale: "simple" }

使用排序规则创建新集合时,请确保满足以下条件 在对集合进行分片之前满足。

11、事务

从MongoDB 4.2开始,随着分布式事务的引入,多文档事务在分片集群上可用。

在事务提交之前,事务中所做的数据更改在事务外部是不可见的。

然而,当事务写入多个碎片时,并非所有外部读取操作都需要等待提交事务的结果在碎片中可见。例如,如果提交了一个事务,并且写1在碎片a上可见,但写2在碎片B上尚不可见,则外部读时关注点“本地”可以读取写1的结果,而不会看到写2。



官网:Doker 多克; 官方旗舰店:首页-Doker 多克 多克创新科技企业店-淘宝网 技术人的数码品牌!!!全品优惠,期待您的支持!!!

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
7月前
|
运维 NoSQL 安全
【最佳实践】高可用mongodb集群(1分片+3副本):规划及部署
结合我们的生产需求,本次详细整理了最新版本 MonogoDB 7.0 集群的规划及部署过程,具有较大的参考价值,基本可照搬使用。 适应数据规模为T级的场景,由于设计了分片支撑,后续如有大数据量需求,可分片横向扩展。
576 1
|
5月前
|
NoSQL MongoDB 数据安全/隐私保护
|
7天前
|
存储 负载均衡 NoSQL
MongoDB分片技术:实现水平扩展的利器
【4月更文挑战第30天】MongoDB的分片技术是应对数据增长和复杂业务需求的解决方案,它将数据水平拆分存储在多个实例上,实现数据库的水平扩展。分片带来水平扩展性、负载均衡、高可用性和灵活的数据管理。分片工作涉及mongos路由进程、config server和shard实例。设置分片包括部署配置服务器、添加分片、启动mongos、配置分片键和开始分片。选择合适的分片键和有效管理能确保系统性能和稳定性。
|
7天前
|
NoSQL 算法 测试技术
【MongoDB 专栏】MongoDB 的自动分片与手动分片
【5月更文挑战第11天】MongoDB的分片技术在处理大规模数据和高并发场景中至关重要,提供自动和手动两种方式。自动分片基于预定义规则,简化管理,适合大部分场景,但灵活性有限。手动分片则允许用户自定义策略,实现高效布局,适用于有特殊需求的应用,但配置复杂。选择分片方式需考虑业务需求、数据特点和技术能力。正确实施分片策略能构建高性能、可扩展的系统,支持企业业务发展。随着技术进步,未来的分片技术将更加智能和易用。
【MongoDB 专栏】MongoDB 的自动分片与手动分片
|
7天前
|
存储 监控 NoSQL
【MongoDB 专栏】MongoDB 分片策略与最佳实践
【5月更文挑战第10天】MongoDB 分片是应对大数据量的扩展策略,涉及哈希和范围分片两种策略。分片架构包含分片服务器、配置服务器和路由服务器。最佳实践包括选择合适分片键、监控调整、避免热点数据等。注意数据分布不均和跨分片查询的挑战。通过实例展示了如何在电商场景中应用分片。文章旨在帮助理解并优化 MongoDB 分片使用。
【MongoDB 专栏】MongoDB 分片策略与最佳实践
|
7天前
|
NoSQL Java 关系型数据库
Java基础教程(21)-Java连接MongoDB
【4月更文挑战第21天】MongoDB是开源的NoSQL数据库,强调高性能和灵活性。Java应用通过MongoDB Java驱动与之交互,涉及MongoClient、MongoDatabase、MongoCollection和Document等组件。连接MongoDB的步骤包括:配置连接字符串、创建MongoClient、选择数据库和集合。伪代码示例展示了如何建立连接、插入和查询数据。
|
7天前
|
NoSQL MongoDB
搭建MongoDB分片式集群
搭建MongoDB分片式集群
25 0
|
7月前
|
NoSQL MongoDB
MongoDB分片+副本集高可用集群的启停步骤
MongoDB分片+副本集高可用集群的启停步骤
152 0
|
7天前
|
存储 NoSQL MongoDB
学习如何使用 Python 连接 MongoDB: PyMongo 安装和基础操作教程
Python 需要一个 MongoDB 驱动程序来访问 MongoDB 数据库。我将使用 MongoDB 驱动程序 PyMongo 建议您使用 PIP 来安装 PyMongo。PIP 很可能已经安装在您的 Python 环境中。将命令行导航到 PIP 的位置,然后键入以下内容:
104 1
|
7天前
|
NoSQL 安全 Linux
百度搜索:蓝易云【CentOS7安装MongoDB教程】
这些是在CentOS 7上安装MongoDB的基本步骤。根据您的需求和具体环境,可能还需要进行其他配置和调整。请确保在进行任何与网络连接和安全相关的操作之前,详细了解您的网络环境和安全需求,并采取适当的安全措施。
143 0