MongoDB分片

MongoDB分片集群 分片集群 阅读详情

分片集群
分片键
数据块
分片的优势
分片前的考虑
分片集合与非分片集合
连接分片集群
分片策略
分片集群中的分片键值空间
分片的字符比较排序规则
其它资源

分片是一种将数据分散存储到多台机器的方法,MongoDB使用分片来支持大数据集和高吞吐量的应用场景。

具有大数据集的数据库系统或高吞吐量的应用程序对单机的处理能力提出挑战。例如,高速查询会耗尽单台服务器的cpu处理能力。工作集的大小大于系统内存会对磁盘的IO造成压力。

有两种方法来应对系统的增长:垂直扩展和水平扩展。

垂直扩展指的是增加单机处理能力,例如使用一个更强大的CPU,添加更多内存,或者增加存储空间的数量。受限于现有的技术,对于给定的工作负载,单台机器并不能变得足够强大。另外,云计算基础服务提供商能提供的硬件服务配置有一定的上限。因此,垂直扩展有一个实际的最大限度。

水平扩展指的是划分系统数据集并负载到多台服务器,需要的时候,可以通过添加更多机器来增加系统的处理能力。虽然单台机器的整体速度或容量可能不高,但每台机器只处理一部分负载,可能比单一高速高容量服务器提供更好的效率。扩展系统的处理能力只需要在需要时添加更多的服务器,这可以获得比单台高端服务器更低的总体成本。代价是增加了基础设施和部署维护的复杂性。

MongoDB支持通过分片实现水平扩展。

分片集群

一个MongoDB的分片集群由以下部分组成:

  • 分片:每个分片包含分片数据的一个子集,每个分片可以被部署为一个副本集(replica set)。
  • mongos:mongos扮演了路由服务的角色,提供客户端应用程序和分片集群之间的接口。
  • 配置服务器:配置服务器存储集群的元数据和配置设定。在Mongo3.4版本,配置服务器必须部署成一个副本集 (CSRS)。

如下图片描述了分片集群中组件的交互:
这里写图片描述

MongoDB是在集合(collection)一层对数据进行分片,将集合中的数据分散存储到分片集群中的各个分片。

分片键

MongoDB使用分片键对集合进行分区,将集合中的文档分散存储到各个分片。分片键由一个或多个不可变的文档字段组成,这些字段必须存在于集合中的每个文档

在对集合进行分片时你需要选择分片键。分片键在集合分片之后不能改变,一个分片集合只能有唯一的一个分片键。查看Shard Key Specification.

当对一个非空集合进行分片时,集合必须拥有一个以分片键开始的索引。对于一个空集合,如果进行分片时集合的分片键还未拥有一个合适的索引,MongoDB会自动创建索引。查看Shard Key Indexes。

分片键的选择会影响性能,效率,和分片集群的可扩展性。一个拥有最好的硬件和基础设施的分片集群,分片键的选择可能成为其瓶颈。分片键的选择以及支持分片的索引也会影响你的集群可以使用的分片策略。

查看shard key 文档获取更多信息。

数据块

MongoDB将分片数据分割到数据块,每个数据块拥有一个基于分片的下限(包含)和上限(不包含) 的范围区间。

MongoDB使用分片集群平衡器( sharded cluster balancer)在集群的分片之间迁移数据块。平衡器试图在集群的分片之间实现数据块的再平衡。

查看Data Partitioning with Chunks 获取更多信息。

分片的优势

读/写
MongoDB将读写请求分散到分片集群中的各分片,使每个分片只处理一部分的集群操作。通过增加更多分片,读和写的负载能力都可以得到水平扩展。

那些查询条件中包含分片键或者复合分片键前缀的查询请求,mongos(路由服务)可以将请求定向路由到一个特定的分片或分片集。被定向路由的操作通常比广播类型的操作更加高效。

存储容量
数据分片将数据分散存储到集群中的各个分片,每个分片只包含整个集群数据的一部分。随着数据的增长,通过增加额外的分片就能够增加集群的存储容量。

