MongoDB性能系列最佳实践-Sharding

本文涉及的产品
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 MongoDB,通用型 2核4GB
简介: MongoDB将会推出一系列介绍MongoDB性能最佳实践的文章,旨在帮助用户在多个关键方面实现规模化性能优化。

什么是MongoDB分片?
分片是一种将数据分布或分割到多台计算机上的方法。相较于单个计算机,分片技术允许您进行水平扩展,这在大型现代工作负载的场景下是非常有用的。

水平扩展,也称为横向扩展,是指添加计算机来共享数据集和负载。水平扩展允许进行接近无限的扩展,以处理大数据和强烈的工作负载。

通过分片实现横向扩展
通过分片,您可以自动将MongoDB数据库跨多个节点和区域进行扩展,以处理写入密集型工作负载、不断增长的数据大小以及数据存储要求。

使用MongoDB的分片,您可以在应用程序增长超出单个服务器的硬件限制时,在无需增加应用程序复杂性的情况下,无缝地扩展数据库。

为了响应不断变化的工作负载需求,可以在分片之间迁移文档,并随时向群集中添加或删除节点 - MongoDB将自动根据需要重新平衡数据,无需手动干预。

分片的好处
分片允许您将数据库扩展以处理几乎无限的负载增加。它通过增加读/写吞吐量和存储容量来实现这一点。具体来说:

  • 增加的读/写吞吐量:通过将数据集分布到多个分片上,您可以利用并行处理来增加读/写的吞吐量。假设一个分片可以每秒处理一千次操作,每增加一个分片,您将多获得额外的一千次每秒的吞吐量。
  • 增加的存储容量:同样地,通过增加分片的数量,您还可以增加总体的存储容量。假设一个分片可以容纳4TB的数据。每增加一个分片,您的总存储容量将增加4TB。这样可以实现接近无限的存储容量。
  • 数据本地性:区域分片允许您轻松创建分布式数据库,以支持地理分布的应用程序,并通过强制数据在特定区域内驻留的策略来实现。每个区域可以有一个或多个分片。

MongoDB中的分片策略
大多数分布式数据库在处理数据分布时,是通过简单地对主键值进行散列,将数据随机分布在集群节点中。这在查询跨节点的数据时会带来性能损失,并且在需要将数据本地化到特定区域时会增加应用程序的复杂性。

MongoDB 可以提供多种分片策略,提供对于数据分布更好的方法。。数据可以根据查询模式或数据位置要求进行分布,从而在各种工作负载下实现更高的可扩展性:

  1. 范围分片。文档根据分片键值分区到分片上。分片键值彼此接近的文档可能位于同一个分片上。这种方法非常适用于需要优化基于范围的查询的应用程序,例如将特定区域所有客户的数据放置在特定分片上。
  2. 散列分片。文档根据分片键值的MD5散列进行分布。这种方法保证了写入在分片上的均匀分布,通常对于摄取时间序列和事件数据流是最优选择。
  3. 区域分片。提供了开发人员定义在分片群集中数据放置的特定规则的能力。

MongoDB中的全局群集
完全托管的云数据库服务MongoDB Atlas允许您使用可视化用户界面或Atlas API快速实现区域分片。您可以轻松创建分布式数据库以支持地理分布的应用程序,并通过强制在特定区域内存储数据的策略来实现数据存储。

使用阿里云MongoDB分片集群为始终在线、全球分布式的写入应用程序提供服务
要确保充分发挥分片的优势,您需要遵循一系列最佳实践。

  1. 确保分片键的均匀分布
    当读取和写入的分片键不均匀分布时,操作可能会受限于单个分片的容量。当分片键均匀分布时,没有单个分片会限制系统的容量。
  2. 避免散布-汇集查询用于运营工作负载
    在分片系统中,不能基于分片键进行路由的查询必须广播到所有分片进行评估。由于这些查询涉及每个请求的多个分片,随着添加更多分片,这些查询不会呈线性扩展,并且需要额外的开销来合并来自多个分片的结果。您应该在查询中包含分片键,以避免散布-汇集查询。

这一规则的例外是大型聚合查询。在这些情况下,散布-汇集可以是一种有用的方法,因为它允许查询在所有分片上并行运行。

  1. 在适当的时候使用基于散列的分片
    对于发出基于范围的查询的应用程序,基于范围的分片是有益的,因为操作可以路由到最少的分片,通常是一个分片。然而,基于范围的分片需要对数据和查询模式有很好的理解,在某些情况下可能不切实际。基于散列的分片确保读取和写入的均匀分布,但不提供高效的基于范围的操作。
  2. 预分割和分发分片
    在创建新的分片集合以加载数据时,首先做集合的预分片,并将它们均匀分布在所有分片上,然后再加载数据。对于基于散列的分片,您可以使用numInitialChunks来自动执行此操作。

MongoDB将会推出一系列介绍MongoDB性能最佳实践的文章,旨在帮助用户在多个关键方面实现规模化性能优化。

立即免费试用阿里云MongoDB

扫码加入钉群,与MongoDB专家一对一沟通,了解更多阿里云MongoDB产品与方案,市场活动及线上培训等内容。

钉钉入群二维码_Fotor.png

相关实践学习
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级的场景,由于设计了分片支撑,后续如有大数据量需求,可分片横向扩展。
509 1
|
7月前
|
NoSQL Oracle MongoDB
【最佳实践】MongoDB导出导入数据
【最佳实践】MongoDB导出导入数据
395 2
|
7月前
|
NoSQL MongoDB 索引
【最佳实践】MongoDB导入数据时重建索引
【最佳实践】MongoDB导入数据时重建索引
173 0
|
7天前
|
监控 NoSQL 测试技术
MongoDB性能最佳实践:如何制定更有效的基准测试?
感谢你与我们一起走过这段MongoDB性能最佳实践之旅,希望你能从中获取一些有用的信息
1582 2
|
1月前
|
消息中间件 NoSQL Kafka
云原生最佳实践系列 5:基于函数计算 FC 实现阿里云 Kafka 消息内容控制 MongoDB DML 操作
该方案描述了一个大数据ETL流程,其中阿里云Kafka消息根据内容触发函数计算(FC)函数,执行针对MongoDB的增、删、改操作。
|
2月前
|
存储 缓存 NoSQL
|
2月前
|
缓存 NoSQL 关系型数据库
|
5月前
|
缓存 NoSQL MongoDB
MongoDB数据库查询性能提高40倍?
MongoDB数据库查询性能提高40倍?
99 0
|
6月前
|
JSON NoSQL MongoDB
MongoDB数据库查询性能提高40倍
MongoDB数据库查询性能提高40倍
MongoDB数据库查询性能提高40倍
|
8月前
|
存储 NoSQL 自动驾驶
MongoDB在自动驾驶场景方案及最佳实践
MongoDB在自动驾驶场景方案及最佳实践
322 1

相关产品

  • 云数据库 MongoDB 版