MongoDB:海量存储基础-分片架构

article/2025/9/13 6:18:35

在这里插入图片描述

文章目录

      • 1.分片架构
      • 2.分片策略
      • 3.读写策略
      • 4.数据迁移

1.分片架构

分片是数据库中常用的提升存储容量的方式,它基于水平拓展的思想,将大量的数据按一定规则分配到不同的服务器中存储,比如MySQL集群可以借助Sharding-JDBC等外部框架对数据进行分片存储,而MongoDB则提供了原生的分片能力支持。

分片的目的主要有:

  • 单机无法存储存储过于庞大的数据集
  • 单机写QPS已经到了瓶颈,存在操作卡死现象
    在这里插入图片描述

MongoDB分片架构组成分为几部分:

  • 分片数据节点:真实存储分片数据的节点
  • 分片配置节点:存储着分片的规则与策略等原数据
  • 分片路由节点:通过分片配置规则对数据查询及写入进行路由
    在这里插入图片描述

2.分片策略

MongoDB中存在Chunk的概念,类似于Hdfs中的Block数据块。Chunk描述的是一段数据集合。

Chunk所描述的是范围区间,例如,db.users使用了userId作为分片键,那么Chunk就是userId的各个值(或哈希值)的连续区间。集群在操作分片集合时,会根据分片键找到对应的Chunk,并向该Chunk所在的分片发起操作请求。
在这里插入图片描述

MongoDB内部基于Chunk作为存储单位,提供了分片键的范围分片及哈希分片两种分片模型:

  • 范围分片:以分片键的范围来划分文档到具体的chunk中
  • 哈希分片:以分片键的哈希值来划分文档到具体的chunk中

在这里插入图片描述

范围分片的缺点在于,如果分片键有明显递增(或者递减)趋势,则新插入的文档会分布到同一个chunk,此时写压力会集中到一个节点,从而导致单点的性能瓶颈。一些常见的导致递增的Key有:

  • 时间值
  • ObjectId,自动生成的_id由时间、计数器组成
  • UUID,包含系统时间、时钟序列
  • 自增整数序列
    所以在使用范围分片时,分片键最好避开上述这类含有递增趋势的Key,而是选择一些随机生成ID、年龄或者或者身份证号等,避免瞬时的单点写入导致压力骤升。

在这里插入图片描述

哈希分片会先事先根据分片键计算出一个新的哈希值(64位整数),再根据哈希值按照范围分片的策略进行chunk的切分。哈希分片与范围分片是互补的,由于哈希算法保证了随机性,所以文档可以更加离散地分布到多个chunk上,这避免了集中写问题。然而,在执行一些范围查询时,哈希分片并不是高效的。因为所有的范围查询都必然导致对所有chunk进行检索,如果集群有10个分片,那么mongos将需要对10个分片分发查询请求。

哈希分片与范围分片的另一个区别是,哈希分片只能选择单个字段,而范围分片允许采用组合式的多字段作为分片键。

在选择分片键时,需要根据业务的需求及范围分片、哈希分片的不同特点进行权衡:

  • 分片键的基数(cardinality),取值基数越大越有利于扩展
  • 分片键的取值分布应该尽可能均匀
  • 业务读写模式,尽可能分散写压力,而读操作尽可能来自一个或少量的分片
  • 分片键应该能适应大部分的业务操作

3.读写策略

在这里插入图片描述

mongos分片路由节点在启动后,其内部会维护一份路由表缓存并通过心跳机制与分片配置中心保持同步

  • 业务请求进入后,由mongos开始接管
  • mongos检索本地路由表,根据请求中的分片键信息找到相应的chunk
  • mongos向目标分片发起操作,并返回最终结果
    mongos接管了所有的数据读写请求,充分扮演着代理者的角色。而对于客户端而言,分片模式下的数据操作处理并没有发生什么变化,mongos已经屏蔽了所有的差异。

分片模式会影响索引的唯一性。由于没有手段保证多个分片上的数据唯一,所以唯一性索引必须与分片键使用相同的字段,或者以分片键作为前缀。如下面的选择可以避免冲突。(1)唯一性索引为:{a:1},分片键采用a字段。(2)唯一性索引为:{a:1,b:1},分片键采用a字段。

对于分片读写来说,最好能够做到:

  • 写时分散压力,能够均匀地对多个分片进行写入
  • 读时单点聚合,只需要对一个或者少个分片进行读取,避免频繁的数据连接