高可用性
即便集群中的一个或更多分片不可用,分片集群仍能够执行部分读写操作(只要还有可用的分片)。虽然在宕机时间段内,哪些存储在不可用分片上的数据将不能被访问,但那些路由到可用分片上的读写请求仍然可以执行成功。

从MongoDB 3.2开始,你可以将配置服务器发布为副本集(replica sets)模式。一个拥有多副本配置服务器CSRS(Config Server Replica Set)的分片集群可以持续处理读写请求,只要配置服务器副本集中的大多数副本是可用的。从MongoDB3.4开始将不再支持SCCC(多镜像单节点)模式的配置服务器。将你的配置服务器从SCCC模式升级到CSRS模式,查看Upgrade Config Servers to Replica Set。

生产环境上,每个分片都应该被部署为副本集模式,以提高数据的冗余性和可用性。

分片前的考虑

分片集群基础设施的要求和复杂性,需要仔细的规划,执行和维护。

为了保证集群的性能及效率,在分片键的选择上必须仔细考虑。一个已经分片的集合既不能改变分片键也不能取消分片,查看Choosing a Shard Key。

执行分片有确定的操作要求和限制,查看Operational Restrictions in Sharded Clusters获取更多信息。

如果一个查询请求的查询条件中没有包含分片键或者复合分片键前缀,mongos(路由服务)会执行一个广播操作,查询集群中的所有分片。这些 分散/聚集 的查询操作会是耗时较长的操作。

注意 如果您和MongoDB有一个有效期内的支持合同,考虑联系您的客户代表获得分片集群的规划和部署的帮助。

分片集合与非分片集合

一个数据库可以同时拥有分片集合与非分片集合。分片集合中的数据被分割并分散存储在集群中的各个分片。非分片集合的数据存储在集群中的主分片。每个数据库都有它自己的主分片。

这里写图片描述

连接分片集群

你必须通过连接一个mongos路由器来访问分片集群中的任意集合。包括分片集合与非分片集合。客户端不应该连接单一的分片来执行读或写操作。

这里写图片描述

你可以使用像连接mongod(MongoDB系统主程序)一样的方式连接mongos(MongoDB分片路由服务),例如通过mongo命令行或者一个MongoDB驱动。

分片策略

MongoDB支持两种在分片集群中分割数据的策略。

散列分片

散列分片涉及计算分片键字段的散列值。每个数据块分配了一个散列值的范围。

提示
MongoDB当解析到查询中使用了散列索引时会自动计算散列值。应用不需要计算散列值。

这里写图片描述

虽然一系列分片键的键值可能很接近,但它们的散列值落到同一个数据块的可能性很小。基于散列值的数据分布策略更有利于数据的平均分布,特别在数据集的分片键是单向变化的情况下。

但是,散列分布意味着在分片键上的范围查询不太可能路由到单一分片,这将导致更多的集群广播操作。
查看 Hashed Sharding 获取更多信息。

范围分片

范围分片基于分片键值将数据划分到不同的范围。每个数据块分配了一个分片键值的范围。

这里写图片描述

拥有相近分片键值的数据很可能被分配到相同的数据块。这将允许对操作作定向路由,因为mongos可以将操作只路由到包含了所需数据的分片。

范围分片的效率依赖于分片键的选择。欠缺考虑的分片键选择将导致数据分布不均匀,这将抵消某些分片的好处或者成为性能的瓶颈。

查看shard key selection 获取更多关于范围分片分片键选择的信息。

查看Ranged Sharding获取更多信息。

分片集群中的分片键值空间

在分片集群中,你可以创建分片数据的分片键值空间。你可以将每个键值空间关联到集群中的一个或多个分片。每个分片可以关联任意数量的互不冲突的键值空间。在一个执行过平衡操作的集群中,MongoDB做数据块迁移时,如果该数据块被一个键值空间完整覆盖了,MongoDB只会将该数据块迁移到关联了对应键值空间的分片。

