我正在编写一个应用程序,它需要在客户端和(http)服务器之间同步文件结构。
文件结构本质上是一个文件路径列表,其中每个路径都是一个与 1 个或多个数据块 ID 连接的字符串(对实际数据块的 256 位引用)。一个数据块可以被多个文件引用,因此路径和 id 之间存在 nm 关系。现在它只是一个带有 id 的路径列表,但如果同步需要,它可以很容易地转换为路径表示的树结构。
我正在寻找一种数据结构,它可以让我有效地同步这些数据。主要实现两个目标:
- 一个文件的更改不应强制客户端将整个文件结构发送到服务器,而只是发送它的一小部分。
- 如果更改了许多文件,则应将这些更改组合在一起。例如,1000 次更改不会导致向服务器发送 1000 次请求。
如您所见,目标有点矛盾,因此我正在寻找能够在它们之间找到良好中间立场的东西。第二个目标可以通过将多个更改分组到一个 http-request 中轻松实现,但是服务器所需的处理(解析 HTTP-request 请求的所有更改)应该是非常便宜的,计算明智的。
我还应该提到,可能有多个客户端在服务器上同步相同的结构。因此,必须很容易检测到一个客户端的更改,然后将其同步到另一个客户端(即,它不仅仅是上传到服务器)。
我当然不是第一个这样做的人,所以我认为有一些可用的智能解决方案。例如,我猜 Dropbox 和 Subversion 在同步元数据时都有类似的要求。有谁碰巧知道他们是如何实施的?