算法在计算机之间复制数据

时间:2013-10-25 22:28:14

标签: algorithm replication

假设我有n台电脑。他们每个人都有一组整数。每台计算机都没有相同的设置。

即。计算机1有{1,2,3,4},计算机2有{4,5,10,20,21},计算机3有{-10,3,5}等等。

我想复制这些数据,以便所有计算机都具有所有整数,即所有计算机都有{-10,1,2,3,4,5,10,20,21}

我希望尽可能减少每台计算机发送的邮件数量,并尽量缩短时间。 (即避免采用串行方法,计算机1首先与每个人通信并获取它丢失的数据,然后计算机2也这样做,等等。

这样做的有效方法是什么?

感谢。

4 个答案:

答案 0 :(得分:1)

  

最小的方法是:所有计算机只向一台(主)计算机发送信息并获得结果

为了可靠性,您可以将至少两台计算机视为主计算机

  

假设:

  1. 共n台计算机
  2. 其中一台计算机被视为主计算机
  3.   

    算法:

    1. 所有计算机都将input-info发送给Master(总共n-1条消息)
    2. Master处理信息
    3. Master将result-info发送给所有计算机(总共n-1条消息)
    4.   

      可靠性:

      只有在所有主设备都出现故障的情况下,才会发生基于此算法的系统故障。

        

      效率:

      With 1 master  , total messages : 2 * (n-1)
      With 2 masters , total messages : 2 * 2 * (n-1)
      With 3 masters , total messages : 3 * 2 * (n-1)
      

答案 1 :(得分:1)

如果所有计算机都在同一网络上,则可以使用带有SO_BROADCAST选项的UDP套接字。

这样,当一台计算机发出“发送”消息时,所有其他计算机都会“收回”该消息并根据需要进行更新。

答案 2 :(得分:0)

这是在2 * n - 2次动作中进行此操作的一种方法。将机器建模为链表中的节点,编号为1..n。

  1. 让节点1将一条消息中的所有数据发送到节点2.
  2. 节点2记住发送的消息节点1,执行其内容与节点1内容的并集,并将统一消息发送到节点3.然后节点2等待来自节点3的响应。
  3. 节点3与上面相同,依此类推,直到我们到达节点' n。节点' n'现在有了完整的设置。
  4. 节点' n'已经知道什么消息节点' n - 1'发送它,所以它将差异发送回节点' n - 1'
  5. 节点' n - 1'如上所述执行联合。因为它已经记住了节点' n - 2' (在上面的步骤2中),它可以将差异发送回节点' n - 3'
  6. 等等。

    我认为上述情况导致在网络中发送2 *(n - 1)条消息并不复杂。

    我认为可以通过考虑每个节点具有唯一元素来证明2n-2是必需的。数学归纳应该是一个简短的练习来证明2n - 2是必要的。

答案 3 :(得分:0)

嗯,已经有一个这样做的系统,被广泛采用,文档齐全,广泛可用,虽然它可能并不完美(对于完美的各种定义),但它是实用。

它叫做RSync。

您可以从这里开始:http://www.samba.org/~tridge/phd_thesis.pdf