每个键值空间覆盖了一个或多个分片键值的范围。键值空间覆盖的每个键值范围拥有一个下限(包含)和一个上限(不包含)。

这里写图片描述

当你定义一个键值空间覆盖的新的键值范围时,你必须使用包含在分片键中的那些字段。如果你使用的是一个复合分片键,那么范围必须包含分片键的前缀。查看shard keys in zones获取更多信息。

选择分片键时,请仔细考虑未来使用键值空间进行分片的可能性,因为在分片之后,你将不能再改变分片键。

更常见的,在那些跨越多个数据中心的分片集群,键值空间提升了数据的局部化。

查看zones 获取更多信息。

分片的字符比较排序规则

使用shardCollection命令及命令选项collation : { locale : “simple” }对一个已经有缺省字符串排序比较规则的集合进行分片时,成功分片的要求有:

  • 集合必须拥有一个分片键前缀的索引
  • 索引的字符串排序比较规则必须是:{ locale: “simple” }

当创建有指定字符串排序比较规则的集合时,确保上述这些条件在集合分片之前得到满足。

注意
在分片集合上的查询会使用集合缺省的字符串比较排序规则配置。如果要使用分片键索引的字符串比较排序规则,需要在查询条件中的collation部分声明{locale : “simple”}。

查看shardCollection获取更多关于分片和字符串比较排序规则的信息。

其它资源

- Sharding Methods for MongoDB (Presentation)
- Everything You Need to Know About Sharding (Presentation)
- MongoDB for Time Series Data: Sharding
- MongoDB Operations Best Practices White Paper
- Talk to a MongoDB Expert About Scaling
- MongoDB Consulting Package
- Quick Reference Cards

分片集群组件 ->

F5 Shape盾JSVMP核心检测点与无限并发Header生成实战(TikTok/航司) 本文深入剖析了F5 Shape盾结合JSVMP技术的核心风控机制,详细解读了其针对浏览器指纹、行为时序等多维度的检测逻辑。通过实战案例,分享了如何通过逆向分析、精准Hook关键检测点,并构建稳定、高并发的请求Header生成方案,以应对TikTok、航司等平台的高级反爬挑战。 阅读详情

相关推荐

《基于Yolo算法的火灾检测系统设计与实现》开题报告

在消防安全领域,火灾对生命财产安全构成严重威胁。传统的火灾检测手段存在诸多不足,如误报率高、检测范围有限、响应速度慢等。基于 Yolo 算法的火灾检测系统能够利用深度学习技术,实现对火灾的高效、精准检测,具有重要的现实意义。         从社会安全角度看,该系统可以广泛应用于各类公共场所、工业厂房和居民住宅,实时监测火灾隐患,及时发出警报,为人员疏散和消防救援争取宝贵时间,有效降低火灾造成的人员伤亡和财产损失,保障社会公共安全。

m0_69704149的博客 1384

【MongoDB】查看集合是否分片 及片健创建、删除

