基于murdur3哈希的集合哈希实现

clandestined的Python项目详细描述


基于murdur3哈希的集合哈希实现

动机

在分布式系统中,常常需要在 一组机器。一致的散列和集合散列是 执行此任务的方法,同时最小化上的数据移动 群集拓扑更改。

clandired是一个集合散列的库,其目标是 简单的客户端和易用性

当前的目标是支持:-Python2.5到Python3.6

Build Status

示例用法

>>>fromclandestinedimportCluster>>>>>>nodes={...'1':{'name':'node1.example.com','zone':'us-east-1a'},...'2':{'name':'node2.example.com','zone':'us-east-1a'},...'3':{'name':'node3.example.com','zone':'us-east-1a'},...'4':{'name':'node4.example.com','zone':'us-east-1b'},...'5':{'name':'node5.example.com','zone':'us-east-1b'},...'6':{'name':'node6.example.com','zone':'us-east-1b'},...'7':{'name':'node7.example.com','zone':'us-east-1c'},...'8':{'name':'node8.example.com','zone':'us-east-1c'},...'9':{'name':'node9.example.com','zone':'us-east-1c'},...}>>>>>>cluster=Cluster(nodes)>>>cluster.find_nodes('mykey')['4','8']>>>

默认情况下,Cluster将在群集周围放置2个副本 请注意将第二个副本与第一个副本放在单独的区域中。

如果集群不需要区域感知,则可以 直接调用RendezvousHash类,或者使用 Cluster副本设置为1

>>>fromclandestinedimportCluster>>>fromclandestinedimportRendezvousHash>>>>>>nodes={...'1':{'name':'node1.example.com'},...'2':{'name':'node2.example.com'},...'3':{'name':'node3.example.com'},...'4':{'name':'node4.example.com'},...'5':{'name':'node5.example.com'},...'6':{'name':'node6.example.com'},...'7':{'name':'node7.example.com'},...'8':{'name':'node8.example.com'},...'9':{'name':'node9.example.com'},...}>>>>>>cluster=Cluster(nodes,replicas=1)>>>rendezvous=RendezvousHash(nodes.keys())>>>>>>cluster.find_nodes('mykey')['4']>>>rendezvous.find_node('mykey')'4'>>>

高级使用

杂音3种子

免责声明

Clandired的设计并没有考虑到不可信的输入, 请看许可证。

end免责声明

如果计划基于不受信任的输入使用密钥(不受支持,但执行 在前面),最好使用自定义种子进行散列。尽管如此 这项技术绝不是使用 精心制作的钥匙,可以让你晚上睡得更好。

>>>fromclandestinedimportCluster>>>fromclandestinedimportRendezvousHash>>>>>>nodes={...'1':{'name':'node1.example.com'},...'2':{'name':'node2.example.com'},...'3':{'name':'node3.example.com'},...'4':{'name':'node4.example.com'},...'5':{'name':'node5.example.com'},...'6':{'name':'node6.example.com'},...'7':{'name':'node7.example.com'},...'8':{'name':'node8.example.com'},...'9':{'name':'node9.example.com'},...}>>>>>>cluster=Cluster(nodes,replicas=1,seed=1337)>>>rendezvous=RendezvousHash(nodes.keys(),seed=1337)>>>>>>cluster.find_nodes('mykey')['7']>>>rendezvous.find_node('mykey')'7'>>>

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Maven无法识别安装在Ubuntu外壳上的$java_HOME jdk   java如何防止可运行程序在其中一个抛出异常时执行   java Listview在按下项时不触发   如何在WindowsPhone8中使用JavaRESTWebService?   java在spring引导下使用多个dispatcher servlet/web上下文   java为什么在删除容器的绝对大小时不绘制GEF子项?   java在hibernate实体中保留DB约束是好的   JavaSpring选择最高优先级bean   ArrayList<Class>java字符串[]   有向加权边图的Java邻接表实现   字母数字字符串的java Tesseract配置:混合2、Z、6和G   如果输入为空,则带有EditText的java警报对话框将关闭   jsp上的java Struts 2动作响应   java获取IndexOutOfBundException Android   scala AWSJAVASDK:解压缩大小必须小于262144000字节