内容管理客户端同步服务的制作方法

专利2022-06-28  73


相关申请的交叉引用

本申请要求2018年1月11日提交的美国非临时申请15/868,489、2018年1月11日提交的美国非临时申请15/868,518、2018年1月11日提交的美国非临时申请15/868,511、2018年1月11日提交的美国非临时申请15/868,505和2017年12月28日提交的美国临时申请号62/611,473的优先权,所述申请的全部内容明确地通过引用的方式整体并入本文。



背景技术:

内容管理系统允许用户使用网络跨多个设备访问和管理内容项。一些内容管理系统可允许用户共享内容项并且提供有助于用户协同使用内容项的另外的特征。内容管理系统通常将内容项存储在服务器上并且允许用户通过网络访问内容项。一些内容管理系统还允许将本地副本存储在客户端设备上,以便以更自然的接口(例如,本机应用程序或在客户端设备的文件系统内)向用户提供对内容项的更快访问。另外,这使用户在用户离线时能够访问内容项。内容管理系统尝试跨多个客户端设备和服务器使内容项的副本同步,使得每个副本是相同的。然而,内容项同步是困难的并且与许多技术障碍相关联。

附图说明

通过参考在附图中示出的特定实现方式,本技术的上述和其他优点和特征将变得显而易见。本领域普通技术人员将理解,这些附图仅示出了本技术的一些实例,并且本技术的范围将不限于这些实例。此外,技术人员将通过使用附图如以另外的特征和细节所描述和解释的来理解本技术的原理,在附图中:

图1示出根据一些实施方案的内容管理系统和客户端设备的实例;

图2示出根据一些实施方案的客户端同步服务的实例;

图3示出根据各种实施方案的树数据结构的实例;

图4示出根据各种实施方案的树数据结构的实例;

图5示出根据本主题技术的各种实施方案的用于使用树数据结构来使服务器状态和文件系统状态同步的示例性方法;

图6示出根据本主题技术的各种实施方案的用于在使用树数据结构来使服务器状态和文件系统状态同步时解决冲突的示例性方法;

图7示出根据各种实施方案的示出违反添加操作规则的树数据结构的实例;

图8示出根据本主题技术的各种实施方案的用于使服务器状态和文件系统状态逐步地收敛的示例性方法;

图9示出根据各种实施方案的树数据结构的实例;

图10示出示例性场景;

图11示出根据本主题技术的各种实施方案的两个操作计划的示例性维恩图表示;

图12示出根据本主题技术的各种实施方案的用于管理操作计划改变的示例性方法;

图13示出根据本主题技术的各种实施方案的文件名阵列和哈希索引阵列的图示;

图14示出根据本主题技术的各种实施方案的用于存储文件名的示例性方法;

图15示出根据本主题技术的各种实施方案的用于在给定文件名的情况下检索文件名的位置的示例性方法;

图16a和图16b示出根据各种实施方案的树数据结构的实例;

图17示出根据各种实施方案的树数据结构的实例;

图18示出根据本主题技术的各种实施方案的用于在给定文件名的情况下检索文件名的位置的示例性方法;并且

图19示出用于实现本技术的某些方面的系统的实例。

具体实施方式

本技术的各种实例在下文中详细讨论。虽然讨论了具体的实现方式,但应理解这仅出于说明目的而进行。相关领域的技术人员应认识到,可在不背离本技术的精神和范围的情况下使用其他组件和配置。

计算和网络技术的各种进步使内容管理系统能够向用户提供跨多个设备对内容项的访问。内容项可包括但不限于文件、文档、消息(例如,电子邮件消息或文本消息)、媒体文件(例如,照片、视频和音频文件)、包含其他内容项的文件夹或任何其他内容单元。内容项可与多个用户共享、被编辑、删除、添加、重命名或移动。然而,跨若干个计算设备(例如,服务器和客户端设备)以及跨若干个用户账户使这些内容项同步仍然存在缺陷并且充满技术障碍。

为了说明技术障碍中的一些,第一机器(例如,客户端设备或服务器)可向第二机器发送通信,所述第二机器提供关于用户已如何修改由内容管理系统管理的内容项的信息。这些通信可由第二机器使用以使第二机器上的内容项同步,使得对第一机器上的内容项执行的动作反映在第二机器上的内容项中,并且第一机器上的内容项与第二机器上的内容项基本上相同。

然而,由于用于传输通信的一个或多个网络所使用的各种网络路由协议、第一机器或第二机器的技术操作或某种其他原因,可发送若干通信并且通信可被无序地接收。此外,用户可能正在对大量内容项执行大量修改,在短时间内撤消先前的修改,或者对先前修改的内容项或一组内容项快速地执行另外的修改。这增加了这些通信被无序地接收、某些通信过时或第二机器将对不是最新的内容项执行操作的可能性。因此,许多操作可能与内容项的当前状态不兼容。实际上,甚至可能难以检测到一些操作是与其他操作还是与内容项的当前状态冲突。

另外,关于同步动作存在固有的等待时间。例如,第一机器首先检测在第一机器上采取的动作,并且通信被生成并且然后通过网络传输。通信由第二机器接收,所述第二机器仍然可处理先前的通信并且采取通信中详述的动作。在这种说明性场景中,存在其中第一机器、第二机器和/或网络的有限计算资源(例如,带宽、存储器、处理时间、处理周期等)引入等待时间的若干个点。当等待时间增加时,由于某种原因通信与内容项的当前状态发生冲突的可能性增加。此外,处理这些冲突通信并且解决冲突也耗费不必要的计算资源(诸如处理时间、内存、能量或带宽),并且进一步增加了等待时间。

为了进一步使事情复杂化,第二机器和/或访问内容项的另外的机器上的相同或不同用户也可能正在对内容项执行修改。因此,上述问题可能成倍增加,并且出现关于本地动作是否与远程动作冲突和/或本地动作是否正在对最新内容项进行操作的另外的技术问题。

所公开的技术满足了本领域对用于内容管理系统的客户端同步服务的需求,这为上述以及其他技术问题提供了技术解决方案。客户端同步服务可被配置来在客户端设备上操作并且标识内容管理系统的服务器上的内容项与客户端设备上的对应内容项之间的同步失配。对于每个同步失配,客户端同步服务可标识使内容项同步所需的操作并且发起那些操作。

客户端同步服务可使用一组树数据结构(“树”)来跟踪服务器上的内容项的状态、客户端设备上的内容项的状态以及它们的同步状态。根据一些实施方案,可使用一组3个树。三个树可包括表示服务器状态的远程树、表示客户端设备上的文件系统状态的本地树、以及表示用于本地树和远程树的合并基础的同步树。合并基础可被认为是本地树和远程树的共同祖先,或者本地树与远程树之间最后已知的同步状态。因此,当所有3个树(例如,远程树、同步树和本地树)相同时,客户端同步服务可确定服务器状态和客户端设备状态同步。

当检测到对内容项的服务器状态或内容项的客户端设备文件系统状态(“文件系统状态”)的修改时,客户端同步服务更新适当的树并且基于树的三权分立来确定服务器状态和文件系统状态是否同步。基于对树中的一个的更新,服务器状态和文件系统状态可变得同步、变得不同步或变得进一步不同步。如果服务器状态和文件系统状态不同步,则客户端同步服务可标识出使服务器状态和文件系统状态收敛并且使服务器状态和文件系统状态更靠近同步状态所需的至少一组初始操作。

通过依赖于所述一组树数据结构来监控服务器状态和文件系统状态提供根源于计算技术对各种技术问题的替代性方案和/或解决方案。例如,客户端同步服务能够跟踪服务器状态以及文件状态,并且存储这两种状态的合并基础的表示。因此,本主题技术的各种实施方案避免了与接收多个通信相关联的技术问题,所述多个通信指定用户如何远程地修改内容项并且确定应在本地实现这些修改的顺序、所述修改是与其他修改冲突还是过时以及远程修改是否与用户在本地执行的本地修改冲突。这些问题中的许多问题是由其他解决方案引起的,所述其他解决方案无法跟踪所涉及的各个参与者(例如,服务器和客户端设备)的状态,并且无法快速地确定状态是否同步。相反,这些其他解决方案依赖于接收有关在没有服务器状态和文件系统状态是否同步的上下文的情况下如何在本地修改内容项的指令。

此外,由于服务器状态和文件系统状态被连续地监控,因此就过程复杂性以及计算时间和资源而言,确定它们是否同步更为有效。如下文进一步详细描述的,客户端同步服务以更加确定的方式使服务器状态和文件系统状态逐步地且有条不紊地实现同步。因此,内容管理系统特征的扩展和测试也更加有效。

内容管理系统

在一些实施方案中,所公开的技术部署在具有内容项同步能力和协同特征等的内容管理系统的上下文中。在图1a中示出示例性系统配置100,所述示例性系统配置100描绘了内容管理系统110与客户端设备150进行交互。

账户

内容管理系统110可与账户相关联地存储内容项,以及执行多种内容项管理任务,诸如检索、修改、浏览和/或共享一个或多个内容项。此外,内容管理系统110可使账户能够从多个客户端设备访问一个或多个内容项。

内容管理系统110支持多个账户。实体(用户、用户组、团队、公司等)可利用内容管理系统创建账户,并且账户细节可存储在账户数据库140中。账户数据库140可存储所注册实体的档案信息。在一些情况下,所注册实体的档案信息包括用户名和/或电子邮件地址。账户数据库140可包括账户管理信息,诸如账户类型(例如,免费或付费账户的各个层)、分配的存储空间、使用的存储空间、具有驻留在其上的所注册内容管理客户端应用程序152的客户端设备150、安全设置、个人配置设置等。

账户数据库140可存储与实体相关联的账户组。组可基于组策略和/或访问控制列表而具有许可权,并且组的成员可继承所述许可权。例如,营销组可访问一组内容项,而工程组可访问另一组内容项。管理员组可修改组、修改用户账户等。

内容项存储

内容管理系统110的特征是内容项的存储,所述内容项可存储在内容存储装置142中。内容项可以是任何数字数据,诸如文档、协同内容项、文本文件、音频文件、图像文件、视频文件、网页、可执行文件、二进制文件等。内容项还可包括用于将内容项与不同行为(诸如文件夹、zip文件、播放列表、专辑等)分组在一起的集合或其他机制。集合可以是指一个文件夹或由共同属性相关或分组的多个内容项。在一些实施方案中,内容存储装置142与其他类型的存储装置或数据库组合以处置特定功能。内容存储装置142可存储内容项,而关于内容项的元数据可存储在元数据数据库146中。同样,关于内容项在内容存储装置142中的存储位置的数据可存储在内容目录144中。另外,关于改变、访问等的数据可存储在服务器文件日志148中。各种存储装置/数据库(诸如内容存储装置142、内容目录144、服务器文件日志148和元数据数据库146)中的每一者可包括多于一个此类存储装置或数据库,并且可分布在许多设备和位置上。其他配置也是可能的。例如,来自内容存储装置142、内容目录144、服务器文件日志148和/或元数据数据库146的数据可组合成一个或多个内容存储装置或数据库,或者进一步被分割成另外的内容存储装置或数据库。因此,内容管理系统110可包括比图1中所示的更多或更少的存储装置和/或数据库。

在一些实施方案中,内容存储装置142与至少一个内容存储服务116相关联,所述至少一个内容存储服务116包括用于管理内容项的存储的软件或其他处理器可执行指令,包括但不限于接收要存储的内容项、准备要存储的内容项、为内容项选择存储位置、从存储装置检索内容项等。在一些实施方案中,内容存储服务116可将内容项划分成更小的小块以用于存储在内容存储装置142处。组成内容项的每个小块的位置可记录在内容目录144中。内容目录144可包括存储在内容存储装置142中的每个内容项的内容条目。内容条目可与标识内容项的唯一id相关联。

在一些实施方案中,标识内容目录144中的内容项的唯一id可从确定性哈希函数导出。导出内容项的唯一id的这种方法可确保如此辨识内容项重复,因为确定性哈希函数将针对相同内容项的每个副本输出相同的标识符,但将针对不同的内容项输出不同的标识符。使用这种方法,内容存储服务116可针对每个内容项输出唯一id。

内容存储服务116还可在元数据数据库146中指定或记录用于内容项的内容路径。内容路径可包括内容项的名称和/或与内容项相关联的文件夹层次结构。例如,内容路径可包括一个文件夹或文件夹路径,其中内容项存储在客户端设备上的本地文件系统中。尽管内容项以块形式存储在内容存储装置142中并且可不存储在树状目录结构下,但是此类目录结构对于用户而言是舒适的导航结构。内容存储服务116可定义或记录用于内容项的内容路径,其中目录结构的“根”节点可以是用于每个账户的名称空间。在名称空间内可以是由账户和/或内容存储服务116的用户定义的目录结构。元数据数据库146可存储用于每个内容项的内容路径作为内容条目的一部分。

在一些实施方案中,名称空间可包括嵌套在目录结构中,好像它们存储在根节点内一样的另外的名称空间。这可在账户访问共享集合时发生。共享集合可在内容管理系统110内分配有其自己的名称空间。虽然一些共享集合实际上是共享集合的根节点,但是它们位于从属于目录结构中的账户命名空间并且可显现为账户文件夹内的文件夹。如上所述,目录结构对于用户而言仅是一种舒适的导航结构,但与内容存储装置142中的内容项的存储位置不相关。

虽然账户查看内容项的目录结构与内容管理系统110处的存储位置不相关,但是目录结构可取决于客户端设备150所使用的文件系统而与客户端设备150上的存储位置相关。

如上所述,内容目录144中的内容条目还可包括组成内容项的每个小块的位置。更具体地,内容条目可包括标识组成内容项的小块在内容存储装置142中的位置的内容指针。

除了内容路径和内容指针之外,内容目录144中的内容条目还可包括标识访问内容项的用户账户的用户账户标识符和/或标识访问内容项的组和/或内容条目所属的名称空间的组标识符。

内容存储服务116可通过标识重复的内容项或组成内容项或内容项版本的重复块来减少所需的存储空间的量。替代存储多个副本,内容存储装置142可存储内容项的单一副本或内容项的块,并且内容目录144可包括指针或其他机制以将重复项链接到单一副本。

内容存储服务116还可与内容项的唯一id相关联地存储元数据,所述元数据描述内容项、内容项类型、文件夹、文件路径和/或内容项与元数据数据库146中的各种账户、集合或组的关系。

内容存储服务116还可将关于改变、访问等的数据日志存储在服务器文件日志148中。服务器文件日志148可包括内容项的唯一id和改变或访问动作的描述以及时间戳或版本号和任何其他相关数据。服务器文件日志148还可包括指向受改变或内容项访问影响的块的指针。内容存储服务可通过使用内容项版本控件来提供撤消操作的能力,所述内容项版本控件跟踪对内容项的改变、内容项的不同版本(包括发散的版本树)以及可从服务器文件日志148获取的改变历史。

内容项同步

