基本上,我想实现以下算法并分析使用这些算法构建的系统在不同条件下的行为.
我的兴趣在于这些算法.我基本上正在寻找一种编程语言,可以让我快速编写这些算法并深入理解这些算法.
我应该选择哪种语言?Java,Scala,Erlang或其他任何东西.
目前,我了解Java和C++.
假设我在开头有两个memcached节点(节点A,B),当我添加一个新节点C时,一部分键被重新映射,并且由于一致的散列只有其中一些.
假设最初在服务器A处使用键" foo " 的值现在正被映射到服务器C.
当我最终删除节点C时,密钥应该再次映射到节点A,但此时节点A只包含过时数据.
那么,刷新数据是解决这个问题的唯一方法吗?
尝试水平扩展用作任务服务器的Redis实例Python-RQ.
据我所知,最好的方法是将分片逻辑(最有可能使用Consistent Hashing)添加到自定义ConnectionPool和/或Connection类中.我宁愿使用一个库来实现Consistent Hashing机制 - 因为它似乎应该是可用的东西,并且最有可能比本土解决方案更好/更多的战斗测试.
做这样的事情会有什么好处?我应该研究一些图书馆吗?有什么我想念的东西,我应该考虑到吗?
非常感谢!
我使用spymemcached&HashAlgorithm.KETAMA_HASH连接到5个节点的memcached池.
我的理解是当我们使用一致的哈希算法时,例如,当一个节点关闭时,我们不需要担心,因为密钥将被重新分配(具有最小影响)
如果下行节点要加入池,该怎么办?我需要做什么?
我应该确保需要删除陈旧数据吗?或者我的程序是否需要针对此案例进行特殊处理?
散列和索引都用于对某些预定义公式的数据进行分区.但我无法理解两者之间的关键区别.
在散列中,我们在一些键值对的基础上划分数据,类似于索引,我们也在一些预定值上划分数据.
任何人都可以帮我解决Hashing和Indexing之间的区别,以及如何决定是使用散列还是索引.
我正在使用 redis 集群 3.0.1。
我认为 redis 集群使用一致的哈希。哈希槽类似于一致性哈希中的虚拟节点。Cassandra的数据分布和redis cluster差不多,本文说的是consistent hashing。
但是redis cluster turorial说redis cluster没有使用一致的hash。
我想念什么?谢谢。
我试图了解不同的负载平衡策略是如何工作的。
一种方法是使用一致性哈希算法,将整个空间划分为多个虚拟节点,每个物理节点占用一组虚拟节点。
我不明白热分区问题将如何解决?是否有可能出现某个特定节点比其他节点更繁忙的情况?
有人可以添加他们处理类似用例的经验吗?任何指向正确文档/文献的指针都会有所帮助。
有人问我一致性哈希的一些缺点。但我认为它只是比传统的 hash%N 哈希成本高一点。正如标题所提到的,如果一致性哈希非常好,我们为什么不直接使用它呢?
你知道更多吗?谁能告诉我一些?
language-agnostic algorithm hash consistent-hashing data-structures
原谅我,如果这个问题是愚蠢的,但我开始了解一致性哈希和阅读就可以了汤姆·怀特的博客文章之后这里,实现大多数默认散列函数不好混我有一个想法上确保一个任意哈希函数最低限度的混合.
我的想法最好用这样的例子来解释:
Bucket 1: 11000110
Bucket 2: 11001110
Bucket 3: 11010110
Bucket 4: 11011110
Run Code Online (Sandbox Code Playgroud)
在这些存储桶之间进行一致缓存的标准哈希环实现下,您将获得非常高的性能,并且几乎每个条目都将被集中到Bucket 1中.但是,如果我们在每种情况下使用位4和5作为MSB,那么这些存储桶突然出色混合,并将新对象分配给缓存变得微不足道,只需要检查2位.
在我看来,在跨多个节点构建分布式网络时,可以非常容易地扩展这个概念.在我的特定情况下,我将使用它来确定将给定数据放入哪个缓存.增加的放置速度不是一个真正的问题,但确保我的缓存是混合良好的,我正在考虑选择一些最佳混合的位给我的给定缓存.稍后索引的任何信息将基于相同的位进行索引.
在我天真的想法中,这是一个比引入虚拟节点或构建更好的哈希函数更简单的解决方案.也就是说,我看不出有任何像这样的方法,我担心在我的哈希无知中,我在这里做错了,我可能会引入意想不到的后果.
这种方法安全吗?我应该用吗?之前是否使用过此方法,是否有任何已建立的算法来确定最小唯一位组?
我正在使用PostgreSQL 9.3,并且已经使用plproxy实现了与虚拟节点的一致性哈希。
在当前设置中,节点之间的添加和重新平衡正在起作用(服务器之间的数据移动使用PostgrelSQL外部数据包装器完成)。
但是有一个限制。在当前设置中,所有物理节点均假定为相等。即,添加节点时,无法提供每个服务器的虚拟节点数。我也想建立这种行为。
所以我在问什么是更好的算法来实现这一点。当前的算法只是在服务器之间平均分配服务器的虚拟节点容量。在新算法中,我希望看到虚拟节点移动的最小数量。
例如:
假设我们有4个服务器的集群,每个服务器有64个虚拟节点(总共256个虚拟节点)。我想添加具有200个虚拟节点(或虚拟节点的某个百分比)的服务器(服务器X),以便每个4台服务器均对该新服务器做出同等贡献,以在一定程度上满足其虚拟节点数。
但是,当添加新节点(即服务器X)时,我不想为该服务器分配全部200个。我需要一种算法来从现有服务器中分配一定比例,以便在一定程度上满足新服务器的200个节点的需求,并且以前的4个服务器不会在那里大量释放虚拟节点。
在物理服务器之间划分虚拟节点的更好策略是什么?
hash ×3
algorithm ×2
java ×2
memcached ×2
redis ×2
spymemcached ×2
erlang ×1
indexing ×1
paxos ×1
postgresql ×1
python ×1
scala ×1
scalability ×1
sharding ×1