假设我有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也这样做,等等。
这样做的有效方法是什么?
感谢。
答案 0 :(得分:1)
最小的方法是:所有计算机只向一台(主)计算机发送信息并获得结果
为了可靠性,您可以将至少两台计算机视为主计算机
假设:
算法:
input-info
发送给Master(总共n-1条消息)result-info
发送给所有计算机(总共n-1条消息)可靠性:
只有在所有主设备都出现故障的情况下,才会发生基于此算法的系统故障。
效率:
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。
等等。
我认为上述情况导致在网络中发送2 *(n - 1)条消息并不复杂。
我认为可以通过考虑每个节点具有唯一元素来证明2n-2是必需的。数学归纳应该是一个简短的练习来证明2n - 2是必要的。
答案 3 :(得分:0)
嗯,已经有一个这样做的系统,被广泛采用,文档齐全,广泛可用,虽然它可能并不完美(对于完美的各种定义),但它是实用。
它叫做RSync。