Algorithm dropbox使用什么算法来识别应用程序未运行时本地更改的文件/文件夹列表?

Algorithm dropbox使用什么算法来识别应用程序未运行时本地更改的文件/文件夹列表?,algorithm,dropbox,sync,Algorithm,Dropbox,Sync,我知道,当应用程序使用某些操作系统事件运行时,我们可以识别文件系统中的更改。我只是想知道应用程序什么时候不运行,如果我对文件系统做了很多更改,比如添加/修改/删除/重命名一些文件和文件夹,Dropbox使用什么算法来识别这些更改。我能想到的一件事是,将文件系统上文件的上次修改时间与应用程序运行时的LMT存储值进行比较。在这种情况下,我们无论如何都必须遍历所有文件。然而,如果我们重命名,LMT不会改变。只是想看看有没有更好的方法,因为依赖LMT有它自己的问题 有什么意见吗?我不知道Dropbox是

我知道,当应用程序使用某些操作系统事件运行时,我们可以识别文件系统中的更改。我只是想知道应用程序什么时候不运行,如果我对文件系统做了很多更改,比如添加/修改/删除/重命名一些文件和文件夹,Dropbox使用什么算法来识别这些更改。我能想到的一件事是,将文件系统上文件的上次修改时间与应用程序运行时的LMT存储值进行比较。在这种情况下,我们无论如何都必须遍历所有文件。然而,如果我们重命名,LMT不会改变。只是想看看有没有更好的方法,因为依赖LMT有它自己的问题


有什么意见吗?

我不知道Dropbox是如何处理的,但这里有一个可能有用的策略:

您有一个由Dropbox处理的根目录。如果我是Dropbox,我会为服务器上的每个文件保留哈希值。从根开始,应用程序将扫描文件树(目录+文件),并计算每个文件的哈希值

扫描将产生一个双索引哈希表。每个文件和目录都将使用其相对路径(从根Dropbox目录)编制索引。将使用每个文件的散列创建第二个索引

现在,应用程序已经扫描并建立了双索引哈希表。然后服务器将发送元组(相对路径、文件哈希)。设(f,h)是这样一个文件元组:

  • 应用程序将尝试使用f通过路径索引获取文件:
  • 如果有结果,请比较哈希。如果它们不匹配,请更新远程服务器上的文件
  • 如果没有结果,文件可能已被删除或移动/重命名。然后,应用程序尝试使用h通过散列索引获取文件:如果存在匹配项,则意味着该文件仍然位于不同路径下(因此被移动或重命名)。应用程序将发送信息,并在服务器上适当移动/重命名文件
  • 未使用哈希或路径找到该文件。它已从Dropbox文件树中删除:我们将在服务器上相应地删除它

  • 请注意,此策略需要一个同步机制,以便在遇到匹配时知道是否必须在客户端或服务器上更新文件。这可以通过存储Dropbox(在客户端和服务器上)运行的上次更新的时间以及执行上次更新的人(在服务器上)来实现。

    谢谢。你能详细介绍一下第二个索引吗?它是一个文件的散列。这里的散列代表什么?我认为最好举个例子。假设我已经像这样同步了云和本地的层次结构/file1.txt、/file2.txt、/folder1/file3.txt。现在让我们假设我退出了应用程序,现在我在本地文件系统中进行了更改a)删除了file1.txt b)添加了新的folder2,如/folder2/file4.txt,我在云中进行了更改a)删除了file2.txt b)将folder1重命名为folder4 c)添加了folder5。当应用程序启动时,这种方法如何工作并发现本地和云更改?