内容管理系统110的另一个特征是内容项与至少一个客户端设备150同步。一个或多个客户端设备可采用不同的形式并且具有不同的能力。例如,客户端设备1501是具有可由驻留在其上的多个应用程序访问的本地文件系统的计算设备。客户端设备1502是其中内容项仅可被特定应用程序或通过由特定应用程序给出的许可权访问并且内容项通常存储在应用程序特定空间中或云中的计算设备。客户端设备1503是通过web浏览器访问内容管理系统110并且通过web接口访问内容项的任何客户端设备。虽然示例性客户端设备1501、1502和1503以诸如膝上型计算机、移动设备或web浏览器的形态因素描绘,但是应当理解,其描述不限于这些示例性形态因素的设备。例如,移动设备(诸如客户端1502)可具有可由驻留在其上的多个应用程序访问的本地文件系统,或者客户端1502可通过web浏览器访问内容管理系统110。这样,当考虑客户端150的能力时,不应将形态因素视为限制性的。取决于设备的特定能力,在本文关于客户端设备150描述的一个或多个功能在每个客户端设备上可用或不可用—文件访问模型就是一种此类能力。

在许多实施方案中,客户端设备与内容管理系统110的账户相关联,但是在一些实施方案中,客户端设备可使用共享链接来访问内容并且不需要账户。

如上所述,一些客户端设备可使用web浏览器来访问内容管理系统110。然而,客户端设备还可使用在客户端设备150上存储并运行的客户端应用程序152来访问内容管理系统110。客户端应用程序152可包括客户端同步服务156。

客户端同步服务156可与服务器同步服务112通信,以使对内容项的改变在客户端设备150与内容管理系统110之间同步。

客户端设备150可通过客户端同步服务156使内容与内容管理系统110同步。同步可以是平台无关的。也就是说,内容可跨具有不同类型、能力、操作系统等的多个客户端设备同步。客户端同步服务156可使对内容项的任何改变(新的、删除的、修改的、复制的或移动的内容项)在客户端设备150的文件系统的指定位置中同步。

内容项可从客户端设备150同步到内容管理系统110,并且反之亦然。在其中同步是从客户端设备150到内容管理系统110的实施方案中,用户可直接从客户端设备150的文件系统操纵内容项,而客户端同步服务156可针对对所监控文件夹内的文件的改变监控客户端设备150上的目录。

当客户端同步服务156在其监控的目录中检测到内容的写入、移动、复制或删除时,客户端同步服务156可使所述改变同步到内容管理系统服务116。在一些实施方案中,客户端同步服务156可执行内容管理系统服务116的一些功能,包括上述功能,诸如将内容项分成块、对内容项进行哈希以生成唯一标识符等。客户端同步服务156可在客户端存储索引164内对内容进行索引并且将结果保存在存储索引164中。索引可包括存储路径加上每个内容项的唯一服务器标识符和唯一客户端标识符。在一些实施方案中,客户端同步服务156从服务器同步服务112学习唯一服务器标识符,并且从客户端设备150的操作系统学习唯一客户端标识符。

客户端同步服务156可使用存储索引164来促进客户端存储装置内的至少一部分内容与同内容管理系统110上的用户账户相关联的内容同步。例如,客户端同步服务156可将存储索引164与内容管理系统110进行比较,并且检测客户端存储装置上的内容与同内容管理系统110上的用户账户相关联的内容之间的差异。然后,客户端同步服务156可通过适当地上传、下载、修改和删除客户端存储装置上的内容来尝试协调差异。内容存储服务116可适当地存储内容项的所改变或新块,并且更新服务器文件日志148、元数据数据库146、内容目录144、内容存储装置142、账户数据库140等。

当从内容管理系统110同步到客户端设备150时,在服务器文件日志148中记录的内容项的安装、修改、添加、删除、移动可触发使用通知服务117向客户端设备150发送通知。当客户端设备150被告知改变请求时,从对客户端设备已知的最后的同步点开始进行列于服务器文件日志148中的改变。当客户端设备150确定它与内容管理系统110不同步时,客户端同步服务156请求包括改变的内容项块,并且更新其所改变内容项的本地副本。

在一些实施方案中,存储索引164存储树数据结构,其中一个树根据服务器同步服务112反映目录的最新表示,而另一个树根据客户端同步服务156反映目录的最新表示。客户端同步服务可起作用来确保通过从服务器同步服务112请求数据或将客户端设备150上的改变提交给内容管理系统110来使树结构匹配。

有时客户端设备150可能不具有可用的网络连接。在这种场景中,客户端同步服务156可监控用于内容项改变的所链接集合,并且使那些改变形成队列以供稍后在网络连接可用时与内容管理系统110同步。类似地,用户可手动开始、停止、暂停或恢复与内容管理系统110的同步。

客户端同步服务156可使与内容管理系统110上的特定用户账户相关联的所有内容同步。替代地,客户端同步服务156可使与内容管理系统110上的特定用户账户相关联的总内容中的一部分内容同步。选择性地仅使一部分内容同步可保留客户端设备150上的空间并且节省带宽。

在一些实施方案中,客户端同步服务156选择性地存储与特定用户账户相关联的一部分内容,并且将占位符内容项存储在客户端存储装置中以用于内容的其余部分。例如,客户端同步服务156可将其相应完整内容项的具有相同文件名、路径、扩展名、元数据的占位符内容项存储在内容管理系统110上,但是缺少完整内容项的数据。占位符内容项的大小可以为几个字节或更小,而相应的完整内容项可能显著地更大。在客户端设备150尝试访问内容项之后,客户端同步服务156可从内容管理系统110检索内容项的数据,并且将完整内容项提供给访问的客户端设备150。这种方法可提供显著的空间和带宽节省,同时仍然提供对内容管理系统110上的用户内容的完全访问。

协同特征

内容管理系统110的另一个特征是促进用户之间的协同。协同特征包括内容项共享、对内容项进行评论、对内容项进行协同作用、即时消息传送、提供关于内容项的存在状态信息和可见状态信息等。

共享

内容管理系统110可通过共享服务128来管理共享内容。通过提供到内容的链接来共享内容可包括使内容项可从与内容管理系统110进行网络通信的任何计算设备访问。然而,在一些实施方案中,链接可与由内容管理系统110和访问控制列表145实施的访问约束相关联。共享内容还可包括使用共享服务128链接内容以使内容管理系统110内的内容与至少一个另外的用户账户(除与内容项相关联的原始用户账户之外)共享,使得每个用户账户能够访问内容项。另外的用户账户可通过接受内容来获得对内容的访问,所述内容然后可通过web接口服务124或直接从与客户端设备150上的其账户相关联的目录结构内访问。可以平台无关的方式执行共享。也就是说,可跨具有不同类型、能力、操作系统等的多个客户端设备150共享内容。还可跨不同类型的用户账户共享内容。

为了在内容管理系统110内共享内容项,共享服务128可将一个用户账户标识符或多个用户账户标识符添加到访问控制列表数据库145中与内容项相关联的内容条目,因此从而准许所添加用户账户访问内容项。共享服务128还可将用户账户标识符从内容条目移除以约束用户账户对内容项的访问。共享服务128可将内容项标识符、被允许访问内容项的用户账户标识符以及访问级别记录在控制列表数据库145中。例如,在一些实施方案中,与单一内容条目相关联的用户账户标识符可关于相关联内容项对相应的用户账户标识符指定不同的许可权。

为了在内容管理系统110之外共享内容项,共享服务128可生成自定义网络地址(诸如统一资源定位符(url)),所述自定义网络地址允许任何web浏览器访问内容管理系统110中的内容项或集合而无需任何认证。为了实现这一点,共享服务128可在生成的url中包括内容标识数据,所述内容标识数据稍后可用于正确地标识并返回所请求内容项。例如,共享服务128可在生成的url中包括账户标识符和内容路径或内容项标识代码。在选择url之后,可将url中所包括的内容标识数据传输到内容管理系统110,所述内容管理系统110可使用接收的内容标识数据来标识适当的内容项并且返回所述内容项。

除生成url之外,共享服务128还可被配置来在访问控制列表数据库145中记录已创建内容项的url。在一些实施方案中,与内容项相关联的内容条目可包括指示是否已创建内容项的url的url标志。例如,url标志可以是布尔值,所述布尔值初始地设置为0或假以指示尚未创建内容项的url。共享服务128可在生成内容项的url之后将标志的值改变为1或真。

在一些实施方案中,共享服务128可使一组许可权与内容项的url相关联。例如,如果用户尝试通过url访问内容项,则共享服务128可向内容项提供一组受限许可权。受限许可权的实例包括如下约束:用户不能下载内容项、保存内容项、复制内容项、修改内容项等。在一些实施方案中,受限许可权包括仅允许从特定域(即,从公司网络域内)或者由与特定域相关联的账户(例如,与公司账户(例如,@acme.com))相关联的账户访问内容项的约束。

在一些实施方案中,共享服务128也可被配置来停用生成的url。例如,每个内容条目还可包括url活动标志,所述url活动标志指示是否应响应于来自生成的url的请求而返回内容。例如,如果url活动标志设置为1或真,则共享服务128仅可返回由生成的链接请求的内容项。因此,通过改变url活动标志的值,可容易地约束对已经针对其生成url的内容项的访问。这允许用户约束对共享内容项的访问,而无需移动内容项或删除生成的url。同样,共享服务128可通过再次将url活动标志的值改变为1或真来重新激活url。用户因此可容易地恢复对内容项的访问,而无需生成新的url。

在一些实施方案中,内容管理系统110可指定用于上传内容项的url。例如,具有用户账户的第一用户可请求这种url,将url提供给贡献用户,并且贡献用户可使用url将内容项上传到第一用户的用户账户。

团队服务

在一些实施方案中,内容管理系统110包括团队服务130。团队服务130可提供用于创建并管理定义的用户账户团队的功能性。可为公司创建团队以及子团队(例如,事业单位或项目团队等),并且向团队和子团队分配用户账户,或者可针对任何定义的用户账户组创建团队。团队服务130可向团队、私有用户账户文件夹和访问受限的共享文件夹提供公共的共享空间。团队服务还可向管理员提供管理接口以管理团队内的集合和内容项,并且可管理与团队相关联的用户账户。

授权服务

在一些实施方案中,内容管理系统110包括授权服务132。授权服务132确保尝试访问名称空间的用户账户具有访问所述名称空间的适当权限。授权服务132可从客户端应用程序152接收遵循访问命名空间的请求的令牌并且可将允许的能力返回给用户账户。对于具有多个访问级别的用户账户(例如,具有用户权限和管理员权限的用户账户),授权服务132也可需要明确的特权提升来避免管理员的意外动作。

存在状态和可见状态

在一些实施方案中,内容管理系统可提供关于与之共享内容项的用户如何交互或已经与内容项交互的信息。在一些实施方案中,内容管理系统110可报告与之共享内容项的用户当前正在查看内容项。例如,当客户端设备150正在访问内容项时,客户端协同服务160可通知通知服务117。通知服务117然后可向访问相同内容项的其他用户的所有客户端设备通知客户端设备150的用户相对于内容项存在。

在一些实施方案中,内容管理系统110可报告与共享内容项交互的用户的历史。协同服务126可查询数据源(诸如元数据数据库146和服务器文件日志148)以确定用户已经保存内容项,用户尚未查看内容项等,并且使用通知服务117来向其他用户散布这种状态信息,使得他们可知道当前正在或已经查看或修改内容项的人。

协同服务126可促进与内容相关联的评论,即使内容项本身不支持评论功能性。此类评论可存储在元数据数据库146中。

协同服务126可向用户始发和传输通知。例如,用户可在评论中提及另一个用户,并且协同服务126可向该用户发送他已经在评论中被提及的通知。各种其他内容项事件可触发通知,包括删除内容项、共享内容项等。

协同服务126可提供消息传送平台,由此用户可发送和接收即时消息、语音呼叫、电子邮件等。

协同内容项

在一些实施方案中,内容管理服务还可包括协同文档服务134,所述协同文档服务134可提供交互式内容项协同平台,由此用户可同时创建协同内容项,在协同内容项中进行评论并且管理协同内容项内的任务。协同内容项可以是用户可使用协同内容项编辑器创建和编辑的文件并且可包含协同内容项元素。协同内容项元素可包括协同内容项标识符、一个或多个作者标识符、协同内容项文本、协同内容项属性、交互信息、评论、共享用户等。协同内容项元素可存储为数据库实体,所述数据库实体允许搜索和检索协同内容项。多个用户可同时或在不同时间处访问、查看、编辑协同内容项并对协同内容项进行协同。在一些实施方案中,这可通过要求两个用户通过web接口访问内容项并且在所述web接口那里他们可同时处理内容项的相同副本来进行管理。

协同伴随接口

在一些实施方案中,客户端协同服务160可出于显示与呈现在客户端设备150上的内容项相关的信息的目的而提供本机应用程序伴随接口。在其中内容项由在客户端设备150上存储并执行的本机应用程序访问的实施方案中,其中内容项在客户端设备150的文件系统的指定位置中,使得内容项由内容应用程序152管理,本机应用程序可不提供任何本机方式来显示上述寻址的协同数据。在此类实施方案中,客户端协同服务160可检测到用户已经打开了内容项,并且可利用针对内容项的另外的信息(诸如协同数据)提供覆盖。例如,另外的信息可包括对内容项的评论、内容项的状态、先前或当前查看内容项的其他用户的活动。这种覆盖可警告用户改变可能会丢失,因为另一个用户当前正在编辑内容项。

在一些实施方案中,可使用公共或私有应用程序编程接口来访问上文论述的服务或存储装置/数据库中的一者或多者。

某些软件应用程序可以用户的名义通过api访问内容存储装置142。例如,当用户提供认证凭证以读取、写入、创建、删除、共享或以其他方式操纵内容时,软件包(诸如在客户端设备150上运行的应用程序)可以编程方式直接向内容管理系统110进行api调用。

用户可通过由web接口服务124生成和服务的web接口来查看或操纵存储在用户账户中的内容。例如,用户可在web浏览器中导航到由内容管理系统110提供的web地址。通过web接口对内容存储装置142中的内容作出的改变或更新(诸如上传内容项的新版本)可传播回与用户账户相关联的其他客户端设备。例如,各自具有其自己的客户端软件的多个客户端设备可与单一账户相关联,并且所述账户中的内容项可在多个客户端设备中的每一个之间同步。

客户端设备150可以用户的名义连接到内容管理系统110。用户可直接与客户端设备150交互,例如,当客户端设备150是台式计算机或膝上型计算机、电话、电视、物联网设备等时。替代地或另外地,客户端设备150可以用户的名义进行作用而无需用户物理访问客户端设备150,例如当客户端设备150是服务器时。

