【问题标题】:How to remove duplicated values in distributed system?如何删除分布式系统中的重复值?
【发布时间】:2016-04-05 21:33:10
【问题描述】:

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

我的想法是首先让每台机器使用桶排序(所有 nummers 都是整数)之类的方法执行 removeDuplicate 操作,然后让一台机器作为主节点进行减少。有没有更好的办法?

【问题讨论】:

  • 您的问题非常有趣,但不幸的是,对于 SO 而言,它的范围很广且离题。尽管如此,它主要是关于良好的分区,它应该对整个网络上的数据进行洗牌和排序,而不是具有低上限复杂度的地图分区,然后在最后减少
  • 整数的用途和预期的输出是什么?

标签: parallel-processing mapreduce distributed-system


【解决方案1】:

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

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

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

我猜测密钥是根据幂律分布访问的,因此更频繁地遍历最常更新的密钥可能会更有效,但不能保证这一点。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-18
      • 1970-01-01
      • 2023-01-05
      • 2013-04-02
      • 1970-01-01
      • 2011-11-05
      • 1970-01-01
      相关资源
      最近更新 更多