如何删除分布式系统中的重复值?

时间:2016-04-05 21:33:11

标签: parallel-processing mapreduce distributed-system

假设我们有一个分布式系统,集群中有K台机器。每台机器存储几个整数。我想从系统中删除所有重复的值。因此,如果整数123出现在machine1和machine2中,我们应该只在系统中保留一个123。我该怎么处理?

我的想法是先让每台机器使用bucket-sorting(所有nubmers都是整数)之类的东西进行removeDuplicate操作,然后让一台机器成为主节点进行reduce。有没有更好的主意?

2 个答案:

答案 0 :(得分:0)

简单的答案是,首先不要在不同的计算机上使用非托管重复值,方法是使用分布式哈希环或类似技术来确保特定值最终在某个节点上。

如果这还不够好,我会研究启发式优化。由于您已经在不同的计算机上拥有多个副本,因此我假设您希望对这些值进行重复数据删除以获得一些额外的性能,而不是应用程序的正确性。

如果是这种情况,让每个节点慢慢通过其键空间(节点上的foreach整数),并询问所有其他节点是否有相同值的副本。如果他们这样做,我们重复删除它。如果有人没有回应(足够快);忽略它们并继续。这允许分散的重复数据删除算法处理节点故障并且可以以任何速度运行,从而允许在需要时优先考虑更重要的流量。

我猜测根据幂律分布访问密钥,因此更频繁地浏览最常更新的密钥可能更有效,但不能保证。

答案 1 :(得分:0)

不确定您感兴趣的系统类型,但如果共享内存是一个选项,您可以保留计数器数组。由于您的所有数字都是整数,因此您可以标记此共享数组中出现的每个整数。此外,如果已经标记了此整数,则将其删除。这将导致接收到的每个整数的o(k)运算,并且没有重复。