一致性哈希算法 mysql_一致性哈希

随着系统规模的扩大,数据库需要进行分库分表以缓解压力。一致性哈希算法解决了数据在分布式环境中的存取规则问题,确保节点增减时数据迁移最小化。本文通过对比简单哈希和一致性哈希,分析了一致性哈希的工作原理,包括其应对节点宕机和新增节点的情景,并探讨了虚拟节点如何解决数据倾斜问题。此外,还提到了Redis集群采用哈希槽而非一致性哈希的原因和优势。
摘要由CSDN通过智能技术生成

[TOC]

前言

伴随着系统流量的增大,出现了应用集群。在 Redis 中为了保证 Redis 的高可用也为 Redis 搭建了集群对数据进行分槽存放。在 Mysql数据库要存储的量达到一个很高的地步的时候,我们会对数据库进行分库分表操作。OK,到这儿先假设我们不知道什么是集群、什么是分库分表,我们先来看一个数据库水平切分演变的例子:

假设我们的系统中有一张会员表 customer_info, 我们的系统刚开始无人问津,我们在一个单个的数据库中放这张表,所有的会员记录都插入到这个数据库的这张表中,这没什么问题,是一个很正常且合理的操作。某段时间,我们的系统突然火爆了起来,注册会员激增,达到了千万级别并且还在快速增长,这时候所有的用户请求数据都会请求这张表,毫无疑问数据库的压力很大,于是可能会经常发生宕机事件,给系统造成了很大影响。为了解决这件事情,我们将单张表的数据切分到多个服务器上去,每个服务器具有相应的库与表,只是表中数据不同。 这样做能够有效的缓解单机数据库的压力和系统的性能瓶颈。

看完了这个例子,我们对水平拆分数据库有了一个大致的印象,其实就是把很多的数据按照一定的规则存放在不同的服务器上,然后查找的时候能够根据存放的时候的规则去找到前面存放的数据。那么我们要说的一致性哈希算法,其实就是解决了这里面的 存取规则 的问题,有了这个一致性哈希算法,我们能够准确的知道我们要取的数据落在哪个机器的哪个数据库中。

1. 简单哈希

还是上面水平拆分数据库的例子,假设我们现在不知道什么一致性哈希什么集群分槽,就让我们自己想的话,我们可以很容器的想到 java 中的 HashMap 的原理,它通过计算了一个 key 的哈希值,然后拿这个哈希值对底层数组取模就得到了一个哈希桶ÿ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值