哈希一致性、哈希取余、自定义轮询分片的比较
2019独角兽企业重金招聘Python工程师标准>>>
一、自定义轮询分片
按照上图所示,自己写一段逻辑,根据客户端请求循环写入不同Redis服务器
优点:
- 理解简单
- 数据分布平均
缺点:
- 如果增加redis内存数据库服务器,需要改代码,需要发布代码,很麻烦,有风险
- 数据迁移量较多
二、哈希取余分片
哈希取余就是一种特殊的自定义分片方式
优点:这里介绍的三种方式最差的
缺点:
- 如果增加redis内存数据库服务器,需要改代码,需要发布代码,很麻烦,有风险
- 数据迁移量多,理论是old/new,new = old+increase
- 数据倾斜,从上图中可以看出最左侧的redis1服务器上存放的数据最多,最右侧的redis4服务器存放最少,如果数据都是几十亿的级别,那么倾斜就相当严重,单台服务器压力会过载
三、哈希一致性分片
它是Jedis采用的分片方式,并提供了JedisShardInfo、JedisPoolConfig、ShardedJedisPool、ShardedJedis 相关API做成redis连接池,分片逻辑对程序员透明
用图来直观了解一下哈希一致性的分片算法,看到下面的图不要害怕,根据后面的文字描述搭配着看
代表真实的redis服务器
代表虚拟的redis服务器,虚拟服务器隶属于真实服务器,比如虚拟2服务器需要存放的数据被真实的存放到redis2服务器上
代表数据
说明:
1.图中最大的圆是由2^32个点组成的圆,每个点是1到2^32中的一个数
算法:
1.jedis根据redis服务器的ip+port+其他输入信息计算出一个哈希值,并将该哈希值映射到圆上
2.jedis根据key计算出一个哈希值,并将该哈希值映射到圆上
3.jedis根据key在圆上的位置顺时针找第一个redis服务器哈希值映射的点,该点对于的服务器就是key-value存储的服务器
4.如果只存在redis服务器的点,数据倾斜还是会经常发生,为了解决这一问题,jedis根据真是服务器的信息虚拟出n*1000个虚拟服务器,将整个圆分段更多,数据(key-value)存放便更均匀,解决数据倾斜的问题,其中n是真实redis服务器的台数
图中没法画出4000个虚拟服务器,只是给每一台真实redis服务器虚拟一台服务器,且画的最理想哈希结果,最终每台服务器存放两个数据。
转载于:https://my.oschina.net/u/3049601/blog/1788835
哈希一致性、哈希取余、自定义轮询分片的比较相关推荐
- 哈希表除留取余法的桶个数为什么是质数
可先科普下质数的概念:质数,也就是素数,就是指一个大于1的自然数,约数(因数)只有1和它自己,否则叫合数. 除留取余,就是哈希函数将关键字被某个不大于哈希表长m的数p除后所得余数为哈希地址.这是最常用 ...
- 先来先服务算法代码_一致性哈希算法编写
今天我想先给大家科普下一致性哈希算法这块,因为我下一篇文章关于缓存的高可用需要用到这个,但是又不能直接在里面写太多的代码以及关于一致性hash原理的解读,这样会失去对于缓存高可用的理解而且会造成文章很 ...
- 一致性哈希算法 mysql_一致性哈希算法,在分布式开发中你必须会写,来看完整代码...
今天我想先给大家科普下一致性哈希算法这块,因为我下一篇文章关于缓存的高可用需要用到这个,但是又不能直接在里面写太多的代码以及关于一致性hash原理的解读,这样会失去对于缓存高可用的理解而且会造成文章很 ...
- Redis~集群(分布理论、一致性哈希分区、虚拟槽分区、节点握手、集群通信、集群伸缩、请求路由、故障转移、集群维护)
文章目录 分布理论 集群的分布式存储 简单哈希 一致性哈希分区 虚拟槽分区 Redis集群功能限制 节点握手 分配槽 集群通信 Gossip消息 集群伸缩 集群扩容 集群收缩 请求路由 MOVED重定 ...
- Redis数据分布一致性哈希
一致性哈希 一致性哈希的原理: 把所有的哈希值空间组织成一个虚拟的圆环(哈希环),整个空间按顺时针方向组织.因为是环形空间,0 和2^32-1 是重叠的. 假设我们有四台机器要哈希环来实现映射(分布数 ...
- 【另类见解】一致性哈希就能解决分库分表问题了?
" 开局一问:分库分表行为中,一致性哈希到底用处大不大? 装B脑图 现在是大数据的时代,其中一个体现就是数据量非常庞大.当然大数据的概念绝非是数据量就可以定义的,我自己给大数据下的定义是:无 ...
- memcached一致性哈希及php客户端实现
memcached分布式算法 memcached的分布式是依靠客户端的算法来实现,假设键名为$key,服务器数量为N,常规的实现方式有两种: 取模哈希 crc32($key)%N,通过这个算法将键名映 ...
- 哈希函数与一致性哈希
什么是 Hash Hash(哈希),又称"散列". 散列(hash)英文原意是"混杂"."拼凑"."重新表述"的意思. ...
- 分布式理论:CAP、BASE | 分布式存储与一致性哈希
文章目录 分布式理论 CAP定理 BASE理论 分布式存储与一致性哈希 简单哈希 一致性哈希 虚拟节点 分布式理论 CAP定理 一致性(Consistency): 在分布式系统中的所有数据副本,在同一 ...
最新文章
- Microsoft Web 平台安装程序 (Web PI) Microsoft Web Platform Installer
- 国内技术原创氛围为什么那么差?记EAWorld(普元)是如何靠“借鉴”产出原创文章的!
- qa session of management of technology
- 交换机配置软件_如何配置远程登陆交换机?最简单的解释方式,一看就懂
- 论文阅读计划2(Deep Joint Rain Detection and Removal from a Single Image)
- 【UIKit】UITableView.02
- 什么是声明式事务控制
- QQ for Linux下载、安装、运行、卸载
- SAP HANA企业级培训系列课程第一部分
- 前端技术周刊 2018-12-03:DOM
- 【转】Linux之printf命令
- git 列出两个 commit 之间变更的文件列表
- Kettle下载安装pdi-ce-7.1.0.0-12
- 如何选出好用的仓库库存管理系统软件?看文章就知道了
- Kindle Touch 5.3.7上手使用指南
- MyEclipse链接SQLSERVER数据库时18456的问题
- Cortana小娜失败背后,微软的傲慢与偏见
- oracle 信用检查,Oracle EBS 信用(Credit)额度(1)
- 字符串算法之KMP(字符串匹配)
- fcpx:火焰特效坍塌爆炸特效高清视频素材Vfx-Starter-Pack
热门文章
- 用不惯VMware?试试这款更轻量级的虚拟机!
- 面试官:给我一个避免消息重复消费的解决方案?
- IntelliJ IDEA 小技巧: Stream Trace 功能!
- 苹果开源代码中惊现“wechat”,老外注释的吐槽亮了!
- 面试官三连问:你这个数据量多大?分库分表怎么做?用的哪个组件?
- 最强 JDK15 安装与讲解,有点想升级,终于要废弃偏向锁了!
- Coggle加速计划:解决数据下载烦恼!
- 《动手学数据分析》开源教程完整发布!
- 组合特征(四)linearsvm-tfidf(word)+lr-tfidf(article)
- 研究生论文“盲审”“查重”再加码!毕业或将变的更加困难