哈希运算python实现_一致性哈希算法 python实现
# -*- coding: utf-8 -*-
"""
一致性哈希算法 python实现
参考
http://weblogs.java.net/blog/2007/11/27/consistent-hashing
http://code.google.com/p/flexihash/
http://www.codinglabs.org/html/consistent-hashing.html
"""
import hashlib
class ConsistentHash(object):
def __init__(self, hasher=None, replicas=None):
self.hasher = hasher and hasher or hashlib.md5
self.replicas = replicas and replicas or 64
self.positionToTarget = {}
self.targetToPositions = {}
self.targetCount = 0
def addTarget(self, target):
self.targetToPositions[target] = []
for i in range(self.replicas):
position = self.hasher(str(target)+str(i)).hexdigest()
self.positionToTarget[position] = target
self.targetToPositions[target].append(position)
self.targetCount += 1
def addTargets(self, targets):
for target in targets:
self.addTarget(target)
def removeTarget(self, target):
if self.targetToPositions.has_key(target):
for position in self.targetToPositions[target]:
self.positionToTarget.pop(position)
self.targetToPositions.pop(target)
self.targetCount -= 1
def getAllTargets(self):
return self.targetToPositions.keys()
def lookupList(self, resource, requestedCount):
if not self.positionToTarget:
return []
resourcePosition = self.hasher(resource).hexdigest()
results = []
collect = False
for key in sorted(self.positionToTarget.keys()):
value = self.positionToTarget[key]
if not collect and key > resourcePosition:
collect = True
if collect and value not in results:
results.append(value)
if len(results) == requestedCount or \
len(results) == self.targetCount:
return results
for key in sorted(self.positionToTarget.keys()):
value = self.positionToTarget[key]
if value not in results:
results.append(value)
if len(results) == requestedCount or \
len(results) == self.targetCount:
return results
return results
def lookup(self, resource):
targets = self.lookupList(resource, 1)
return targets[0]
哈希运算python实现_一致性哈希算法 python实现相关推荐
- 社区发现算法python视频_社区发现FN算法Python实现
社区发现FN算法Python实现 算法原理 评价指标 结果对比 源码 2004年,Newman在GN(Girvan and Newman, 2002)算法的基础上,提出了另外一种快速检测社区的算法, ...
- 先来先服务算法代码_一致性哈希算法编写
今天我想先给大家科普下一致性哈希算法这块,因为我下一篇文章关于缓存的高可用需要用到这个,但是又不能直接在里面写太多的代码以及关于一致性hash原理的解读,这样会失去对于缓存高可用的理解而且会造成文章很 ...
- 一致性hash算法虚拟节点_一致性哈希算法——虚拟节点
一致性哈希算法--虚拟节点 一致性哈希算法是分布式系统中常用的算法.比如,一个分布式的存储系统,要将数据存储到具体的节点上,如果采用普通的hash方法,将数据映射到具体的节点上,如key%N,key是 ...
- java murmurhash实现_一致性哈希算法与Java实现
一致性哈希算法是分布式系统中常用的算法.比如,一个分布式的存储系统,要将数据存储到具体的节点上,如果采用普通的hash方法,将数据映射到具体的节点上,如key%N,key是数据的key,N是机器节点数 ...
- 一致性hash算法虚拟节点_一致性哈希虚拟节点
采用固定哈希算法平衡负载 在大规模的缓存应用中,应运而生了分布式缓存系统.key-value如何均匀的分散到集群中?最常规的方式莫过于hash取模的方式.比如集群中可用机器适量为N,那么key值为K的 ...
- 零基础学python 视频_零基础入门学习PYTHON(第2版)(微课视频版)
小甲鱼畅销图书重磅升级,针对Python 3.7,通过生动的实例,让读者在实践中理解概念,在轻松.愉快中学会Python! 本书提倡理解为主,应用为王.因此,只要有可能,小甲鱼(注:作者)都会通过生动 ...
- 相同的字符串哈希值一样吗_关于哈希,来看这里!
我想跟着大家一起重新学习下关于哈希的一切--哈希.哈希函数.哈希表. 这三者有什么样的爱恨情仇? 为什么Object类中需要有一个hashCode()方法?它跟equals()方法有什么关系? 如何编 ...
- pycharm python部署_使用PyCharm配合部署Python的Django框架的配置纪实
安装软件安装 Python 2.7.PyCharm.pip(Python包管理工具).Django ( pip install Django) 部署PyCharm 新建Django工程 完成后,其目录 ...
- 千锋python笔记_《2020千锋Python入门视频全套全开源》多实用
确实,对于在学开发或者已经从事开发工作的小哥哥小姐姐来说,恋爱这个事还挺让人揪心的! 有对象的时候又怕嘴笨不会哄对象,总不能跟对象说你看我用代码给你画个心吧!没对象的用爬虫技术爬来各种小哥哥小姐姐的头 ...
最新文章
- python哪些是可变对象_什么是Python可变对象和不可变对象
- VTK:网格之ClipDataSetWithPolyData
- 第一类斯特林数学习记录
- 多进程fork()函数
- (原创总结) Quartus II 的在线调试方法
- 执行存储过程执行时,报ORA-01031权限不足
- SQL Serve权限管理
- 【OpenCV/C++】KNN算法识别数字的实现原理与代码详解
- 第十章 动态选录协议
- (转)什么是DevOps?阿里专家为你来解读
- IE浏览器打开闪退,崩溃的场景重置
- 计算机记笔记软件是什么,电脑记笔记软件哪个好(适合学生做笔记的软件)
- 电源的环路补偿、功率级补偿、Vout的波形对应的响应速度-运放环路补偿
- IIR数字滤波器原理与应用
- java 获取周六周日_JS实现获取当前所在周的周六、周日示例分析
- 中国数学的先行者—孙光远先生
- 《降伏其心》节选:从辟谷揭开修行的真相
- 【ROS】rosbag使用
- 如何重置或者去掉某个css属性值
- 华为交换机DHCP配置
热门文章
- k8s部署nginx集群
- ubuntu下载工具aria2 uGet
- redis所有版本下载地址
- centos下安装ruby,删除ruby
- mysql的分页查询
- java基础---流程控制
- 430. Flatten a Multilevel Doubly Linked List | 430. 扁平化多级双向链表(DFS)
- leetcode 628. Maximum Product of Three Numbers | 628. 三个数的最大乘积(Java)
- leetcode 492. 构造矩形(Java版,三种解法)
- ZooKeeper实战(三):ZooKeeper实现分布式配置中心、分布式锁、Reactive响应式模型