客户端设备150的一些特征由装配在客户端设备150上的应用程序启用。在一些实施方案中,应用程序可包括内容管理系统特定的组件。例如,内容管理系统特定的组件可以是独立应用程序152、一个或多个应用程序插件和/或浏览器扩展。然而,用户还可通过驻留在客户端设备150上并且被配置来与内容管理系统110通信的第三方应用程序(诸如web浏览器)来与内容管理系统110交互。在各种实现方式中,客户端应用程序152可呈现供用户与内容管理系统110交互的用户接口(ui)。例如,用户可通过与文件系统集成一体的文件系统资源管理器或通过使用web浏览器应用程序显示的网页来与内容管理系统110交互。

在一些实施方案中,客户端应用程序152可被配置来管理内容管理系统110的多于一个账户的内容并且使所述内容同步。在此类实施方案中,客户端应用程序152可保持登录到多个账户并且向多个账户提供正常服务。在一些实施方案中,每个账户可显现为文件系统中的文件夹,并且该文件夹内的所有内容项可与内容管理系统110同步。在一些实施方案中,客户端应用程序152可包括选择器以选择多个账户中的一个作为主要账户或默认账户。

虽然内容管理系统110被呈现为具有特定组件,但是本领域技术人员应当理解,系统100的体系结构配置仅仅是一种可能的配置并且具有更多或更少组件的其他配置是可能的。另外,服务可具有更多或更少的功能,甚至包括描述为与另一服务一起的功能性。此外,本文关于实施方案描述的特征可与关于另一个实施方案描述的特征组合。

虽然系统100被呈现为具有特定组件,但是本领域技术人员应当理解,系统100的体系结构配置仅仅是一种可能的配置并且具有更多或更少组件的其他配置是可能的。

客户端同步服务

图2示出根据一些实施方案的客户端同步服务156的实例。根据一些实施方案,客户端同步服务156可在图1的客户端设备中实现。然而,在其他实施方案中,客户端同步服务156可在另一个计算设备上实现。客户端同步服务156被配置来使对内容项的改变在内容管理系统与在其上运行客户端同步服务156的客户端设备之间同步。

客户端同步服务156可包括文件系统接口205、服务器接口210、树存储装置220、计划器225和调度器230。还可包括另外的或替代性组件。在下文关于图2论述客户端同步服务156及其组件的高级描述。然而,贯穿全文论述客户端同步服务156及其组件的另外的细节和实施方案。

文件系统接口205被配置来处理对客户端设备的本地文件系统上的内容项的改变并且更新本地树。例如,文件系统接口205可与图1的客户端同步服务156通信以检测对客户端设备的本地文件系统上的内容项的改变。也可通过图1的客户端应用程序152来进行并检测改变。文件系统接口205可对本地树进行更新。可基于对客户端设备上的内容项的改变(新的、删除的、修改的、复制的、重命名的或移动的内容项)来进行对本地树的更新。

服务器接口210被配置来帮助处理在内容管理系统的远程存储装置处对内容项的远程改变并且更新远程树。例如,服务器接口210可与图1的服务器同步服务112通信,以使对内容项的改变在客户端设备150与内容管理系统110之间同步。可检测对内容管理系统110处的内容项的改变(新的、删除的、修改的、复制的、重命名的或移动的内容项),并且可对远程树进行更新以反映内容管理系统110处的改变。

树存储装置220被配置来存储并维持由客户端同步服务156使用的树数据结构。例如,树存储装置220可存储本地树、同步树和远程树。根据一些实施方案,树存储装置220可将树数据结构存储在持久性存储器(例如,硬盘或其他辅助存储设备)中以及主存储器(例如,ram或其他主存储设备)中,以便减少等待时间和响应时间。例如,在客户端设备或客户端同步服务156启动时,树数据结构可从持久性存储器中检索并且加载到主存储器中。树存储装置220可访问和更新主存储器上的树数据结构,并且在关闭客户端设备或客户端同步服务156之前,树存储装置220可将更新的树数据结构存储在持久性存储器上。因为主存储器的成本昂贵并且在大多数客户端设备上通常受大小限制,所以实现另外的技术改进以减少树数据结构在主存储器上的占用空间。这些技术解决方案在下文中进一步描述。

计划器225被配置来基于树数据结构的状态检测与内容管理系统相关联的服务器状态和与客户端设备相关联的文件系统状态之间的差异。例如,计划器225可确定在远程树与同步树之间是否存在差异。远程树与同步树之间的差异指示对存储在内容管理系统处的一个或多个内容项远程地执行的动作已经致使服务器状态和文件系统状态不同步。类似地,计划器225也可确定在本地树与同步树之间是否存在差异。本地树与同步树之间的差异指示对存储在客户端设备上的一个或多个内容项本地执行的动作已经致使服务器状态和文件系统状态不同步。如果检测到差异,则计划器225生成使树数据结构同步的一组操作。

在一些场景中,基于远程树与同步树之间的差异生成的一组操作和基于本地树与同步树之间的差异生成的一组操作可发生冲突。计划器225也可被配置来将两组操作合并成单一合并的操作计划。

调度器230被配置来采取生成的操作计划并且管理那些操作的执行。根据一些实施方案,调度器230将操作计划中的每个操作转换成需要执行以便执行所述操作的一系列一个或多个任务。在一些场景中,一些任务可能变得过时或不再相关。调度器230被配置来标识那些任务并且取消它们。

树数据结构

图3示出根据各种实施方案的树数据结构的实例。树数据结构可存储在客户端设备处并且由客户端同步服务(诸如图2中的客户端同步服务156)管理。在图3中,示出了树数据结构,所述树数据结构包括远程树310、同步树330和本地树350。

远程树310表示服务器状态或从客户端设备(例如,在内容管理系统的服务器上)远程地存储的内容项的状态。本地树350表示文件系统状态或本地存储在客户端设备上的对应的内容项的状态。同步树330表示本地树和远程树的合并基础。合并基础可被认为是本地树和远程树的共同祖先,或者本地树与远程树之间最后已知的同步状态。

每个树数据结构(例如,远程树310、同步树330或本地树350)可包括一个或多个节点。每个节点可具有一个或多个子节点,并且父级-子级关系由边表示。例如,远程树310包括节点312和314。节点312是节点314的父级,而节点314是节点312的子级。这种父级-子级关系由边316表示。根节点(诸如根节点312)不具有父节点。叶节点(诸如节点314)不具有子节点。

树数据结构中的每个节点可表示内容项(例如,文件、文档、文件夹等)。例如,根节点312可表示与内容管理系统相关联的根文件夹,并且节点314可表示位于该根文件夹中的文件(例如,名为“foo.txt”的文本文件)。树数据结构中的每个节点可包含数据,例如像指定内容项的父节点的文件标识符的目录文件标识符(“dirfileid”)、用于内容项的文件名、用于内容项的文件标识符以及用于内容项的元数据。

如上所述,当所有3个树(例如,远程树310、同步树330和本地树350)相同时,客户端同步服务可确定客户端设备的服务器状态和文件系统状态同步。换句话讲,当树的树结构和它们表达的关系相同并且它们的节点中所包含的数据也相同时,树被同步。相反,如果3个树不相同,则这些树不同步。在图3所示的示例性场景中,远程树310、同步树330和本地树350被示出为相同并且同步,并且因此,服务器状态和文件系统状态同步。

使用树数据结构来跟踪改变

图4示出根据各种实施方案的树数据结构的实例。与图3所示的树数据结构一样,图4所示的树数据结构(包括远程树410、同步树430和本地树450)可存储在客户端设备处并且由客户端同步服务(诸如图2中的客户端同步服务156)管理。在图4中,示出树数据结构。

图4示出在先前同步状态(诸如图3所示的场景)之后的场景,对树中所表示的内容项执行另外的动作以修改内容项,使得树不再同步。同步树430维持先前已知的同步状态的表示并且可由客户端同步服务使用以标识服务器状态与文件系统状态之间的差异以及生成供内容管理系统和/或客户端设备执行以收敛,使得服务器状态和文件系统状态同步的操作。

例如,用户(访问内容项的与同客户端设备相关联的用户相同的用户或不同用户)可对由内容管理系统存储的“foo.txt”内容项进行修改。该内容项由远程树410中的节点414表示。远程树410中所示的修改是移除(例如,将内容项从由内容管理系统管理的空间中移除)或删除foo.txt内容项。这些修改可在例如另一个客户端设备上执行,并且然后同步到内容管理系统,或者通过连接到内容管理系统的web浏览器执行。

当在内容管理系统上进行改变时,内容管理系统生成指定所进行的改变的修改数据,并且将修改数据传输到客户端设备上的客户端同步服务。例如,使用推送模型,在所述推送模型中内容管理系统可单向地将改变传输或“推送”到客户端设备。在其他实现方式中,拉动模型,在所述拉动模型中服务器响应于客户端设备的请求而发送改变。另外,涉及长拉动的混合模型,在所述混合模型中客户端设备发起请求,但保持连接打开一定时间段,因此内容管理系统可在连接活动时根据需要推送另外的改变。客户端同步服务基于修改数据来更新表示由内容管理系统存储的内容项的服务器状态的远程树。例如,在远程树410中,表示foo.txt内容项的节点414被示出为已删除。

客户端同步服务可标识远程树410与同步树430之间的差异,并且因此确定对在内容管理系统处的内容项的修改已经致使服务器状态和文件系统状态不再同步。客户端同步服务可进一步针对存储在客户端设备上的内容项生成并执行一组或一系列操作,所述一组或一系列操作被配置来使服务器状态和文件系统状态收敛以使得它们将同步。

另外地或替代地,用户(访问内容项的与同内容管理系统处的修改相关联的用户相同的用户或不同用户)可对本地存储在客户端设备上的与内容管理系统相关联的内容项进行修改。例如,用户可向“/root”文件夹添加文件夹“/bar”并且向“/bar”文件夹添加“hi.doc”文档。

当在客户端设备上进行改变时,客户端设备(例如,图1的客户端同步服务156或客户端应用程序152)生成指定所进行的改变的修改数据。客户端同步服务基于修改数据来更新表示存储在客户端设备上的内容项的文件系统状态的本地树。例如,在本地树450中,节点452和节点454被示出为已添加。节点452和节点454分别表示“/bar”文件夹和“hi.doc”文档。

客户端同步服务可标识本地树450与同步树430之间的差异,并且因此确定对在客户端设备处的内容项的修改已经致使服务器状态和文件系统状态不再同步。客户端同步服务可进一步针对由内容管理系统存储的内容项生成一组或一系列操作,所述一组或一系列操作被配置来使服务器状态和文件系统状态收敛以使得它们将同步。这些操作可被传输到内容管理系统以供执行。

如图4所示,对存储在客户端设备上的内容项和由内容管理系统存储的内容项的修改可基本上同时或在特定时间段内发生。这些修改可反映在树数据结构中并且由客户端同步服务使用以并行生成用于客户端设备和用于内容管理系统的操作。然而,在其他场景中,修改可不必在同一时间段内发生,并且可以按需的方式生成操作。此外,尽管图4示出用于添加内容项和删除内容项的场景,但是还支持其他类型的修改,诸如编辑、重命名、复制或移动内容项。

根据各种实施方案,标识两个树数据结构之间的差异并且生成操作可涉及检查两个树数据结构中的每个节点并且确定是否已经对节点执行动作。动作可包括例如添加节点、删除节点、编辑节点或移动节点。这些动作然后可用于生成被配置来使服务器状态和文件系统状态收敛的操作。

例如,如果两个树数据结构是同步树和远程树,则客户端同步服务可通过例如请求同步树中所有节点的文件标识符来标识同步树中的每个节点。对于同步树中的每个节点或所述节点的文件标识符,客户端同步服务可确定所述节点或所述文件标识符是否也在远程树中。在远程树中没有发现同步树中的节点或文件标识符可指示已经将节点从由远程树表示的服务器状态中删除。因此,客户端同步服务可确定删除动作在远程树上已发生。如果在远程树中发现节点或所述节点的文件标识符,则客户端同步服务可检查远程树中的节点是否已被编辑或移动。

为了确定远程树中的节点是否已相对于同步树中的节点进行编辑,客户端同步服务可将同步树中节点的元数据与远程树中对应的节点(例如,具有相同文件标识符的节点)的元数据进行比较。元数据可包括可用于确定由节点表示的内容项是否已经被编辑的信息。例如,元数据可包括基于内容项或其一部分中的数据生成的一个或多个哈希值。另外地或替代地,元数据可包括内容项的大小值、最后修改的值或其他值。可将同步树中的节点的元数据与远程树中的节点的元数据进行比较。如果元数据不匹配,则对内容项的编辑在由远程树表示的服务器状态下可能已编辑。因此,客户端同步服务可确定对于远程树上的节点已发生编辑动作。如果元数据匹配,则编辑可能没有发生。

为了确定远程树中的节点是否已移动,客户端同步服务可将同步树中节点的位置与远程树中对应的节点(例如,具有相同文件标识符的节点)的位置进行比较。位置可包括例如节点所位于的路径、文件名和/或指定节点的父级的文件标识符的目录文件标识符(“dirfileid”)。如果位置匹配,则移动可能没有发生。另一方面,如果位置不匹配,则内容项的移动在由远程树表示的服务器状态下可能已发生。因此,客户端同步服务可确定对于远程树上的节点已发生移动动作。

为了确定是否已将节点添加到远程树,客户端同步服务可标识在同步树中未发现的远程树中的任何节点或文件标识符。如果节点或文件标识符在远程树中发现而在同步树中没有发现,则客户端同步服务可确定该节点的添加动作在表示服务器状态的远程树上已发生。

尽管关于同步树和远程树对上述实例进行了描述,但是在其他实施方案中,同步树和本地树可发生类似的过程,以便标识同步树与本地树之间的差异并且确定哪些动作在表示文件系统状态的本地树上已发生。

使用树数据结构的同步

图5示出根据本主题技术的各种实施方案的用于使用树数据结构来使服务器状态和文件系统状态同步的示例性方法。尽管本文描述的方法和过程可以特定次序与某些步骤和操作一起示出,但是除非另有说明,否则以类似或替代性次序或并行执行的另外的、更少或替代性步骤和操作在各种实施方案的范围内。方法500可由在客户端设备上运行的系统(例如像图2的客户端同步服务156)来实现。

系统被配置来标识表示由内容管理系统存储的内容项的服务器状态的远程树、表示存储在客户端设备上的对应的内容项的文件系统状态的本地树与表示服务器状态与文件系统状态之间已知的同步状态的同步树之间的差异。基于这些差异,可生成一组操作,所述一组操作如果被执行,则被配置来使服务器状态和文件系统状态朝向三个树数据结构将相同的同步状态收敛。

例如,在操作505处,系统可接收针对由内容管理系统存储或存储在客户端设备上的内容项的修改数据。在操作510处,修改数据可用于更新远程树或本地树。

修改数据指定与内容管理服务相关联的一个或多个内容项发生了何种改变。因此,可从内容管理系统或从客户端设备(例如,从在图1中的客户端设备150上运行的客户端应用程序152)接收修改数据。从内容管理系统接收的修改数据可被称为服务器修改数据。服务器修改数据指定内容管理系统对一个或多个内容项进行了何种改变,并且在操作510处可用于更新远程树。从客户端设备接收的修改数据可被称为客户端修改数据。客户端修改数据指定对客户端设备上的一个或多个内容项进行了何种改变,并且在操作510处可用于更新本地树。