4.数据迁移

为了保证分片集群的水平扩展能力,业务数据应当尽可能地保持均匀分布,包含以下两个方面

  • 数据应均匀地分布于不同的chunk上
  • 每个分片上的chunk数量尽可能是相近的

但是实际上由于分片键分布不均匀,有可能出现某些分片或Chunk包含了大量数据,而某些分片或Chunk则只分配到了少量数据,这样就不利于集群整体的负载均衡,会导致数据倾斜,从而造成某个分片过载,可能导致磁盘容量不足写入数据失败。
在这里插入图片描述

对于分片数据倾斜问题,可通过手动预设分片+指定chunk数量的方式,但是这种方式只能在哈希分片模型使用,第二种是MongoDB自带的自动Chunk分裂负载均衡调整。Chunk均衡器会在后台对各分片的chunk进行监控,一旦发现了不均衡状态就会自动进行chunk的搬迁以达到均衡。

在默认情况下,一个chunk的大小为64MB,该参数由配置的chunksize参数指定。如果持续地向该chunk写入数据,并导致数据量超过了chunk大小,则MongoDB会自动进行分裂,将该chunk切分为两个相同大小的chunk。
在这里插入图片描述

当分片中的Chunk数量差达到阈值时,则会对其进行迁移,维持各分片Chunk数量均衡,迁移阈值如下:
在这里插入图片描述

数据均衡会影响性能,在分片间进行数据块的迁移是一个“繁重”的工作,很容易带来磁盘I/O使用率飙升,或业务时延陡增等一些问题。所以可以设置在夜间MongoDB集群压力较小时,对数据进行迁移。
以下操作启用了自动均衡器,同时在每天的凌晨2点到4点进行Chunk数据迁移操作:
在这里插入图片描述


http://chatgpt.dhexx.cn/article/igSYJvJC.shtml

相关文章

SpringBoot文件分片上传

背景 最近好几个项目在运行过程中客户都提出文件上传大小的限制能否设置的大一些,用户经常需要上传好几个G的资料文件,如图纸,视频等,并且需要在上传大文件过程中进行优化实时展现进度条,进行技术评估后针对框架文件上…

芯片的设计流程和流片成本

每天都在用,但你知道芯片的设计流程和流片成本吗? 2017-05-10 06:10 来源:半导行业观察 芯片,是无数设计工程师们烧死很多脑细胞后产生的作品,完全可以称得上是当代的艺术品。无论是电工们,还是科技小白…

华为防火墙分片缓存

分片缓存 分片缓存功能用来缓存先于首片分片报文到达的后续分片报文,避免分片报文被防火墙丢弃。 网络设备在传输报文时,如果设备上配置的MTU(Maximum Transfer Unit)小于报文长度,则会将报文分片后继续发送。 我们知道…

二三层报头及IP分片详解

一、报文数据格式 二、二层数据格式 二层以太帧格式 DMAC(6字节)SMAC(6字节)type(2字节)DATA(46-1500字节)CRC(4字节) 字段长度含义DMAC6字节目的MAC地址&am…

哈希分片总结

主要参考: 《大数据日知录》 https://zhuanlan.zhihu.com/p/34985026 什么是哈希分片 后台随着数据规约的越来越大,单机明显无法存储着庞大的数据量,只能依靠大规模集群在对数据进行存储和处理,所以系统的可扩展性也成为了很重要…

MongoDB 分片

分片 sharding 分片是指将数据拆分,将起分散到不同服务器的过程.,将数据分散到不同的服务器上,可以存储更多的数据,处理更大的负载 MongoDB分片机制允许你创建一个包含许多服务器(分片)的集群,将子数据分散在集群中.每个分片维护着一个数据集合的子集,相比单服务器和副本集&…

LaTeX制作幻灯片

LaTeX \LaTeX LATE​X幻灯片制作采用的是beamer类。beamer类默认使用sans serif family,和article不同,article默认是roman font family。所以如果我要实现幻灯片的标题和正文字体的设置可以通过下面的命令: \setsansfont{TeX Gyre Termes} …

MySQL的分片

前言 从开发人员的角度来说,为什么要了解和掌握MySQL分片? 第一,了解MySQL分片可以更合理地定制分片策略,选分片字段是要讲科学的。 第二,了解MySQL分片以后如果出现故障报错,也有助于问题的排查。 第三…

