MongoDB性能系列最佳实践-Sharding

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
云数据库 Tair(兼容Redis),内存型 2GB
简介: 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
相关文章
|
2月前
|
存储 关系型数据库 MySQL
四种数据库对比MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景
四种数据库对比 MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景
|
4月前
|
JSON NoSQL MongoDB
MongoDB Schema设计实战指南:优化数据结构,提升查询性能与数据一致性
【8月更文挑战第24天】MongoDB是一款领先的NoSQL数据库,其灵活的文档模型突破了传统关系型数据库的限制。它允许自定义数据结构,适应多样化的数据需求。设计MongoDB的Schema时需考虑数据访问模式、一致性需求及性能因素。设计原则强调简洁性、查询优化与合理使用索引。例如,在构建博客系统时,可以通过精心设计文章和用户的集合结构来提高查询效率并确保数据一致性。正确设计能够充分发挥MongoDB的优势,实现高效的数据管理。
100 3
|
4月前
|
存储 NoSQL JavaScript
MongoDB存储过程实战:聚合框架、脚本、最佳实践,一文全掌握!
【8月更文挑战第24天】MongoDB是一款备受欢迎的文档型NoSQL数据库,以灵活的数据模型和强大功能著称。尽管其存储过程支持不如传统关系型数据库,本文深入探讨了MongoDB在此方面的最佳实践。包括利用聚合框架处理复杂业务逻辑、封装业务逻辑提高复用性、运用JavaScript脚本实现类似存储过程的功能以及考虑集成其他工具提升数据处理能力。通过示例代码展示如何创建订单处理集合并定义验证规则,虽未直接实现存储过程,但有效地演示了如何借助JavaScript脚本处理业务逻辑,为开发者提供更多实用指导。
92 2
|
4月前
|
安全 C# 数据安全/隐私保护
WPF安全加固全攻略:从数据绑定到网络通信,多维度防范让你的应用固若金汤,抵御各类攻击
【8月更文挑战第31天】安全性是WPF应用程序开发中不可或缺的一部分。本文从技术角度探讨了WPF应用面临的多种安全威胁及防护措施。通过严格验证绑定数据、限制资源加载来源、实施基于角色的权限管理和使用加密技术保障网络通信安全,可有效提升应用安全性,增强用户信任。例如,使用HTML编码防止XSS攻击、检查资源签名确保其可信度、定义安全策略限制文件访问权限,以及采用HTTPS和加密算法保护数据传输。这些措施有助于全面保障WPF应用的安全性。
66 0
|
6月前
|
NoSQL 测试技术 MongoDB
使用同步和异步方式更新插入MongoDB数据的性能对比
在这篇文章中,我将探讨如何使用同步和异步方式插入数据到MongoDB,并对两种方式的性能进行对比。并将通过Python中的 pymongo 和 motor 库分别实现同步和异步的数据插入,并进行测试和分析。
|
6月前
|
NoSQL BI MongoDB
深入理解 MongoDB 条件操作符:优化查询、精准筛选、提升性能
深入理解 MongoDB 条件操作符:优化查询、精准筛选、提升性能
151 1
|
5月前
|
存储 NoSQL Java
使用MongoDB实现NoSQL数据库的最佳实践
使用MongoDB实现NoSQL数据库的最佳实践
|
6月前
|
NoSQL 安全 MongoDB
精准数据清理:掌握 MongoDB 删除集合的方法与最佳实践
精准数据清理:掌握 MongoDB 删除集合的方法与最佳实践
236 0
|
6月前
|
存储 监控 NoSQL
MongoDB 覆盖索引查询:提升性能的完整指南
MongoDB 覆盖索引查询:提升性能的完整指南
|
6月前
|
存储 NoSQL 数据管理
MongoDB关系处理:优化数据管理、提升性能的最佳实践
MongoDB关系处理:优化数据管理、提升性能的最佳实践

相关产品

  • 云数据库 MongoDB 版