在操作515处,系统可确定由内容管理系统存储的内容项的服务器状态和存储在客户端设备上的内容项的文件系统状态是否同步。因为本地树和远程树表示文件系统状态和服务器状态并且不断更新以跟踪发生在内容管理系统和客户端设备处的改变,所以确定服务器状态和文件系统状态是否同步可通过将本地树和/或远程树与同步树进行比较以发现树之间的差异来完成。发现树之间的差异的这个过程有时被称为使树“差异化”。

根据一些实施方案和场景,确定服务器状态和文件系统状态是否同步可包括标识远程树与同步树之间的差异和/或标识本地树与同步树之间的差异中的一者或多者。远程树与同步树之间的差异可指示对由内容管理系统存储的内容项的改变发生,所述改变可能不会反映在客户端设备处。类似地,本地树与同步树之间的差异可指示对在客户端设备处存储的内容项的改变发生,所述改变可能不会反映在内容管理系统处。

如果树之间不存在差异,则服务器状态和文件系统状态同步,并且不需要同步动作。因此,方法可返回至操作505并且等待新修改数据。另一方面,如果检测到差异,则在操作520处,系统可生成被配置来使服务器状态和文件系统状态收敛的一组操作。

生成的所述一组操作取决于检测到的一个或多个差异。例如,如果两个树之间的差异是添加的内容项,则生成的所述一组操作可包括检索所述添加的内容项并且添加它。如果两个树之间的差异是内容项的删除,则生成的所述一组操作可包括删除内容项。根据一些实施方案,所述一组操作还可包括多次检查以确保维持树约束。如将在下文进一步描述,所述一组操作可能与服务器状态、文件系统状态或未决执行的其他操作的当前状态冲突。因此,系统还可在前进之前解决这些冲突。

如上所述,如果远程树与同步树之间存在差异,则对由内容管理系统存储的内容项的改变可发生,所述改变可能不会反映在客户端设备处。因此,在这种场景中,系统可生成一组客户端操作,所述一组客户端操作被配置来对存储在客户端设备上的内容项进行操作以使服务器状态和文件系统状态收敛,并且在操作525处可将该组客户端操作提供给客户端设备以供执行。

类似地,如果本地树与同步树之间存在差异,则对在客户端设备处存储的内容项的改变可发生,所述改变可能不会反映在内容管理系统处。因此,在这种场景中,系统可生成一组服务器操作,所述一组服务器操作被配置来对由内容管理系统存储的内容项进行操作以使服务器状态和文件系统状态收敛,并且在操作525处可将该组服务器操作提供给内容管理系统以供执行。在一些情况下,两种情况都可能是正确的,并且一组客户端操作和一组服务器操作可被生成并且在操作525处提供给它们预期的接收者。

一旦将所述一组或多组操作提供给一个或多个预期的接收者,方法就可返回至操作505并且等待新修改数据。所述一组或多组操作可提供朝向服务器状态和文件系统状态的收敛的一个或多个步骤,或者提供使服务器状态和文件系统状态同步所需的所有步骤。例如,内容管理系统可接收所述一组服务器操作并且对由内容管理系统存储的内容项执行所述一组服务器操作。所述一组服务器操作的这种执行引起对由内容管理系统存储的内容项的改变,所述改变在服务器修改数据中被检测和指定,所述服务器修改数据被传输回至系统。然后,系统可更新远程树并且确定服务器状态和文件系统状态是否同步。

客户端设备可接收所述一组客户端操作并且对存储在客户端设备上的内容项执行所述一组客户端操作。所述一组客户端操作的这种执行引起对存储在客户端设备上的内容项的改变,所述改变在客户端修改数据中被检测和指定,所述客户端修改数据被传递至系统。然后,系统可更新本地树并且确定服务器状态和文件系统状态是否同步。方法500的这些操作可继续直到服务器状态和文件系统状态同步。

方法500的操作关于客户端侧和服务器侧(例如,本地树和远程树、文件系统状态和服务器状态、一组客户端操作和一组服务器操作、客户端修改数据和服务器修改数据)进行了描述。在各种实施方案中,与两侧相关联的操作可并行地、顺序地、与另一侧隔离地或组合地发生。

如将进一步详细论述,根据一些实施方案,在提供操作用于执行之前,系统可检查操作以确定它们是否符合一组规则或不变量。如果操作违反规则,则系统执行与违反规则相关联的解决过程。

另外,根据一些实施方案,系统(例如,图2中的客户端同步服务156的调度器230)可管理所述一组操作的执行。例如,所述一组操作中的每个操作可与任务、执行线程、一系列步骤或指令相关联。系统可被配置来执行任务、线程、步骤或指令并且与客户端设备和/或内容管理系统对接以执行所述一组操作并且使服务器状态和文件系统状态收敛。

冲突处置

如上文关于图5所描述,同步树与远程树之间的差异被标识并且用于生成被配置来使服务器状态和文件系统状态收敛的一组客户端操作。然而,在一些情况下,所述一组客户端操作可与本地树的当前状态冲突。类似地,同步树与本地树之间的差异被标识并且用于生成被配置来使服务器状态和文件系统状态收敛的一组服务器操作。然而,所述一组服务器操作可与远程树的当前状态冲突。另外地或替代地,所述一组客户端操作和所述一组服务器操作可彼此冲突或违反由系统维持的另一规则或不变量。因此,本主题技术的各种实施方案通过解决这些冲突来提供另外的技术改进。

例如,图2的客户端同步服务156中的计划器225可标识一组操作(例如,所述一组客户端操作或所述一组服务器操作)中与规则冲突的操作。用于标识冲突的每个规则也可与冲突的解决方案相关联。客户端同步服务可基于冲突的解决方案来更新所述一组操作,或者可通过执行与冲突的解决方案相关联的操作,之后提供所述一组操作以供执行来解决冲突。

图6示出根据本主题技术的各种实施方案的用于在使用树数据结构来使服务器状态和文件系统状态同步时解决冲突的示例性方法600。尽管本文描述的方法和过程可以特定次序与某些步骤和操作一起示出,但是除非另有说明,否则以类似或替代性次序或并行执行的另外的、更少或替代性步骤和操作在各种实施方案的范围内。方法600可由在客户端设备上运行的系统(例如像图2的客户端同步服务156)来实现。

在操作620处,系统可接收被配置来使服务器状态和文件系统状态收敛的一组操作。所述一组操作可以是例如所述一组客户端操作、所述一组服务器操作或关于图5的方法500生成和描述的一组组合操作。

在操作650处,系统基于一组规则来标识所述一组操作中的一个或多个违规。所述一组规则可由图2中的客户端同步服务156存储并且针对要解决的操作指定多个约束、不变量或冲突。所述一组规则可应用于树数据结构并且帮助控制同步行为。所述一组规则中的每个规则也可与违反该规则的解决方案相关联或以其他方式链接到所述解决方案。例如,解决方案可包括更改所述一组操作中的一个或多个操作、移除一个或多个操作、添加一个或多个操作、对服务器状态或文件系统状态进行一个或多个另外的动作或动作的组合。

对于一组操作中的每个操作,系统可确定是否违反所述一组规则中的任何规则。如果违反规则,则系统标识违反的解决方案,并且在操作655处执行所述解决方案。解决方案可包括诸如如下的动作:修改所述一组操作中的一个或多个操作、移除或添加一个或多个操作或对服务器状态或文件状态进行另外的动作。

一旦执行了解决方案动作,系统就可在操作660处基于解决方案和所述一组操作来生成一组解决或重建基础操作,并且在操作665处将所述一组解决操作提供给适当的实体以供执行。例如,可将所述一组解决操作提供给图2中的客户端同步服务156的调度器230以用于管理执行。替代地,如果所述一组操作是一组客户端操作,则可将所述一组解决操作提供给客户端设备。如果所述一组操作是一组服务器操作,则可将所述一组解决操作提供给内容管理服务。另外,图6的方法600可顺序地、并行地或以各种不同的次序基于一组客户端操作和一组服务器操作执行。

根据一些实施方案,每种类型的操作可与相同规则或一组不同规则相关联。例如,操作类型可包括例如添加内容项、删除内容项、编辑内容项、移动内容项、重命名内容项等。所述一组操作可由各自属于上述操作类型中的一个的操作组成。每个操作类型可与特定的一组规则相关联。

出于说明目的,针对“添加”操作类型的一组规则可包括诸如如下的规则:内容项的文件标识符在树中必须是唯一的(例如,树中的两个节点都不能具有相同的文件标识符),指定内容项的父节点的文件标识符的目录文件标识符(“dirfileid”)必须存在于相对的树数据结构中,并且用于内容项的dirfileid和文件名组合未在相对树中使用。

如在此使用的相对树是指表示相对实体的状态的树数据结构。例如,被配置来在客户端设备上操作的一组客户端操作以及对客户端设备上的文件系统所产生的改变将反映在本地树中。因此,针对所述一组客户端操作的相对树是远程树。类似地,一组服务器操作被配置成传输至内容管理系统以供执行并且对服务器状态所产生的改变将反映在远程树中。因此,针对所述一组服务器操作的相对树是本地树。

图7示出根据各种实施方案的示出违反添加操作规则的树数据结构的实例。树数据结构包括远程树710、同步树750和本地树770。当引用本地树770时,远程树710可被认为是相对树。另一方面,当引用远程树710时,本地树770可被认为是相对树。图7示出在远程树710中添加由节点712表示的内容项的一组操作。例如,客户端同步服务可将远程树710与同步树750进行比较,标识差异,并且生成包括添加节点712的一组操作。节点712与为4的fileid、为3的dirfileid(其引用父节点714,所述父节点714是节点712的父级)以及“hi”的文件名相关联。父节点714与为3的fileid、为1的dirfileid(其引用根节点716,所述根节点716是节点714的父级)以及“foo”的文件名相关联。

客户端同步服务可执行图6的方法600,并且确定针对节点712的添加操作违反了针对“添加”操作类型的“内容项的目录文件标识符(“dirfileid”)必须存在于相对的树数据结构中”规则。这在图7中通过本地树770不具有文件id为3的节点来示出,所述节点引用节点712的父节点714。例如,这可在远程树710与同步树750之间的差异被确定并且生成一组操作之后,将对应于节点714的“foo”节点从相对树中移除时发生。

与该规则相关联的解决方案可包括从同步树750中删除从本地树770缺少的节点以使同步树750和本地树770同步并且使远程树710和同步树750重新差异化(例如,发现远程树710与同步树750之间的差异)。在图7所示的场景中,同步树750中的节点754将被移除758,并且差异化操作将开始标识远程树710与同步树750之间的差异。这将导致在所述一组操作中包括对节点714的添加操作以及针对节点712的添加操作。

类似地,违反针对“添加”操作类型的“内容项的文件标识符在树中必须是唯一的”规则可通过包括以下的操作来解决:从内容管理系统请求用于要添加的节点的新文件id,以及当添加节点时使用新文件id。违反针对“添加”操作类型的“内容项的dirfileid和文件名组合未在相对树中使用”规则可通过包括以下的操作来解决:通过与两个节点相关联的元数据检查内容项是否相同。如果内容项相同,则可能已在其他动作中添加了要添加的内容项。如果内容项不相同,则可重命名要添加的内容项的文件名。例如,要添加的内容项的文件名可附加有文本“(冲突版本)”。

逐步进行的计划器

尽管图3、图4和图7所示的各种树数据结构包含相对较少数目的节点并且结构相对简单,但是由系统支持的树数据结构可能大得多且复杂并且具有多个级别,并且每个级别处潜在地具有大数目的节点。因此,在操作期间存储树数据结构所需的存储器用量可能相当大,并且对树数据结构进行操作所需的计算时间和资源可能相当大。例如,发现远程树与同步树和/或本地树与同步树之间的差异并且生成使远程树和同步树和/或本地树和同步树收敛所需的操作可能需要大量的存储器、时间和其他计算资源。

不幸地,这些计算资源是有限的。例如,客户端设备可具有有限数量的可用存储器,并且使树差异化并且生成操作所需的时间长度可阻碍客户端设备、客户端应用程序或由内容管理系统提供的内容管理服务的可用性。此外,使服务器状态和文件系统状态收敛所需的时间越长,对任一状态的中间改变就越可能使正在计算或执行的所述一组操作和/或目标同步状态过时。因此,本主题技术的各种实施方案通过逐步地收敛服务器状态和文件系统状态以及表示它们的树数据结构来提供另外的技术改进。

图8示出根据本主题技术的各种实施方案的用于使服务器状态和文件系统状态逐步地收敛的示例性方法800。尽管本文描述的方法和过程可以特定次序与某些步骤和操作一起示出,但是除非另有说明,否则以类似或替代性次序或并行执行的另外的、更少或替代性步骤和操作在各种实施方案的范围内。方法800可由在客户端设备上运行的系统(例如像图2的客户端同步服务156)来实现。

在操作805处,系统可接收可用于更新远程树或本地树的修改数据。例如,可从内容管理系统接收服务器修改数据,所述服务器修改数据指定与由内容管理系统存储的一个或多个内容项相关联的修改或其他动作(例如,编辑、添加、删除、移动或重命名)。服务器修改数据可用于更新远程树,所述远程树表示由内容管理系统存储的内容项的服务器状态。类似地,客户端修改数据可从客户端设备(例如,客户端应用程序)接收并且指定与存储在客户端设备上的一个或多个内容项相关联的修改或其他动作。客户端修改数据可用于更新本地树,所述本地树表示存储在客户端设备上的内容项的文件系统状态。

基于指定与内容项相关联的修改的接收的修改数据,在操作810处,系统可标识对应于修改的内容项的节点并且将所述节点添加到修改的内容项列表(例如,将与节点相关联的文件标识符添加到修改的内容项列表)。在系统前进至方法800的下一阶段之前,操作805和810可连续发生达一定时间。例如,另外的修改数据可被接收并且用于更新由系统管理的树并且将节点添加到修改的内容项列表。

为了使服务器状态和文件系统状态逐步地收敛,在操作815处,系统获取修改的内容项列表中的每个节点并且确定如何修改节点(例如,哪些动作与节点相关联)。在一些实施方案中,修改数据可指定对节点的修改。然而,在其他实施方案中,系统可基于远程树与同步树的比较和/或本地树与同步树的比较来确定对节点的修改。例如,修改可包括添加节点、删除节点、编辑节点或移动节点。

对于修改的内容项列表中的每个节点或所述节点的文件标识符,系统可执行一系列检查以确定对节点执行何种修改(如果有的话)。例如,系统可确定文件标识符是否在同步树中但不在远程树中。在远程树中没有发现同步树中的文件标识符可指示已经将节点从由远程树表示的服务器状态中删除。因此,客户端同步服务可确定对节点的删除修改在远程树上已发生。类似地,系统还可确定文件标识符是否在同步树中但不在本地树中。在本地树中没有发现同步树中的文件标识符可指示已经将节点从由本地树表示的文件系统状态中删除。因此,客户端同步服务可确定对节点的删除修改在本地树上已发生。

