计算机 A 和计算机 B 都在同步给定文件夹。您将一个 2GB 的文件添加到计算机 A 上的文件夹中,它自然会通过网络推送到计算机 B,尽管速度很慢。如果您随后在计算机 A 上对 2GB 文件进行更改,会发生什么情况?
我认为选择真的
a) 将整个 2GB 文件推送到计算机 B 或 b) 分析两个文件之间的差异,然后仅通过网络发送更改。然后计算机 B 的网格服务将应用这些更改。
但它到底是哪一个呢?
另外,如果我将那个 2GB 文件移动到子文件夹会发生什么?
答案1
如果您随后对计算机 A 上的 2GB 文件进行更改,会发生什么情况?
有多种方法可以检测这种变化。
你可以哈希该文件并查看哈希值是否不同(成本高昂)。这是许多 MMO 修补程序用于文件完整性检查等的方法。
文件系统维护最后修改字段。因此按修改日期索引文件相对来说成本较低。然后您只需定期轮询目录并根据需要更新内容即可。
许多操作系统实际上允许您订阅文件/文件夹列表,并在它们发生更改、添加新文件等时收到通知。
然后我们只需要发送变化的部分。许多协议和算法都支持只发送变化的部分。 Rsync是一种常用的协议(可能与 mesh 类似),它只翻译不同之处机器之间使用压缩技术,因此带宽利用率相当高。大文件的问题在于,一个更改可能会导致一系列小更改,而这些更改很难有效地进行差异化。
我非常确定 mesh 在机器间传输时会同时使用差分和压缩。但它是一个闭源产品,我找不到任何证据来证实这一点。
另外,如果我将那个 2GB 文件移动到子文件夹会发生什么?
在大多数情况下,您需要重新下载更改。无论出于何种目的,程序都会将其视为删除,然后在新位置添加新文件。
理论上,您可以对所有文件进行哈希处理,然后通过比较哈希值来查看新添加的文件是否已存储。这会相当昂贵(例如,如果您要添加 1,000 个小文件)。