哈希分片总结

article/2025/9/13 7:03:11

主要参考:
《大数据日知录》
https://zhuanlan.zhihu.com/p/34985026

什么是哈希分片

后台随着数据规约的越来越大,单机明显无法存储着庞大的数据量,只能依靠大规模集群在对数据进行存储和处理,所以系统的可扩展性也成为了很重要的一个点。
目前主流的大数据存储于计算系统通常采用横向扩展的方式支持系统的可扩展性,即通过增加机器数量来获得水平扩展能力。与此对应,对于待存储处理的海量数据,需要通过数据分片来将数据进行切分分配到各个机器中去。而哈希分片就是数据分片中很重要的一种。
本文涉及的哈希分片有三种:哈希取模法、虚拟桶、一致性哈希。

哈希取模法

假设有K台物理机,通过以下哈希函数可实现数据分片:

H(key)=hash(key) mode K

根据求出来的结果来决定存储到哪台物理机上。
这一种分片方式实现起来非常简单,但是缺乏灵活性,比如新增一台物理机到集群,哈希函数就变成了如下:

H(key)=hash(key) mode (K+1)

按照这样哈希函数来算,之前的数据和物理机之间的映射就全部被打乱,所有数据需要重新按照改变后的哈希函数再分配一遍。

虚拟桶

《大数据日知录》中以Membase数据库举例,如下图。

有以下几个关键单:

  1. 引入了虚拟桶层,所有数据通过哈希函数存储到对应的虚拟桶,一个虚拟桶会存多条数据。
  2. Membase通过内存表来管理物理机与虚拟桶的映射,一个物理机可以对应多个虚拟桶。
  3. 当加入新机器时,只需要改变虚拟桶和物理机的映射表就能实现扩展。
    在这里插入图片描述

一致性哈希

关键点:

  1. 一致性哈希将哈希数值空间按照大小组成一个首尾相接的环状序列。(哈希数值空间范围为0~2^m,在下图中m=32)
  2. 对于每台机器,可根据其IP和端口号经过哈希函数映射到哈希数值空间内。
  3. 每个机器节点记录环中的前驱节点和后继节点位置,这样就变成了一个真正的有向环。

在这里插入图片描述
例如我们有Object A、Object B、Object C、Object D四个数据对象,经过哈希计算后,在环空间上的位置如下:
在这里插入图片描述

数据路由

数据路由:数据分片后,能够找到某条记录的存储位置的方式。

由上面得知,一致性哈希的物理机形成了一个有向环,那么如何通过数据的key来知道存储到哪一台机器上呢?

最直观的方式就是讲key带入哈希函数计算出结果,然后沿着有向环顺序查找。对于物理机来讲,首先判断是否在自身管理范围内,如果不在就将它转交给后集节点继续查找。

这种方式是可行的,但是明显是一种很低效率的查找方式,多台物理机之间反复的通信将会消耗极大的资源,我们应当在尽量少的查找次数中找到应该存储的物理机。
因此,为了加快查找速度,一致性哈希就在每个物理机上配置了路由表。

路由表中配置了每一个节点的位置,因此当物理机发现要增添的数据不在自己管理的范围内的时候,就去路由表中查询该范围对应的物理机,然后交给该物理机去处理。

删除节点

正常离开:
将自身数据迁移到后继节点上,前驱节点和后继节点直接相连。

异常离开:
切换到该物理机的从机上。

新增节点

新增节点从理论上讲主要有两个步骤:

  1. 将新增节点加入有向环,有其自己的前驱节点和后继节点。
  2. 数据的重新分布,将原来应该由新节点存储的数据迁移到新节点上。(这个过程由所有节点自动完成,称为稳定性检测,每个节点会定期执行)

实际操作可以分为三个步骤,《大数据日知录》中的例子如下:(下图来自于《大数据日知录》)

假设目前有N5和N14两个节点,需要加入N8节点。
在N8加入之前,N5负责0 ~ 5的节点,N14负责6 ~ 14的节点
在N8加入之后,N5负责0~5的节点,N8负责6 ~ 8的节点 ,N14负责9 ~14的节点。

1、N8前驱节点连接null,后继节点连接N14。(这样便能触发稳定性检测)
在这里插入图片描述
2、通过稳定性检测,N14的前驱节点连接了N8,N14将6 ~ 8的节点迁移到N8。
在这里插入图片描述
3、N5连接N14的前驱节点,也就是N8。至此N9已经加入了有向环。
在这里插入图片描述

虚拟节点

每个物理机在哈希空间的位置取决于“IP和端口通过哈希函数计算的结果”,导致机器节点在哈希空间的位置是随机的,因此无法做到负载均衡。
如下图所示,A明显比B存储了更多的值。
在这里插入图片描述

为了解决这种数据倾斜问题,一致性Hash算法引入了虚拟节点机制,即对每一个服务节点计算多个哈希,每个计算结果位置都放置一个此服务节点,称为虚拟节点。
具体做法可以在服务器IP或主机名的后面增加编号来实现。如下图所示:

在这里插入图片描述
虚拟节点也不仅仅能解决负载均衡的问题。
实际操作中,机器的异质性很常见,既有高性能、高配置的机器,也有低配置的机器。使用虚拟节点,就可以让高配置的机器多管理一些数据,低配置的机器少管理一些数据。


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

相关文章

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、选择背景图片 选择背景图片&…

领歌敏捷协作——设置备用邮箱,主备切换

文章目录 领歌敏捷协作——设置备用邮箱,主备切换1、进入用户中心2、点击添加备用邮箱3、输入备用邮箱并进行验证4、主备邮箱切换 领歌敏捷协作——设置备用邮箱,主备切换 1、进入用户中心 2、点击添加备用邮箱 3、输入备用邮箱并进行验证 4、主备邮箱切…

领歌敏捷协作——通过数据筛选进行快速定位

文章目录 领歌敏捷协作——通过数据过滤进行快速定位1、选择并进入一个看板2、进入筛选面板1、点选标签2、点选成员3、输入关键词 3、全局搜索4、执行搜索 领歌敏捷协作——通过数据过滤进行快速定位 1、选择并进入一个看板 点击右侧菜单的筛选 2、进入筛选面板 1、点选标签 …

领歌敏捷协作——设置微信接收卡片提醒

文章目录 领歌敏捷协作——设置微信接收卡片提醒1、进入用户中心2、进入第三方帐号页面3、点击绑定4、关注领歌公众号5、哪几种情况才会收到领歌的微信通知 领歌敏捷协作——设置微信接收卡片提醒 1、进入用户中心 2、进入第三方帐号页面 3、点击绑定 打开微信,扫描…

领歌敏捷协作——修改看板名称

文章目录 领歌敏捷协作——修改看板名称1、进入看板列表2、选择一个看板3、点击修改名称4、输入新名称并保存 领歌敏捷协作——修改看板名称 1、进入看板列表 2、选择一个看板 进入看板后,点击看板名称 3、点击修改名称 4、输入新名称并保存

领歌敏捷协作——显示折叠视图

文章目录 领歌敏捷协作——显示折叠视图1、选择并进入一个看板2、使用折叠视图 领歌敏捷协作——显示折叠视图 1、选择并进入一个看板 2、使用折叠视图 点击红框所示位置,进入折叠视图 折叠视图如图所示 通过折叠视图,我们可以快速的查看整个看板的…