为了确定是否已对节点执行编辑修改,系统可将同步树中节点的元数据与远程树中对应的节点(例如,具有相同文件标识符的节点)的元数据进行比较。元数据可包括可用于确定由节点表示的内容项是否已经被编辑的信息。例如,元数据可包括基于内容项或其一部分中的数据生成的一个或多个哈希值。另外地或替代地,元数据可包括内容项的大小值、最后修改的值或其他值。如果元数据不匹配,则对内容项的编辑在由远程树表示的服务器状态和/或由本地树表示的文件系统状态下可能已编辑。因此,系统可确定对于远程树和/或本地树上的节点已发生编辑动作。

为了确定远程树中的节点是否已移动,系统可将同步树中节点的位置与远程树和/或本地树中对应的节点(例如,具有相同文件标识符的节点)的位置进行比较。位置可包括例如节点所位于的路径、文件名和/或指定节点的父级的文件标识符的目录文件标识符(“dirfileid”)。如果位置匹配,则移动可能没有发生。另一方面,如果位置不匹配,则内容项的移动在远程树或本地树中可能已发生。因此,客户端同步服务可确定对于远程树和/或本地树上的节点已发生移动动作。

为了确定是否已将节点添加到远程树,系统可确定修改的内容项列表中的文件标识符是在远程树中还是在本地树中,但不是在同步树中。如果在远程树或本地树中发现文件标识符,而在同步树中没有发现文件标识符,则系统可确定已对于该节点发生添加修改。

一旦对修改的内容项列表中的节点的一个或多个修改被确定,则在操作820处,系统可确定那些修改中的任一个是否具有相依性。如将关于图9进一步示出,当例如不首先发生另一修改就无法执行所述修改时,对节点的修改具有相依性。

如果修改不具有相依性,则在操作825处,系统将修改添加到不受阻止的动作列表。如果修改具有相依性,则在操作830处所述修改被暂时阻止,并且如果不首先处理另一修改就不能执行。因此,过程返回至操作805以等待另外的修改。在处理修改中的每一个之后,系统可从修改的内容项列表中清除与修改相关联的文件标识符。

图9示出根据各种实施方案的树数据结构的实例。图9所示的树数据结构可存储在客户端设备处并且由系统(诸如图2中的客户端同步服务156)管理。出于说明的目的,在图9中仅示出和描述了远程树910和同步树950。类似的操作和描述也可应用于本地树。

远程树910包括文件标识符为1的根节点912、文件标识符为5且文件名为“foo”的节点914、文件标识符为6且文件名为“bar”的节点916以及文件标识符为7且文件名为“bye”的节点918。同步树包括文件标识符为1的根节点952。

基于图9所示的树数据结构,系统可标识出在操作810处文件标识符为5、6和7的节点已被修改,并且将这些节点添加到修改的内容项列表,如由图9中的参考标号980所示。在操作815处,系统确定对修改的内容项列表中的节点的修改列表。如由远程树910与同步树950的比较可见,节点914、916和918已添加到远程树910。更具体地,如图9中的参考标号982所示,文件标识符为6且名为“bar”的节点916已作为子级添加到文件标识符为5的节点914。这由参考标号982中的“add(6,5,bar)”条目表示。文件标识符为7且名为“bye”的节点918已作为子级添加到文件标识符为5的节点914。这由参考标号982中的“add(7,5,bye)”条目表示。文件标识符为5且名为“foo”的节点914已作为子级添加到文件标识符为1的根节点912。这由参考标号982中的“add(5,/root,foo)”条目表示。

在操作820处,系统确定节点914的添加修改不具有相依性,并且因此未受到阻止。因此,在操作825处,系统将与节点914相关联的修改(例如,由参考标号982中的“add(5,/root,foo)”条目表示的修改)添加到不受阻止的动作列表。这在图9的附图标号984中可见。另一方面,由参考标号982中的“add(6,5,bar)”条目和“add(7,5,bye)”条目表示的针对节点916和918的修改取决于首先发生的由“add(5,/root,foo)”表示的修改。换句话讲,在添加节点914之前,不能添加节点916和/或节点918。因此,这些修改包括在由图9中的参考标号986示出的受阻止的动作列表中。

返回至图8的方法800,在操作835处,系统可从不受阻止的动作列表中选择一组修改并且基于选择的所述一组修改来生成一组操作。所述一组操作被配置来使服务器状态和文件系统状态收敛。生成的所述一组操作取决于从不受阻止列表中选择的所述一组修改。例如,如果选择的所述一组修改包括与图9中的节点914相关联的添加修改(例如,由参考标号984中的“add(5,/root,foo)”条目表示的修改),则生成的所述一组操作可包括从内容管理系统检索添加的内容项并且将其添加到客户端设备的本地文件系统。

根据一些实施方案,系统可从不受阻止的动作列表中选择所有修改以生成一组或多组操作。然而,在一些场景中,不受阻止列表中的修改数目可能相当高,并且处理所有修改所需的计算资源(例如,存储器和处理时间)相当大。为了减轻这些技术负担,系统可在不受阻止的动作列表中选择较小的一组修改,以便逐步地处理。例如,系统可选择第一个或前x个或第一或前x百分比的修改来生成操作。在过程的进一步迭代中,可处理不受阻止列表中的剩余修改。

在一些实施方案中,可对不受阻止列表中的修改进行排序以用于处理。可基于例如修改类型(例如,删除修改优先于添加修改)、与修改相关联的元数据(例如,对较小大小的内容项的添加修改优先于对较大大小的内容项的添加修改,对较大大小的内容项的删除修改优先于对较小大小的内容项的删除修改等)来对修改进行排序。

这些排序规则可由系统存储并且可被设计来实现用于内容同步的各种性能目标。例如,删除修改可优先于添加修改,以便在可添加新内容项之前为用户释放尽可能多的可能的有限存储空间。较小内容项的添加可优先于较大内容项,以便关于所添加的内容项的数目尽快地提供尽可能多的进步。

在操作835处,系统可将所述一组操作提供给内容管理系统和/或客户端设备。如上所述,与由内容管理系统执行的动作相关联的修改可能不会反映在客户端设备处。因此,在这种场景中,系统可生成一组客户端操作,所述一组客户端操作被配置来对存储在客户端设备上的内容项进行操作以使服务器状态和文件系统状态收敛,并且在操作835处可将该组客户端操作提供给客户端设备以供执行。

另一方面,与由客户端设备执行的动作相关联的修改可能不会反映在内容管理系统处。因此,在这种场景中,系统可生成一组服务器操作,所述一组服务器操作被配置来对由内容管理系统存储的内容项进行操作以使服务器状态和文件系统状态收敛,并且在操作835处可将该组服务器操作提供给内容管理系统以供执行。

在一些情况下,两种情况都可能是正确的,并且一组客户端操作和一组服务器操作可被生成并且在操作835处提供给它们预期的接收者。所述一组操作还可包括多次检查以确保维持树约束。例如,所述一组操作可解决如关于图6所论述的各种冲突或约束。

一旦将所述一组或多组操作提供给一个或多个预期的接收者,方法就可返回至操作805并且等待新修改数据。例如,关于图9所示的场景,所述一组操作可包括从内容管理系统检索与节点914相关联的内容项,并且将其添加到客户端设备的本地文件系统。这将导致在本地树(图9中未示出)和同步树950中添加对应于节点914的节点。在图8的过程800的下一次迭代中,由参考标号982中的“add(6,5,bar)”条目和“add(7,5,bye)”条目表示的节点916和节点918的添加修改不再被阻止,因为它们的父级,即,节点914已被添加到同步树。因此,在参考标号982中由“add(6,5,bar)”条目和“add(7,5,bye)”条目表示的节点916和节点918的添加修改可被添加到不受阻止的动作列表并且用于生成被配置来使服务器状态和文件系统状态收敛的一组或多组操作。

所述一组或多组操作可针对服务器状态和文件系统状态的逐步收敛提供一个或多个步骤。尽管实现逐步过程有时可能更加复杂,但是逐步过程可实现处理时间减少和所需的存储器减少。这些以及其他初始技术改进自然地导致了另外的技术改进。例如,因为处理时间减少,所以来自客户端设备或内容管理系统的另外的改变使得某些修改陈旧或过时的可能性也降低。

关于图9,出于说明的目的,内容项、修改、动作或文件标识符的各种分组被描述为列表。其他类型的数据结构也兼容。例如,不受阻止的动作列表可实现为b树数据结构,以便保持数据分类并且允许以对数时间进行搜索、按顺序访问、插入和删除。

调度器

在一些实施方案中,客户端同步服务可生成被配置来使服务器状态和文件系统状态的收敛一组或一系列操作,并且将这些操作提供给内容管理系统或客户端设备以供执行。然而,在一些场景中,客户端设备的文件系统上或内容管理系统上的改变可致使生成的所述一组操作在所述一组操作处于执行过程中时变得过时或陈旧。各种实施方案涉及提供对这些和其他技术问题的技术解决方案。例如,客户端同步服务可被配置来监控客户端设备的文件系统上或内容管理系统上的改变并且根据需要更新客户端设备和/或内容管理系统。此外,客户端同步服务可被配置来通过允许同时执行操作来提高性能并且减少处理时间。

根据一些实施方案,图2所示的客户端同步服务156的计划器225可生成由无序的一组操作组成的一个或多个操作计划。计划内的所有操作都没有相依性,并且因此能够以单独线程或以任何次序同时执行。根据一些实施方案,计划中的操作是可由内容管理系统和/或客户端设备采取的抽象指令,以便使状态和树数据结构收敛。示例性指令可包括远程或本地添加内容项、远程或本地删除内容项、远程或本地编辑内容项或远程或本地移动内容项。

图2所示的客户端同步服务156的调度器230可被配置来从计划器225接收操作计划,管理计划中的操作的执行,确定计划是否已被更新或改变并且管理更新或改变的计划的执行。例如,调度器230可与文件系统接口205和服务器接口210协作以执行实现计划中的操作所需的任务和步骤。这可包括从文件系统或内容管理系统接收确认,或者当没有网络连接时或当内容项被某种其他应用程序锁定时接收错误处置活动(诸如处置重试)。

每个操作可由称为任务的脚本或线程来实现。任务与相关联操作的应用程序协作,并且可包括实现操作所需的一个或多个步骤。例如,“本地添加操作”可指示内容项已被添加到客户端设备的本地文件系统,并且因此内容项应被添加在内容管理系统处以便使服务器状态和文件系统状态同步。因此,本地添加操作可与“本地添加任务”相关联,所述“本地添加任务”包括实现本地添加操作所需的一个或多个步骤。所述步骤可包括以下中的一项或多项:向内容管理系统通知新内容项,将内容项以一个或多个数据块上传至内容管理系统,确认内容管理系统已接收到所有数据块,确保内容项不被破坏,将内容项的元数据上传至内容管理系统,并且承诺将内容项添加到内容管理系统处的适当位置。

任务可开始执行,在等待其他事件完成时在明确定义的点处暂停,当事件发生时重新开始,并且最后终止。根据一些实施方案,调度器230被配置来取消、重新生成或替换任务。例如,基于对服务器状态或文件系统状态的改变,任务可在执行之前变得失效,并且调度器230可在失效任务被执行之前将其取消。

如上所述,计划器225可基于一组树数据结构(例如,远程树、同步树和本地树)来生成操作计划。随时间推移,计划器225基于树数据结构的状态来继续生成操作计划。如果树数据结构改变以反映服务器状态和文件系统状态的状态,则计划器225还可生成与先前计划不同的新的更新计划。调度器230执行由计划器225生成的每个操作计划。

在一些场景中,后续计划的操作的改变可致使意外的同步行为与执行过程中的先前计划中的操作发生冲突。例如,当正在执行第一计划中的操作时,操作中的一个或多个在第二计划中被取消(或不存在)。为了说明,图10示出示例性场景,其中在时间t1处,由远程树表示的服务器状态和由本地树表示的文件系统状态同步,如通过远程树、同步树和本地树全部匹配示出。基于该同步状态,计划器225可在t1处生成无操作的计划(例如,空计划),或者不生成操作计划。

客户端设备上的用户可从本地文件系统中删除内容项a,或者将内容项a从由客户端同步服务156管理的文件夹中移出,这通过在时间t2处将节点a从本地树中移除来反映。计划器225可在时间t2处基于树数据结构的状态来生成包括操作localdelete(a)的计划。调度器230可发起实现localdelete(a)操作所需的任务或步骤。这些步骤可包括将指令传输至内容管理系统以删除内容项a。

在将删除内容项a的指令传输至内容管理系统之后,客户端设备上的用户可撤消对内容项a的删除或将内容项a移动回至先前的位置。在时间t3处基于此新动作来更新本地树,并且计划器可生成无操作的空的新计划。树数据结构再次匹配,并且系统在时间t3处处于同步状态。

然而,因为将删除内容项a的指令传输至内容管理系统,所以内容管理系统将内容项a从服务器状态删除。尽管调度器230可尝试取消对内容项a的删除,但是指令可能已经由内容管理系统传输并完成。服务器中的该改变被传送至客户端同步服务器156,所述客户端同步服务器156通过在时间t4处删除节点a来更新远程树。计划器225可注意到远程树中的改变以及远程树与同步树之间的差异,并且确定在服务器状态下内容项a被移除。因此,计划器225将在时间t4处创建具有remotedelete(a)操作的计划。为了使服务器状态和文件系统状态同步,最终将内容项a从客户端设备和本地树中删除。

问题在于,将内容项a从服务器状态中移除,生成remotedelete(a)操作以及最终将内容项a从文件系统状态中移除都不是有意的并且往后(downtheline)可能会给用户带来进一步的问题。此外,在一些情况下,应用程序或过程也可访问内容项,并且意外的同步行为可引起一连串的另外的技术问题。各种实施方案涉及在使服务器状态与文件系统状态之间的内容项同步时防止意外的后果发生。

根据一些实施方案,当取消不再在操作计划中的失效操作的任务时,调度器230可在前进至发起其他任务的执行之前等待取消完成。例如,调度器230可在进行其他任务之前等待从客户端设备或内容管理系统接收取消的确认。调度器230可确定是否已发起任务,并且如果尚未发起任务,则调度器可取消任务并且确认任务不再等待执行。如果已发起任务,则确认可来自客户端设备或内容管理系统,并且通知调度器与已取消任务相关联的所有步骤都已撤消。根据一些实现方式,调度器230一旦发起任务就不允许取消任务。对于所有任务或任务或任务类型的某些子集(例如,向内容管理系统发送关于文件系统状态的更新以用于与服务器状态同步的提交任务),情况可能如此。