查看分片键 MongoDB会把分片过的集合保存在config.collection集合中,若需要查看分片键,则需要根据该集合进行查找。官方的其他很多分片快捷命令也都处于config库 三种方式 去config库中查询 这种办法可以查看分片键信息 db.collections.find({$and: [ ...

zhuchunyan_aijia的博客 1万+

解忧杂货铺(四):Hightec生成HEX方法+小功能开启

Hightec使用的一些常用技能

梦想技术家 2160

MongoDB分片集合

MongoDB分片集合

u011345634的博客 1086

Python | 处理CMIP6 NC数据,以tas为例

各位同学,一般在文章最后一章我们可能会做不同气候情景下变量的未来时空变化特征,类似上图。从cmip6下载的nc数据常需要转换格式、裁剪到研究区和重采样等,本期代码可以解决这类问题。

qq_48539301的博客 1384

JOOQ用法和实例

jOOQ,是一个ORM框架,利用其生成的Java代码和流畅的API,可以快速构建有类型约束的安全的SQL语句。jOOQ的核心优势是可以将数据库表结构映射为Java类,包含表的基本描述和所有表字段。通过jOOQ提供的API,配合生成的Java代码,可以很方便的进行数据库操作生成的Java代码字段类型是根据数据库映射成的Java类型,在进行设置和查询操作时,因为是Java代码,都会有强类型校验,所以对于数据的输入,是天然安全的,极大的减少了SQL注入的风险。

m0_67403076的博客 1375

Mongodb操作基础 分片

分片(Sharding)技术是开发人员用来提高数据存储和数据读写吞吐量常用的技术之一。简单的来说,分片主要是将数据进行划分后,将它们分别存放于不同机器上的过程。通过使用分片可以实现降低单个机器的压力和处理更大的数据负载功能。分片与副本集主要区别在于,分片是每个节点存储数据的不同片段,而副本集是每个节点存储数据的相同副本。所有数据库都可以进行手动分片(Manual Sharding),因此,分片并不是MongoDB特有的。

HappyD 5132

8.DJI-PSDK:一站式项目功能开发总结(空中气象站项目/激光甲烷检测项目)

本文将以一篇文章的幅度快速完成: 项目一:空中气象站项目; 项目二:激光甲烷项目; 项目所使用的PSDK来源于第0章节末尾的百度网盘;解压:Payload-SDK-3.8.zip代码所在目录:双击打开: 修改打印串口和相关波特率,我们修改如下: 进行相关编译选项配置如下: :

哒宰的博客 293

MongoDB-分片

mongodb分片与部署过程

无痕的博客 3486

概念解析 | 雷达动态范围

这里存在一个动态范围的问题:强雷达发射信号和弱目标反射信号存在非常大的功率差异,比如传统的脉冲多普勒雷达动态范围可达90dB以上。随着上述技术的发展,预计未来十年雷达接收机动态范围将达到120dB以上,届时雷达的监视能力将得到极大增强。简单来说,雷达动态范围越大,表示接收机噪声越低,对强信号过载保护能力越强,就越能检测到弱信号目标。此外,部分新概念雷达对动态范围提出新的需求,如被动雷达动态范围需大于100dB。当前,随着阵列雷达和数字雷达技术的发展,对雷达接收机动态范围提出了更高要求。

NLOS的博客 1050

晶体管-二极管三极管MOS管选型参数总结

二极管三极管和MOS管,是电路中常用的控制电流电压的基本电子元器件。电路世界中晶体管的选型,需要考虑的参数多种多样,这些参数的选择会直接影响到电路的性能、稳定性、成本等多个方面。本文对二极管三极管和MOS管的选型参数进行详细介绍并总结。

fydar的博客 884

详解MongoDB 分片策略

MongoDB 分片功能可以在多个服务器上分散存储数据集,实现水平扩展。本文档将介绍 MongoDB 的分片策略以及如何设置分片环境。

weixin_59801183的博客 4580

LPDDR6 技术标准详解(JESD209-6)

是继 LPDDR5/5X 之后的新一代低功耗 DRAM 标准,专为满足移动终端、AI、边缘计算等高带宽、低功耗场景而设计。该标准通过全新架构、动态功耗控制机制和增强型数据完整性机制,实现性能、能效与可靠性的全面升级。LPDDR6 并非仅是速度升级,更是内存架构设计思路的演进,围绕“低功耗 + 高带宽 + 强安全”的三维目标,构建下一代 SoC 平台关键基础。✅ 高带宽:支持 32B/64B 动态突发✅ 低功耗:动态电压、通道切换✅ 高可靠性:ECC + 自测试 + 安全区。

weixin_43199439的博客 2567

009、MongoDB的分片策略

随着数据量的不断增长,单机数据库已经无法满足大规模应用的需求。MongoDB作为一款流行的NoSQL数据库,提供了强大的分片(Sharding)功能来实现水平扩展。本文将深入探讨MongoDB的两种主要分片策略:范围分片和哈希分片,分析它们的原理、优缺点以及适用场景。

Code is fun. 2217

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

MongoDB分片部署

二、部署分片集群部署两个shard分片重新打开mongodb服务,即可像原来一样使用,但是数据存储方式和原来已经不一样了,变成了分布式的分片存储。电脑版本比较高,所以的cmd需要使用管理员身份运行启动服务均为一次性服务,关闭cmd即为关闭服务,所以在未完成前,请勿关闭实例均未添加至系统环境变量,请在bin目录下启动。

2401_84760161的博客 1820

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

mongodb分片

一.什么是mongodb分片,有什么作用? mongodb分片就是将大型集合分割到不同的服务器上,它可以自动且均衡的分配数据。它一般是针对特别大的需求,比如一个集合需要非常的大,几百个G。分片到10个服务器之后,每个服务器维护几十个G的数据。如果不是集合非常的大,而是库非常的多,可以不使用分片,可以向mysql一样,把不同的库指定给不同的服务器就可以。 二.mongodb分片的原理 mongodb...

qq_37369726的博客 8535

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

MongoDB 分片集群

mongos, 提供集群单一入口,转发应用端请求,选择合适的数据节点进行读写,合并多个数据节点的返回。客户请求应发给mongos,而不是 分片服务器,当查询包含分片片键时,mongos将查询发送到指定分片,否则,mongos将查询发送到所有分片,并汇总所有查询结果。当数据段尺寸过大,或者包含过多文档时,触发数据段分裂,只有新增、更新文档时才可能自动触发数据段分裂,数据段分裂通过更新元数据来实现。1. MongoDB的分片时基于集合的,就算有分片集群不等于数据会自动分片,需要显示分片表。

Dongguazhuzhuzhu的博客 2346

搭建MongoDB分片集群

分片(sharding)是一种跨多台机器分布数据的方法,MongoDB使用分片来支持具有非常大的数据集和高吞吐量操作的部署。 分片是将数据拆分,散到不同的机器上,不需要功能强大的大型计算机就可以储存更多的数据,处理更多的负载。有时也叫分区 (partitioning)。

misakivv的博客 3522

【MongoDB】五、MongoDB分片集群的部署

2、执行“vi”命令,在配置文件mongodb_shard1.conf mongodb_shard2.conf mongodb_shard3.conf中添加分片服务器1的相关参数(服务器zrz01)4、执行“vi”命令,在配置文件mongodb_shard1.conf mongodb_shard2.conf mongodb_shard3.conf中添加分片服务器1的相关参数(服务器zrz02)2、在服务器nosql01的配置服务器、分片服务器以及路由服务器的日志目录下,创建对应的日志管理文件。

慢热型网友的博客 5875

MongoDB的分片

本文主要介绍MongoDB的分片。

一起学习 1717

MongoDB 分片集群的分片策略

通过分片键的值来将数据分成不同的范围。它可以提供比较快的范围查询,但是当分片键选择不好的时候,也会降低读写性能。范围分片的片键值容易造成分片键不均衡情况,造成访问热点过于集中,影响分片集群性能。哈希分片的分片键(散列键)字段应该具有良好的基数性,或者具有大量不同的值。缺点:范围分片可能导致数据分布不均匀当分片键趋于单调或某些范围内的值过于集中时,可能导致某些分片上的数据或读写请求数相对较高,造成瓶颈,从而影响性能和可扩展性。范围分片(Range Sharding):通过分片键的值来将数据分成不同的范围。

知行合一 1261

mongodb分片_MongoDB分片指南

mongodb分片 本文是我们学院课程中名为MongoDB –可伸缩NoSQL DB的一部分 。 在本课程中,您将被介绍到MongoDB。 您将学习如何安装它以及如何通过它的外壳进行操作。 此外,您还将学习如何通过Java以编程方式访问它以及如何将Map Reduce与其一起使用。 最后,将解释更高级的概念,例如分片和复制。 在这里查看 ! 目录 1.简介 2.配置 ...

danpu0978的博客 557
上一篇: Java NIO系列教程(十二) Java NIO与IO
下一篇: MongoDB分片>集群组件
AscendentJava
博客等级 码龄17年 2粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值