外汇天眼:新手如何模拟炒外汇?模拟炒外汇的一点心得分享

模拟炒外汇通常是在没有进行外汇交易之前利用外汇交易软件的模拟账户进行无风险的外汇交易。是刚入门的投资者为熟悉外汇交易软件和外汇市场而经常使用的方法。 新手如何模拟炒外汇? 外汇市场的火热让不少投资者纷纷加入,很多高手也都是从新手走过来的…

外汇套利原理及策略EA

外汇套利,通俗解释就是当相同货币对或相关货币对之间的价差偏离正常范围时进行买卖,当价差回归正常范围时获利平仓的一种交易策略。 外汇套利分为三类 单品种的跨平台套利两相关品种的对冲套利三相关品种的三角套利 如何开发三角套利策略 “三角” 是…

外汇平台怎么选择?玩外汇又有那些优势呢?

外汇平台怎么选择?玩外汇又有那些优势呢? 怎么选择好的外汇平台呢? 第一个 是优先选择大炒外汇的交易平台,虽然也不排除一些小平台是优质的,不过对于新手投资者来说在判断上是很难下决断的。选大平台的主要原因是可以搜索相关的口碑&…

创建模拟外汇网站

1.创建网站模板 2.创建网站服务器 1.创建网站模板 打开pycharm,File→New Project,创建项目文件夹project1 单击项目文件project1,右键新建一个名称为rates.csv的文件。 输入以下内容: 交易币,交易币单位,现汇卖出价,现钞卖出价,现汇买入价…

量化交易之平台搭建

该篇主要是是用来展示量化交易的效果,不构成任何投资建议,仅供参考 搭建的环境: ​ 系统 linux-centos7 python环境: ​ python3.7.4 先安装好我们的库: cd demo pip install -r requirements.txt -i https://pypi.douban.com/simple安…

外汇交易平台怎么选择?

近年来,外汇业发展可谓是生机勃勃,形形色色外汇交易商如雨后春笋般涌出,铺天盖地的外汇广告不停袭击着你的眼球,一夜暴富的神话天天都在上演……外汇市场一片繁荣。市场繁荣说明大众投资理财意识正日渐成熟,但是这个杂…

五步看平台,选好安全的MT4交易外汇平台

在选择MT4外汇交易平台时,如何避免不正规的平台?以下是5招教你远离不正规MT4交易外汇平台。 1. 查看平台是否取得合法许可证 首要考虑的是该平台是否取得了合法的许可证。许可证是证明一个交易平台合法的最重要证据,因此务必在选择时核查该平台的许可证…

结算平台的搭建

写在前头的话: 希望这一系列可以多多帮到一些人——想要做后端产品经理的人、正在做后端产品经理的人、已经放弃了后端产品的人。博主产品经理的资历不深,是一个”复盘“派。 因为涉及部分商业信息,所以时隔了好几年后,才在这里…

如何搭建自己的外汇平台,教你如何搭建外汇平台,如何省钱

外汇市场从世纪之初进入中国,到如今有十几个年头。从起初耳熟能详的几个平台商到现在如雨后春笋般出现,中国的外汇市场越来越开放,价格成本也越来越透明。很多外汇代理商不断发展壮大,对搭建自己的平台有了需求。 开外汇平台赚钱,是一个普遍流传的说法。但是开平台到底有…

泰坦科技MT4平台搭建提供一站式白标方案 快速开启外汇经纪业务

众所周知,外汇市场是全球最大的金融市场,而利用白标技术成为外汇服务提供商是很多人选择运营外汇业务的第一步。相对于外汇主标需要购买整套系统和独立服务器这样的高额成本,搭建一个白标平台要容易的多,也可以相对较快地开展外汇…

领歌敏捷协作——修改密码

文章目录 领歌敏捷协作——修改密码1、进入用户中心2、点击修改密码3、输入原密码进行确认 领歌敏捷协作——修改密码 1、进入用户中心 2、点击修改密码 3、输入原密码进行确认

领歌敏捷协作——自定义领歌背景

文章目录 领歌敏捷协作——自定义领歌背景1、登陆领歌2、点击菜单,选择设置背景3、选择背景图片 领歌敏捷协作——自定义领歌背景 1、登陆领歌 领歌地址:https://www.leangoo.com 2、点击菜单,选择设置背景 3、选择背景图片 选择背景图片&…