为了提高性能并且允许同时执行任务以及取消任务,调度器230还可被配置来基于第一操作计划与更新的第二操作计划之间的差异来管理任务的执行和取消。图11示出根据本主题技术的各种实施方案的两个操作计划的示例性维恩图1100表示。计划器225可利用第一组操作来生成计划11110,接收对树数据结构的更新,并且利用第二组操作来生成更新的计划21120。

计划11110和计划21120可共享多个共有操作,所述多个共有操作由维恩图1100的部分1130表示。计划11110和计划21120也可共享不共有的多个操作。例如,基于由计划器225检测到的对树结构的更新,在计划11110中不在计划21120中的操作失效并且不再是当前的。计划11110的这些失效操作由维恩图1100的部分1140表示。在计划21120中不在计划11110中的新操作由部分1150表示。表示计划11110与计划21120之间的差异和共性的部分1130、1140和1150中的每一个可包括无操作或许多操作,这取决于对树数据结构中所反映的服务器状态和文件系统状态的更新。

因为部分1140中的操作不再在最新计划中,所以调度器230可取消与这些操作相关联的任务。为了防止意外的同步行为,推迟与在计划2中不在计划1中(例如,在部分1150中)的操作相关联的任务,直到完成取消与部分1140中的操作相关联的任务为止。然而,因为每个计划中的操作被配置成能够同时执行,所以与由部分1130表示的计划1和计划2的相交部中的操作相关联的任务可与取消与部分1140中的操作相关联的任务同时执行,而无需等待它们完成。通过允许同时取消与部分1140相关联的任务和执行与部分1130相关联的任务,可实现更有效地使用可用的计算资源以及减少处理时间。

图12示出根据本主题技术的各种实施方案的用于管理操作计划改变的示例性方法。尽管本文描述的方法和过程可以特定次序与某些步骤和操作一起示出,但是除非另有说明,否则以类似或替代性次序或并行执行的另外的、更少或替代性步骤和操作在各种实施方案的范围内。方法1200可由在客户端设备上运行的系统(例如像图2的客户端同步服务156)来实现。

系统可被配置来从内容管理系统和/或客户端设备接收关于与内容管理服务相关联的内容项的更新。例如,系统可接收由内容管理服务存储的内容项的服务器修改数据,并且基于所述服务器修改数据来更新远程树。远程树表示由内容管理系统存储的内容项的服务器状态。系统还可接收针对存储在客户端设备上的内容项的客户端修改数据,并且基于所述客户端修改数据来更新本地树。本地树表示存储在客户端设备上的内容项的文件系统状态。

在操作1205处,系统可接收第一组操作,所述第一组操作被配置来使与内容管理系统相关联的服务器状态和与客户端设备相关联的文件系统状态收敛。例如,系统可标识同步树与远程树之间或同步树与本地树之间的差异,并且基于树之间的任何差异来生成所述第一组操作。同步树表示服务器状态与文件系统状态之间已知的同步状态。

系统可开始实现所述第一组操作。例如,在一些情况下,操作呈准备传输至内容管理系统和/或客户端设备以供执行的格式。在其他情况下,操作可转变成可由系统管理的一个或多个任务、脚本或执行线程。系统可根据任务、脚本或执行线程与内容管理系统和/或客户端设备对接,以便使服务器状态和文件系统状态收敛。

在这期间,系统可继续从内容管理系统和/或客户端设备接收关于与内容管理服务相关联的内容项的修改数据。基于所述修改数据,系统可更新远程树或本地树并且基于对树数据结构的更新来生成第二组操作。在操作1210处,系统可接收所述第二组操作。

在操作1215处,系统标识在所述第一组操作中不在所述第二组操作中的第一操作(如果有的话)。如果系统发现在所述第一组操作中不在所述第二组操作中的操作,则由于修改数据中所指定的改变,该操作可能失效且过时。因此,系统将在操作1220处发起取消第一操作。取消第一操作可包括多个步骤、用于这些步骤的多个确认接收以及大量的处理时间。

在操作1225处,系统标识包括在所述第一组操作和所述第二组操作两者中的第二操作(如果有的话)。如果系统发现所述第一组操作和所述第二组操作两者中的操作,则尽管具有修改数据中所指定的修改,该操作可能仍然无效。此外,由于两组操作中的操作被配置成能够相对于所述一组中的其他操作同时执行或以任何次序执行,因此当取消第一操作时第二操作可继续执行。因此,系统将在操作1230处发起执行第二操作,而无需等待第一操作完成取消。

在操作1235处,系统标识在所述第二组操作中但不在所述第一组操作中的第三操作(如果有的话)。如果系统发现在所述第二组操作中不在所述第一组操作中的操作,则由于修改数据中所指定的改变,该操作可能是新操作。为了防止意外的后果出现,系统将发起等待第一操作完成取消。在操作1240处,系统可确定第一操作已完成取消,并且因此在操作1245处发起执行第三操作。

树数据结构存储–文件名存储空间的减少

客户端同步服务156可将树数据结构(例如,远程树、同步树和本地树)存储在持久性存储设备(例如像硬盘、固态存储器或其他类型的计算机可读介质)上。为了提高性能,减少处理时间并且减少过时操作,客户端同步服务156可在启动时将树数据结构加载到存储器(例如,随机存取存储器或高速存储器的高速缓存)中并且对存储器中的树数据结构执行同步功能。数据容量在持久性存储设备上是有限的,并且这些数据资源的保存是重要的。数据容量甚至更加有限并且对于存储器而言是昂贵的,并且这些数据资源的保存至关重要。

取决于操作系统或客户端应用程序,内容项的文件名的大小可以为约1024字节,并且可能是节点中最大的数据组成部分。例如,对于一百万个节点,仅这些节点的文件名的大小可超过1gb。如上所述,客户端同步服务156被配置来帮助使服务器状态和文件系统状态同步,并且当所有本地树、同步树和远程树相等时,所述三个树反映出同步状态。因此,在将内容项的文件名存储在节点中时可能存在一些冗余。

本主题技术的各种实施方案旨在减少存储用于树数据结构的文件名所需的存储器量,并且通过减少文件名的重复来减小节点的大小。代替将文件名存储在节点中,客户端同步服务156被配置来将树数据结构中节点的文件名存储在文件名阵列中并且将对文件名的引用存储在节点中。因此,文件名在文件名阵列中存储一次,并且具有该文件名的内容项的任何节点可使用节点中所存储的引用来访问文件名。在一些实现方式中,对存储在节点中的文件名的引用可以是表示文件名在文件名阵列中的偏移、位置(location)或位置(position)的整数值。

图13示出根据本主题技术的各种实施方案的文件名阵列1310的图示。示出文件名阵列1310,所述文件名阵列1310存储文件名“pictures”、“a.jpg”和“documents”(未完全示出)。在文件名阵列1310中,“pictures”文件名示出在位置0处,“a.jpg”文件名示出在位置9处,并且“documents”文件名示出在位置16处。在文件名阵列1310中,分隔符1314(例如,空字符)使每个文件名分隔开。

因此,为了查找用于节点的文件名,客户端同步服务156可仅访问对存储在节点中的文件名的引用,所述引用表示用于节点的文件名在文件名阵列1310中的位置。客户端同步服务156可在文件名阵列1310中由引用指定的位置处检索内容项的文件名。例如,客户端同步服务156可在引用中所指定的位置处开始读取文件名并且当到达分隔符1314时停止。

在一些情况下,客户端同步服务156还可需要基于文件名查找引用。例如,当添加新节点或重命名节点时,客户端同步服务156可希望确定所述节点的文件名是否已存在于文件名阵列1310中。如果发现引用,则文件名存在并且可基于引用进行定位。因此,客户端同步服务156可使用对文件名的引用并且将引用存储在新节点或重命名节点中。如果未发现参考,则文件名在文件名阵列130中不存在,并且客户端同步服务156可将文件名添加到文件名阵列1310。

基于文件名对引用的查找通过使用哈希索引阵列来实现。图13示出根据本主题技术的各种实施方案的哈希索引阵列1350的图示。哈希索引阵列1350被配置来将对文件名的引用存储在各个位置处。特别地,基于文件名的哈希将对文件名的引用存储在哈希索引阵列1350中的位置处。在图13所示的一个实例中,基于所使用的哈希函数,文件名“pictures”的哈希可等于4。因此,对文件名“pictures”的引用存储在哈希索引阵列1350中的位置4处。该引用值是0,如上所述,所述引用值指定文件名“pictures”在文件名阵列1310中的位置。类似地,文件名“documents”的哈希可等于0。因此,对文件名“documents”的引用存储在哈希索引阵列1350中的位置0处。该引用值是16,如上所述,所述引用值指定文件名“documents”在文件名阵列1310中的位置。

在一些场景中,在两个文件名的哈希产生相同的哈希值的情况下可发生冲突。在图13所示的实例中,“a.jpg”的哈希值也可以是4。如果发生冲突,则客户端同步服务156可使用哈希索引阵列1350中的下一个可用位置。例如,由于对文件名“pictures”的引用存储在哈希索引阵列1350中的位置4处,因此客户端同步服务156可寻找哈希索引阵列1350中的下一个可用位置,并且将引用(例如,9)存储到文件名“a.jpg”。

图14示出根据本主题技术的各种实施方案的用于存储文件名的示例性方法。尽管本文描述的方法和过程可以特定次序与某些步骤和操作一起示出,但是除非另有说明,否则以类似或替代性次序或并行执行的另外的、更少或替代性步骤和操作在各种实施方案的范围内。方法1400可由在客户端设备上运行的系统(例如像图2的客户端同步服务156)来实现。

在操作1405处,系统可检测对树数据结构中的节点的修改。所述修改可以是例如将节点添加到树数据结构或对节点的文件名进行编辑。然后,在操作1410处,系统可确定文件名是否已经存在于文件名阵列中。系统可通过使用与节点相关联的文件名查询文件名在文件名阵列中的引用位置来检查文件名是否已经在文件名阵列中。如果发现引用位置,则无需将文件名添加到文件名阵列,并且在操作1415处,系统可确定文件名在文件名阵列中的位置(其应是通过查询返回的引用)并且在操作1420处将文件名的位置存储在节点中。

如果查询没有返回针对文件名阵列中文件名的引用,或者如果文件名原本不在文件名阵列中,则系统可在操作1425处将文件名和分隔符附加到文件名阵列,在操作1430处确定文件名在文件名阵列中的位置,并且在操作1435处将文件名的位置存储在节点中。

为了使得能够基于文件名随后查询引用位置,系统可进一步将文件名的位置存储在哈希索引中。为了确定哈希索引中存储文件名位置的位置,系统可计算文件名的哈希值。该哈希值可用于发现哈希索引中的位置以存储文件名的位置。

一旦文件名的位置存储在节点中,检索文件名就可仅涉及访问节点中文件名的位置并且使用所述位置来查找文件名阵列中的文件名。系统可从节点中所指定的位置开始并且在到达分隔符时停止。

图15示出根据本主题技术的各种实施方案的用于在给定文件名的情况下检索文件名的位置的示例性方法。尽管本文描述的方法和过程可以特定次序与某些步骤和操作一起示出,但是除非另有说明,否则以类似或替代性次序或并行执行的另外的、更少或替代性步骤和操作在各种实施方案的范围内。方法1500可由在客户端设备上运行的系统(例如像图2的客户端同步服务156)来实现。如上所述,所述方法可用于确定文件名是否已被存储在文件名阵列中。

文件名的位置存储在哈希索引或哈希索引阵列中。因此,在操作1505处,系统可通过对文件名执行哈希函数来在哈希索引中生成位置。这可以是例如新节点的名称或要重命名的节点的新名称。在操作1510处,系统从哈希索引中的位置检索文件名的位置信息。该位置信息是针对文件名阵列中存储文件名的位置。

在一些实现方式中,在操作1515处,系统可进行检查以确保正确的文件名存储在位置中。例如,系统可基于位置信息从文件名阵列检索字符串,并且将所述字符串与文件名进行比较。如果字符串和文件名匹配,则确认文件名的位置,并且在操作1520处,将文件名的位置存储在节点中。

如果字符串和文件名不匹配,则在操作1530处在哈希索引中的下一位置中检索位置信息,并且系统可返回至操作1515以检查下一位置中的位置信息是否准确。系统可继续直到发现正确的位置信息并且在操作1520处将其存储在节点中。

有效地标识树之间的差异

如上所述,客户端同步服务156被配置来标识表示由内容管理系统存储的内容项的服务器状态的远程树、表示存储在客户端设备上的对应的内容项的文件系统状态的本地树与表示服务器状态与文件系统状态之间已知的同步状态的同步树中的节点之间的差异。基于这些差异,可生成一组操作,所述一组操作如果被执行,则被配置来使服务器状态和文件系统状态朝向三个树数据结构将相同的同步状态收敛。

当存在大量节点时,能够有效地标识树之间的差异是重要的。例如,树中可能存在千百万个节点,并且就处理时间和资源使用而言,单独地比较每个节点可能被禁止。

本主题技术的各个实施方案涉及提供一种更有效的手段来标识树之间的差异。特别地,客户端同步服务156被配置来向每个节点分配值,所述值可用于与其他树中的节点进行比较以确定节点是否不同。这些值可被称为差异化值。为了提高标识树之间的差异的效率,可向每个叶节点分配差异化值,并且针对父节点的差异化值可基于其子节点的差异化值来计算。可以这种方式计算针对树数据结构的每个级别的差异化值,包括根节点也是如此。

图16a和图16b示出根据各种实施方案的树数据结构的实例。出于说明性目的,图16a和图16b示出同步树和本地树。然而,远程树可类似地执行。在图16a和图16b中,对节点使用哈希函数来计算针对同步树和本地树的叶节点的差异化值。每个父节点(或具有子级的节点)具有基于其子节点的差异化值计算的差异化值。

例如,在图16a的同步树1605中,针对节点c的差异化值是325,针对节点d的差异化值是742,并且针对b(其是节点c和d的父级)的差异化值被计算为c和d的差异化值的函数。换句话讲,diffvalue(b)=f(diffvalue(c),diffvalue(d))=f(325,742)。类似地,根节点的差异化值是其子节点(节点a和节点b)的差异化值的函数。换句话讲,diffvalue(/root)=f(diffvalue(a),diffvalue(b))=f(924,789)。

为了标识树之间的差异,客户端同步服务156可比较对应节点的差异化值以观察它们是否不同。如果差异化值相同,则树之间不存在差异。如果差异化值不同,则节点中或与节点相关联的向下的路径存在改变。因此,客户端同步服务156可查看子节点并且比较相对树中对应的节点,以确定它们是否不同以及与子节点相关联的向下的路径是否存在差异。

例如,在图16a中,客户端同步服务156可比较同步树1605的根节点和本地树1610的根节点的差异化值,并且确定所述差异化值匹配。因此,根节点的子级不存在差异。因此,客户端同步服务156可确定同步树1605和本地树1610匹配并且同步,而无需将树中的每个节点与相对树中的对应节点进行比较。

在图16b中示出的实例中,客户端同步服务156可类似地比较同步树1605的根节点和本地树1610的根节点的差异化值。然而,客户端同步服务156可确定同步树1605的根节点和本地树1610的根节点的差异化值不同,这指示在根节点的后代中可能存在差异。

因此,客户端同步服务156可移动至根节点的子级的下一级别以比较它们的差异化值。对于节点a,同步树1615中的节点a的差异化值与本地树1620中的节点a的差异化值匹配。因此,两者之间不存在差异,并且在根级别处检测到的差异不是由节点a或节点a向下的任何路径引起的。

移动至节点b,客户端同步服务156比较两个树中它们的节点b的差异化值,并且发现同步树1615中的节点a的差异化值与本地树1620中的节点a的差异化值不同。因此,在根级别处检测到的差异是由节点b或节点b向下的路径引起的。客户端同步服务156可移动至节点b的子级的下一个级别以比较它们的差异化值,并且发现在根级别处检测到的差异是由删除节点d引起的。因此,客户端同步服务156可标识同步树1615与本地树1620之间的差异,而无需将树中的每个节点与相对树中对应的节点进行比较。例如,节点a可具有许多后代节点,所述许多后代节点不需要进行分析,因为两个树中节点a的差异化值匹配。

默克尔树或哈希树机制可在一些情况下起作用。例如,可基于叶节点的哈希来计算每个叶节点的差异化值,并且可基于子级差异化值之和的哈希来计算非叶节点的差异化值。然而,利用默克尔树或哈希树机制在某些情况下具有不利的性能指标。当添加或删除叶节点时,叶节点的所有祖先节点的差异化值需要重新计算其差异化值,并且重新计算祖先节点中的每一个需要列出每个祖先节点的所有子节点。这在计算上是昂贵的,尤其当树数据结构以每个节点不存储在兄弟节点旁边或附近的存储器中的方式存储时。

本主题技术的各种实施方案通过除其他之外不同地计算父节点的差异化值来解决这些和其他技术缺点。每个叶节点的差异化值可通过计算叶节点的哈希来确定。每个父节点的差异化值可通过对其所有子级的哈希执行异或运算或xor运算来计算。

图17示出根据各种实施方案的树数据结构的实例。在图17的树数据结构中,叶节点a、c和d的差异化值通过对节点进行哈希来计算。节点b的差异化值是其子节点(节点c和节点d)的哈希的xor函数。根节点的差异化值是其子节点(节点a和节点b)的哈希的xor函数。xor函数的重要特质包括xor函数不是次序敏感的,这意思是mxorn将等于nxorm。同样,mxorm等于0。

当添加或删除叶节点时,叶节点的所有祖先节点的差异化值需要重新计算其差异化值。然而,计算祖先节点的差异化值可在不需要列出所有节点的情况下完成。例如,当删除子节点时,可通过对父级的旧差异化值和删除的子节点的差异化值执行xor运算来计算父级的新差异化值。当添加子节点时,可通过对父级的旧差异化值和新子节点的差异化值执行xor运算来计算父级的新差异化值。

图18示出根据本主题技术的各种实施方案的用于在给定文件名的情况下检索文件名的位置的示例性方法。尽管本文描述的方法和过程可以特定次序与某些步骤和操作一起示出,但是除非另有说明,否则以类似或替代性次序或并行执行的另外的、更少或替代性步骤和操作在各种实施方案的范围内。方法1800可由在客户端设备上运行的系统(例如像图2的客户端同步服务156)来实现。如上所述,所述方法可用于确定文件名是否已被存储在文件名阵列中。

在操作1805处,客户端同步服务156可从树数据结构(诸如远程树、同步树或本地树)添加或移除节点。如果节点被删除,则所述节点应具有与之相关联的先前计算的差异化值。如果节点被添加,则客户端同步服务156可通过例如对节点进行哈希来计算新节点的差异化值。因为存在对树的改变,所以必须更新针对节点祖先的差异化值。

在操作1810处,客户端同步服务156可基于父节点的当前差异化值和节点的差异化值来计算针对节点的父级的新差异化值。在操作1815处,将针对父级的新差异化值存储在父节点中。

在操作1820处,客户端同步服务156确定父节点本身是否具有父级。换句话讲,父节点是根节点,还是存在另外的祖先来计算差异化值。如果存在另外的父级,则过程可返回至操作1810,在操作1810中,父节点的父级将计算和存储新差异化值。如果不存在另外的父级并且父节点是根节点,则过程可停止在操作1825处。

一旦到达根节点,就准备将树数据结构与其他树数据结构进行比较以便标识差异。如上所述,客户端同步服务156可基于这些差异来生成一组操作,所述一组操作如果被执行,则被配置来使服务器状态和文件系统状态朝向三个树数据结构将相同的同步状态收敛。

图19示出计算系统1900的实例,所述计算系统1900可以是例如构成客户端设备150、内容管理系统110或其任何组件的任何计算设备,其中系统的组件使用连接1905彼此通信。连接1905可以是通过总线的物理连接或诸如在芯片组架构中与处理器1910的直接连接。连接1905也可以是虚拟连接、网络连接或逻辑连接。

在一些实施方案中,计算系统1900是分布式系统,其中本公开中所描述的功能可分布在一个数据中心、多个数据中心、对等网络等内。在一些实施方案中,所描述的系统组件中的一个或多个表示许多此类组件,每个此类组件执行描述组件的功能中的一些或全部。在一些实施方案中,组件可以是物理设备或虚拟设备。

示例性系统1900包括至少一个处理单元(cpu或处理器)1910和连接1905,所述连接1905将各种系统组件(包括系统存储器1915,诸如只读存储器(rom)1920和随机存取存储器(ram)1925)耦合到处理器1910。计算系统1900可包括与处理器1910直接连接、紧密接近处理器1910或者作为处理器1910的一部分集成的高速存储器1912的高速缓存。

处理器1910可包括任何通用处理器和硬件服务或软件服务,诸如存储在存储设备1930中的服务1932、1934和1936,其被配置来控制处理器1910;以及专用处理器,其中软件指令被并入到实际的处理器设计中。处理器1910实质上可以是完全独立成套的计算系统,其包含多个核或处理器、总线、存储器控制器、高速缓存等。多核处理器可以是对称的或不对称的。

为了实现用户交互,计算系统1900包括输入设备1945,所述输入设备1945可表示任何数目的输入机制,诸如用于语音的传声器、用于手势或图形输入的触敏屏幕、键盘、鼠标、运动输入、语音等。计算系统1900还可包括输出设备1935,所述输出设备1935可以是本领域技术人员已知的多个输出机制中的一个或多个。在一些情况下,多模态系统可使用户能够提供多种类型的输入/输出以与计算系统1900通信。计算系统1900可包括通信接口1940,所述通信接口1940总体上可支配并管理用户输入和系统输出。在任何特定硬件布置上没有操作限制,并且因此本文的基本特征可以很容易地替代随着开发而改进的硬件或固件布置。

存储设备1930可以是非易失性存储设备并且可以是硬盘或可存储可由计算机访问的数据的其他类型的计算机可读介质,诸如磁带盒、闪存卡、固态存储器设备、数字多用光盘、盒式磁盘(cartridge)、随机存取存储器(ram)、只读存储器(rom)和/或这些设备的一些组合。

存储设备1930可包括软件服务、服务器、服务等,当定义此类软件的代码由处理器1910执行时其致使系统执行功能。在一些实施方案中,执行特定功能的硬件服务可包括存储在计算机可读介质中并与必要的硬件组件(诸如处理器1910、连接1905、输出设备1935等)一起实现功能的软件组件。

为了解释清楚,在一些情况下,本技术可以被呈现为包括单独的功能块,所述单独的功能块包括包括有设备、设备组件、软件中体现的方法中的步骤或例程或者硬件和软件的组合的功能块。

本文所述的任何步骤、操作、功能或过程可单独地或与其他设备组合地用硬件和软件服务来执行或实现。在一些实施方案中,服务可以是驻留在客户端设备的存储器和/或内容管理系统的一个或多个服务器中的软件并且当处理器执行与服务相关联的软件时执行一个或多个功能。在一些实施方案中,服务是执行特定功能的程序或程序集合。在一些实施方案中,服务可被认为是服务器。存储器可以是非暂时性计算机可读介质。

在一些实施方案中,计算机可读存储设备、介质和存储器可以包括包含比特流等的有线或无线信号。然而,当提及时,非暂时性计算机可读存储介质本身明确地排除了诸如能量、载波信号、电磁波和信号的介质。

根据上述实例的方法可以使用计算机可读介质存储或以其他方式获得的计算机可执行指令来实现。此类指令可以包括例如使得或以其他方式配置通用计算机、专用计算机或专用处理设备来执行某一功能或一组功能的指令和数据。所使用的计算机资源的部分可以通过网络访问。计算机可执行指令可以是例如二进制文件、中间格式指令(诸如汇编语言)、固件或源代码。可用于存储指令、所使用的信息和/或在根据所述实例的方法期间创建的信息的计算机可读介质的实例包括磁盘或光盘、固态存储器设备、闪存、提供有非易失性存储器的usb设备、网络存储设备等。

实现根据这些公开的方法的设备可以包括硬件、固件和/或软件,并且可以采取多种形态因素中的任一种。此类形态因素的典型实例包括服务器、膝上型计算机、智能电话、小型个人计算机、个人数字助理等。本文描述的功能性也可以在外围设备或插入卡中体现。作为另外的实例,此种功能性还可以在不同芯片中的电路板上或者在单个设备中执行的不同进程中实现。

指令、用于传送此类指令的介质、用于执行所述指令的计算资源以及用于支持此类计算资源的其他结构是用于提供这些公开中所述的功能的手段。

尽管使用多种实例和其他信息来解释处于所附权利要求书的范围内的方面,但是基于此类实例中的特定特征或布置不应暗示权利要求书的限制,因为普通技术人员将能够使用这些实例推导出多种多样的实现方式。此外,尽管一些主题可能已用特定于结构特征和/或方法步骤的实例的语言进行描述,但是应理解,所附权利要求书中限定的主题不必限于这些描述的特征或动作。例如,此种功能性可以不同地分布或者在除了本文鉴别的组件之外的组件中执行。相反,所述特征和步骤被公开为处于所附权利要求书的范围内的系统和方法的组件的实例。

条款

一种计算机实现的方法,其包括:将远程树与同步树进行比较以标识所述远程树与所述同步树之间的服务器差异,其中所述远程树表示在第一时间段期间由内容管理系统存储的内容项的服务器状态,并且其中所述同步树表示在前一时间段期间当所述远程树与本地树匹配时的同步状态,其中所述本地树表示由所述客户端设备存储的内容项的本地状态;基于所述服务器差异来确定所述服务器状态和所述文件系统状态不同步;基于所述服务器差异来针对存储在所述客户端设备上的所述内容项生成一组客户端操作,其中所述一组客户端操作被配置来对存储在所述客户端设备上的所述内容项进行操作以使所述服务器状态和所述文件系统状态收敛;以及提供所述一组客户端操作以供在所述客户端设备上执行。

一种非暂时性计算机可读介质,其包括指令,所述指令在由计算系统执行时致使所述计算系统:标识本地树与同步树之间的客户端差异,其中所述本地树表示在第一时间段期间存储在所述计算系统上的内容项的文件系统状态,并且其中所述同步树表示在前一时间段期间当所述本地树与远程树匹配时的同步状态,其中所述远程树表示由内容管理系统存储的内容项的服务器状态;基于所述本地树与所述同步树之间的客户端差异来确定服务器状态和文件系统状态不同步;基于所述客户端差异来针对由所述内容管理系统存储的所述内容项生成一组服务器操作,其中所述一组服务器操作被配置来对由所述内容管理系统存储的所述内容项进行操作以使所述服务器状态和所述文件系统状态收敛;并且将所述一组服务器操作传输至所述内容管理系统以供执行。

一种系统,其包括:处理器;以及存储指令的非暂时性计算机可读介质,所述指令在由所述处理器执行时致使所述处理器:在同步树与远程树和本地树中的至少一者之间生成比较,其中所述远程树表示在第一时间段期间的服务器状态并且所述本地树表示在所述第一时间段期间的文件系统状态,并且其中所述同步树表示在前一时间段期间所述服务器状态与所述文件系统状态之间的同步状态;基于所述比较来标识同步树与远程树和本地树中的至少一者之间的至少一个差异;基于所述至少一个差异来生成一组操作,其中所述一组操作被配置来使所述服务器状态和所述文件系统状态收敛;并且管理所述一组操作的执行。

一种用于使内容项在内容管理系统上的用户账户与被授权访问所述用户账户的客户端设备之间同步的计算机实现的方法,所述方法包括:获得一组树数据结构,所述一组树数据结构包括:表示在当前时间段期间与所述内容管理系统上的所述用户账户相关联的内容项的服务器状态的远程树、表示在所述当前时间段期间所述客户端设备上的与所述用户账户相关联的内容项的文件系统状态的本地树、以及表示在前一时间段期间在所述本地树和所述远程树相同的情况下的已知同步状态的同步树,其中在所述前一时间段处所述同步树与所述本地树和所述远程树匹配;通过将所述远程树和所述同步树进行比较来确定所述内容管理系统上的所述用户账户包括未同步到所述客户端设备的至少一项修改;以及通过将所述同步树和所述本地树进行比较来确定所述客户端设备包括未同步到所述内容管理系统的至少一项修改。

一种非暂时性计算机可读介质,其包括指令,所述指令在由计算系统执行时致使所述计算系统:获得一组树数据结构,所述一组树数据结构包括:表示在当前时间段期间与内容管理系统上的用户账户相关联的内容项的服务器状态的远程树、表示在所述当前时间段期间客户端设备上的与所述用户账户相关联的内容项的文件系统状态的本地树、以及表示在前一时间段期间在所述本地树和所述远程树相同的情况下的已知同步状态的同步树,其中在所述前一时间段处所述同步树与所述本地树和所述远程树匹配;并且通过将所述远程树和所述同步树进行比较来确定所述内容管理系统上的所述用户账户包括未同步到所述客户端设备的至少一项修改。

一种系统,其包括:处理器;以及存储指令的非暂时性计算机可读介质,所述指令在由所述处理器执行时致使所述处理器:获得一组树数据结构,所述一组树数据结构包括:表示在当前时间段期间与内容管理系统上的用户账户相关联的内容项的服务器状态的远程树、表示在所述当前时间段期间客户端设备上的与所述用户账户相关联的内容项的文件系统状态的本地树、以及表示在前一时间段期间在所述本地树和所述远程树相同的情况下的已知同步状态的同步树,其中在所述前一时间段处所述同步树与所述本地树和所述远程树匹配;并且通过将所述同步树和所述本地树进行比较来确定所述客户端设备包括未同步到所述内容管理系统的至少一项修改。

一种用于使对内容管理系统上的用户账户的修改同步到被授权访问所述用户账户的客户端设备的计算机实现的方法,所述方法包括:计算表示与所述内容管理系统上的所述用户账户相关联的内容项的服务器状态的远程树数据结构与表示所述内容管理系统与所述客户端设备之间的已知同步状态的同步树数据结构之间的差异;以及基于所述差异来生成一组操作,所述一组操作在所述客户端设备上执行时,更新存储在所述客户端设备上的所述内容项以使所述客户端设备上的文件系统状态和所述服务器状态收敛。

一种非暂时性计算机可读介质,其包括指令,所述指令在由计算系统执行时致使所述计算系统:计算表示与所述内容管理系统上的账户相关联的内容项的服务器状态的远程树数据结构与表示所述内容管理系统与所述计算系统之间的已知同步状态的同步树数据结构之间的差异;并且基于所述差异来生成一组操作,所述一组操作在所述计算系统上执行时,更新存储在所述客户端设备上的所述内容项以使所述计算系统上的文件系统状态和所述服务器状态收敛。

一种系统,其包括:处理器;以及存储指令的非暂时性计算机可读介质,所述指令在由所述处理器执行时致使所述处理器:计算表示与内容管理系统上的用户账户相关联的内容项的服务器状态的远程树数据结构与表示所述内容管理系统与所述系统之间的已知同步状态的同步树数据结构之间的差异;并且基于所述差异来生成一组操作,所述一组操作在所述系统上执行时,更新存储在所述客户端设备上的所述内容项以使所述系统上的文件系统状态和所述服务器状态收敛。

一种用于使对客户端设备上的内容项的修改同步到内容管理系统上的用户账户的计算机实现的方法,所述方法包括:计算表示所述客户端设备上的与所述用户账户相关联的内容项的文件系统状态的本地树数据结构与表示所述内容管理系统与所述客户端设备之间的已知同步状态的同步树数据结构之间的差异;以及基于所述差异来生成一组操作,所述一组操作在被执行时,更新存储在所述内容管理系统上的所述内容项以使与所述内容管理系统上的所述用户账户相关联的内容项的服务器状态和所述文件系统状态收敛。

一种非暂时性计算机可读介质,其包括指令,所述指令在由计算系统执行时致使所述计算系统:计算表示与所述计算系统上的用户账户相关联的内容项的文件系统状态的本地树数据结构与表示内容管理系统与所述计算系统之间的已知同步状态的同步树数据结构之间的差异;以及基于所述差异来生成一组操作,所述一组操作在被执行时,更新存储在所述内容管理系统上的所述内容项以使与所述内容管理系统上的所述用户账户相关联的内容项的服务器状态和所述文件系统状态收敛。

一种系统,其包括:处理器;以及存储指令的非暂时性计算机可读介质,所述指令在由所述处理器执行时致使所述处理器:计算表示与所述系统上的用户账户相关联的内容项的文件系统状态的本地树数据结构与表示内容管理系统与所述系统之间的已知同步状态的同步树数据结构之间的差异;以及基于所述差异来生成一组操作,所述一组操作在被执行时,更新存储在所述内容管理系统上的所述内容项以使与所述内容管理系统上的所述用户账户相关联的内容项的服务器状态和所述文件系统状态收敛。


技术特征:

1.一种系统,其包括:

处理器;以及

存储指令的非暂时性计算机可读介质,所述指令在由所述处理器执行时致使所述处理器:

生成在同步树与远程树和本地树中的至少一者之间的比较,其中所述远程树表示在第一时间段期间的服务器状态,并且所述本地树表示在所述第一时间段期间的文件系统状态,并且其中所述同步树表示在前一时间段期间所述服务器状态与所述文件系统状态之间的同步状态;

基于所述比较来标识同步树与远程树和本地树中的至少一者之间的至少一个差异;

基于所述至少一个差异来生成一组操作,其中所述一组操作被配置来使所述服务器状态和所述文件系统状态收敛;并且

管理所述一组操作的执行。

2.如权利要求1所述的系统,其中所述指令进一步致使所述处理器:

接收针对由内容管理服务存储的内容项的服务器修改数据;并且

基于所述服务器修改数据来更新所述远程树。

3.如权利要求1所述的系统,其中所述指令进一步致使所述处理器:

接收针对由所述系统存储的内容项的客户端修改数据;并且

基于所述客户端修改数据来更新所述本地树。

4.如权利要求1所述的系统,其中所述指令进一步致使所述处理器:

针对所述一组操作中的每个操作,标识与所述操作相关联的任务;并且

执行所述任务。

5.如权利要求1所述的系统,其中所述远程树、所述本地树和所述同步树存储在所述系统的所述非暂时性计算机可读介质上。

6.如权利要求3所述的系统,其中所述服务器状态和所述文件系统状态不同步指示对由所述内容管理系统存储的所述内容项执行的动作不反映在存储在所述客户端设备上的所述内容项中。

7.如权利要求2所述的系统,其中所述服务器状态和所述文件系统状态不同步指示对存储在计算系统上的所述内容项执行的动作不反映在由所述内容管理系统存储的所述内容项中。

8.一种包括指令的非暂时性计算机可读介质,所述指令在由计算系统执行时致使所述计算系统:

标识同步树与远程树和本地树中的至少一者之间的差异,其中所述远程树表示在第一时间段期间的服务器状态,其中所述本地树表示在第一时间段期间存储在所述计算系统上的内容项的文件系统状态,并且其中所述同步树表示在前一时间段期间所述服务器状态与所述文件系统状态之间的同步状态;

所述本地树与所述同步树之间或所述远程树与所述同步树之间的差异确定服务器状态和文件系统状态不同步;

基于所述差异来生成一组操作,所述一组操作被配置来使所述服务器状态和所述文件系统状态收敛。

9.一种用于使内容项在内容管理系统上的用户账户与被授权访问所述用户账户的客户端设备之间同步的计算机实现的方法,所述方法包括:

获得一组树数据结构,所述一组树数据结构包括:表示在当前时间段期间与所述内容管理系统上的所述用户账户相关联的内容项的服务器状态的远程树、表示在所述当前时间段期间所述客户端设备上的与所述用户账户相关联的内容项的文件系统状态的本地树、以及表示在所述本地树和所述远程树相同的前一时间段期间在所述内容管理系统与所述客户端设备之间的已知同步状态的同步树,其中在所述前一时间段处所述同步树与所述本地树和所述远程树匹配;其中在所述已知同步状态下,与所述内容管理系统上的所述用户账户相关联的所述内容项与所述客户端设备上的与所述用户账户相关联的所述内容项同步;

通过将所述远程树和所述同步树进行比较来确定所述内容管理系统上的所述用户账户包括未同步到所述客户端设备的至少一项修改;以及

通过将所述同步树和所述本地树进行比较来确定所述客户端设备包括未同步到所述内容管理系统的至少一项修改。

10.如权利要求9所述的计算机实现的方法,其中所述一组树数据结构存储在所述客户端设备上。

11.如权利要求9所述的计算机实现的方法,其中所述确定所述内容管理系统上的所述用户账户包括未同步到所述客户端设备的至少一项修改包括:生成一组操作。

12.如权利要求11所述的计算机实现的方法,其中所述一组操作被配置来对存储在所述客户端设备上的所述内容项进行操作以使所述服务器状态和所述文件系统状态收敛。

13.如权利要求9所述的计算机实现的方法,其中所述确定所述客户端设备包括未同步到所述内容管理系统的至少一项修改包括:生成一组操作。

14.如权利要求13所述的计算机实现的方法,其中所述一组操作被配置来对由所述内容管理系统存储的所述内容项进行操作以使所述服务器状态和所述文件系统状态收敛。

15.如权利要求9所述的计算机实现的方法,其还包括:

接收针对存储在所述客户端设备上的内容项的客户端修改数据;以及

基于所述客户端修改数据来更新所述本地树。

16.如权利要求15所述的计算机实现的方法,其还包括基于所述客户端修改数据来更新所述同步树。

17.如权利要求9所述的计算机实现的方法,其还包括:

从所述内容管理系统接收针对由所述内容管理系统存储的内容项的服务器修改数据;以及

基于所述服务器修改数据来更新所述远程树。

18.如权利要求17所述的计算机实现的方法,其还包括基于所述服务器修改数据来更新所述同步树。

19.一种包括指令的非暂时性计算机可读介质,所述指令在由计算系统执行时致使所述计算系统:

获得一组树数据结构,所述一组树数据结构包括:表示在当前时间段期间与内容管理系统上的用户账户相关联的内容项的服务器状态的远程树、表示在所述当前时间段期间客户端设备上的与所述用户账户相关联的内容项的文件系统状态的本地树、以及表示在所述本地树和所述远程树相同的前一时间段期间的在所述内容管理系统与所述客户端设备之间的已知同步状态的同步树,其中在所述前一时间段处所述同步树与所述本地树和所述远程树匹配;其中在所述已知同步状态下,与所述内容管理系统上的所述用户账户相关联的所述内容项与所述客户端设备上的与所述用户账户相关联的所述内容项同步;并且

通过将所述远程树和所述同步树进行比较来确定所述内容管理系统上的所述用户账户包括未同步到所述客户端设备的至少一项修改。

20.如权利要求19所述的非暂时性计算机可读介质,其中指令进一步致使所述计算系统生成一组操作,所述一组操作被配置来对存储在所述客户端设备上的所述内容项进行操作以使所述服务器状态和所述文件系统状态收敛。

21.如权利要求19所述的非暂时性计算机可读介质,其中指令进一步致使所述计算系统通过将所述同步树和所述本地树进行比较来确定所述客户端设备包括未同步到所述内容管理系统的至少一项修改。

22.如权利要求21所述的非暂时性计算机可读介质,其中指令进一步致使所述计算系统生成一组操作,所述一组操作被配置来对由所述内容管理系统存储的所述内容项进行操作以使所述服务器状态和所述文件系统状态收敛。

23.如权利要求19所述的非暂时性计算机可读介质,其中所述一组树数据结构存储在所述客户端设备上。

24.一种用于使对内容管理系统上的用户账户的修改同步到被授权访问所述用户账户的客户端设备的计算机实现的方法,所述方法包括:

计算表示与所述内容管理系统上的所述用户账户相关联的内容项的服务器状态的远程树数据结构与表示所述内容管理系统与所述客户端设备之间的已知同步状态的同步树数据结构之间的差异;以及

基于所述差异来生成一组操作,所述一组操作在所述客户端设备上执行时,更新存储在所述客户端设备上的所述内容项以使所述客户端设备上的文件系统状态和所述服务器状态收敛。

25.如权利要求24所述的计算机实现的方法,其还包括执行所述一组操作。

26.如权利要求24所述的计算机实现的方法,其中所述远程树数据结构和所述同步树数据结构存储在所述客户端设备上。

27.如权利要求24所述的计算机实现的方法,其还包括:

从所述客户端设备接收针对存储在所述客户端设备上的内容项的客户端修改数据;以及

基于所述客户端修改数据来更新所述本地树。

28.如权利要求27所述的计算机实现的方法,其还包括基于所述客户端修改数据来更新所述同步树。

29.如权利要求24所述的计算机实现的方法,其还包括:

计算表示所述客户端设备上的与所述用户账户相关联的内容项的文件系统状态的本地树数据结构与表示所述内容管理系统与所述客户端设备之间的已知同步状态的所述同步树数据结构之间的第二差异;

基于所述差异来生成第二组操作,所述第二组操作在被执行时更新存储在所述内容管理系统上的所述内容项,以使与所述内容管理系统上的所述用户账户相关联的内容项的服务器状态和所述文件系统状态收敛;以及

管理所述第二组操作的执行。

30.如权利要求29所述的计算机实现的方法,其中所述本地树数据结构存储在所述客户端设备上。

31.如权利要求29所述的计算机实现的方法,其还包括:

从所述内容管理系统接收针对由所述内容管理系统存储的内容项的服务器修改数据;以及

基于所述服务器修改数据来更新所述远程树。

32.如权利要求31所述的计算机实现的方法,其还包括基于所述服务器修改数据来更新所述同步树。

33.一种用于使对客户端设备上的内容项的修改同步到内容管理系统上的用户账户的计算机实现的方法,所述方法包括:

计算表示所述客户端设备上的与所述用户账户相关联的内容项的文件系统状态的本地树数据结构与表示所述内容管理系统与所述客户端设备之间的已知同步状态的同步树数据结构之间的差异;以及

基于所述差异来生成一组操作,所述一组操作在被执行时更新存储在所述内容管理系统上的所述内容项,以使与所述内容管理系统上的所述用户账户相关联的内容项的服务器状态和所述文件系统状态收敛。

34.如权利要求33所述的计算机实现的方法,其还包括执行所述一组操作。

35.如权利要求33所述的计算机实现的方法,其中所述本地树数据结构和所述同步树数据结构存储在所述客户端设备上。

36.如权利要求33所述的计算机实现的方法,其还包括:

从所述客户端设备接收针对存储在所述客户端设备上的内容项的客户端修改数据;以及

基于所述客户端修改数据来更新所述本地树。

37.如权利要求36所述的计算机实现的方法,其还包括基于所述客户端修改数据来更新所述同步树。

38.如权利要求33所述的计算机实现的方法,其还包括:

从所述内容管理系统接收针对由所述内容管理系统存储的内容项的服务器修改数据;以及

基于所述服务器修改数据来更新远程树。

39.如权利要求38所述的计算机实现的方法,其还包括基于所述服务器修改数据来更新所述同步树。

40.如权利要求33所述的计算机实现的方法,其还包括:

计算表示与所述内容管理系统上的所述用户账户相关联的内容项的所述服务器状态的远程树数据结构与表示所述内容管理系统与所述客户端设备之间的所述已知同步状态的所述同步树数据结构之间的第二差异;以及

基于所述第二差异来生成第二组操作,所述第二组操作在所述客户端设备上执行时,更新存储在所述客户端设备上的所述内容项以使所述客户端设备上的文件系统状态和所述服务器状态收敛。

41.如权利要求40所述的计算机实现的方法,其还包括管理所述第二组操作的执行。

42.如权利要求40所述的计算机实现的方法,其中所述远程树数据结构存储在所述客户端设备上。

技术总结
所公开的技术涉及一种系统,所述系统被配置来标识同步树与远程树和本地树中的至少一者之间的至少一个差异。所述同步树表示服务器状态与文件系统状态之间的已知同步状态,所述远程树表示所述服务器状态,并且所述本地树表示所述文件系统状态。所述系统可进一步基于所述至少一个差异来生成被配置来使所述服务器状态和所述文件系统状态收敛的一组操作并且管理所述一组操作的执行。

技术研发人员:I·戈德堡;S·贾亚卡尔;约翰·莱;R·应;N·库拉帕迪;G·古普塔;G·宋;E·C·朱布
受保护的技术使用者:卓普网盘股份有限公司
技术研发日:2018.12.17
技术公布日:2020.06.09

转载请注明原文地址: https://bbs.8miu.com/read-9087.html

最新回复(0)