再同步内容管理系统中的元数据的制作方法

文档序号:21788358发布日期:2020-08-07 20:38阅读:160来源:国知局
再同步内容管理系统中的元数据的制作方法

相关申请的交叉引用

本申请要求2018年1月5日提交的美国非临时申请号15/863,819;2018年1月12日提交的美国非临时申请号15/870,179;和2017年12月28日提交的美国临时申请号62/611,473的优先权,其中的每一个的内容通过引用明确地整体并入本文。

本技术涉及分布式存储、协同和同步系统。



背景技术:

云存储系统允许用户在云上存储和访问数据。一些云存储系统允许用户与其他用户共享数据并且以协同方式访问数据。在一些情况下,用户还可在其客户端设备上存储和访问数据的本地副本。数据的本地副本可向用户提供对数据的更快访问。另外,本地副本可允许用户在用户离线时访问数据。云存储系统还可允许用户使其数据的本地副本与云上的数据同步以确保一致。云存储系统可尝试使数据的副本跨多个客户端设备和服务器同步,因此数据的每个副本都是相同的。然而,使数据跨多个设备同步可能是一项极其困难的任务,通常导致不期望的数据丢失和不一致。

附图说明

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

图1a示出内容管理系统和客户端设备的实例;

图1b示出根据一些方面的客户端同步服务的实例;

图2a示出用于使内容在图1a所示的内容管理系统与客户端设备之间同步的示例性架构的示意图;

图2b示出用于在图2a所示的用于使内容在内容管理系统与客户端设备之间同步的示例性架构中存储和跟踪内容项的块的示例性配置;

图3a示出由文件日志接口处理客户端设备与内容管理系统上的服务器文件日志之间的示例性通信的图;

图3b示出用于转换客户端设备与内容管理系统上的服务器文件日志之间的通信的示例性过程的图;

图4a示出用于将服务器文件日志数据转换成线性化操作的示例性转换和线性化过程的图;

图4b示出用于将来自客户端设备的操作转换成对服务器文件日志的修订的示例性转换和线性化过程的图;

图5a示出跨名称空间操作的示例性线性化;

图5b示出跨名称空间根据针对事件计算的兰波特时钟排序的事件的图;

图6a示出根据各个方面的树数据结构的实例;

图6b示出对图6a所示的树数据结构的更新的实例;

图7a示出用于使用树数据结构来使服务器状态和文件系统状态同步的示例性方法;

图7b示出用于在使用树数据结构来使服务器状态和文件系统状态同步时解决冲突的示例性方法;

图8示出对图6a所示的树数据结构的示例性更新,反映了基于内容项操作来修改内容项的意图;

图9a示出用于向服务器文件日志提交内容项操作的示例性方法;

图9b示出用于处理来自客户端设备的提交内容项操作的请求的示例性方法;

图10示出用于在客户端设备上重构树数据结构的示例性再同步过程;

图11示出用于在客户端设备上重构树数据结构的再同步过程的图;并且

图12示出用于实现本技术的各个方面的系统的实例。

具体实施方式

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

云存储系统允许用户跨多个设备存储和访问内容项。内容项可包括但不限于文件、文档、消息(例如,电子邮件消息或文本消息)、媒体文件(例如,照片、视频和音频文件)、文件夹或任何其他内容单元。内容项可与多个用户共享、被编辑、删除、添加、重命名或移动。然而,使跨若干个设备和用户账户共享或存储的内容项同步仍然存在缺陷并且充满技术障碍。

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

然而,在许多情况下,可在各种机器之间发送若干种通信,这可能难以管理。此外,由于各种问题(诸如客户端或网络问题),通信中的一些可被无序地接收。这通常导致在各种机器处的内容项之间发生冲突和错误。用户的活动还可生成大量修订,所述大量修订可进一步使同步工作复杂化并且加剧了不一致。例如,用户可对各种内容项执行大量修改,在短时间内撤消修改,或者对先前修改的内容项快速地执行另外的修改。这增加了无序地接收来自用户的改变和修订的可能性,从而致使过时的修改和内容项冲突。因此,一些操作可能与内容项的当前状态不兼容。此外,检测操作是否存在冲突可能极其困难。

同步动作也存在固有的等待时间。例如,第一机器首先检测在第一机器上采取的动作,然后通信被生成并且通过网络传输。通信由第二机器接收,所述第二机器仍然可处理先前的通信并且可在第二机器处采取通信中详述的动作。在这种说明性场景中,存在若干个可能的等待时间点,包括第一机器、第二机器和网络。当等待时间增加时,内容项之间发生冲突的可能性也增加。处理此类冲突通信并且解决冲突极其困难并且是计算上昂贵的任务。

当第二机器或访问内容项的其他机器上的相同或不同用户对内容项进行修改时,引入另外的复杂性。当在大型协同环境中本地和远程地修改内容项时,出现另外的技术问题。如在此所示,这些问题可快速地倍增并且复杂性增加,从而在内容项中造成各种各样的问题和不一致。

内容管理系统

在一些实施方案中,所公开的技术部署在具有内容项同步能力和协同特征等的内容管理系统的上下文中。在图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可包括比图1a中所示的更多或更少的存储装置和/或数据库。

在一些实施方案中,内容存储装置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的体系结构配置仅仅是一种可能的配置并且具有更多或更少组件的其他配置是可能的。

客户端同步服务

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

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

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

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

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

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

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

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

文件日志和存储系统

图2a示出用于使内容在系统配置100中的内容管理系统110与客户端设备150之间同步的示例性架构的示意图。在这个实例中,客户端设备150通过内容存储接口206和文件日志接口202分别与内容存储装置142和服务器文件日志148交互。内容存储接口206可由内容存储服务116提供或管理,并且文件日志接口202可由服务器同步服务112提供或管理。例如,内容存储接口206可以是内容存储服务116的子组件或子服务,而文件日志接口202可以是服务器同步服务112的子组件或子服务。

内容存储接口206可管理客户端设备150与内容存储装置142之间的通信,诸如内容请求或交互。内容存储接口206可处理来自客户端设备150的请求,以将内容上传到内容存储装置142和从内容存储装置142下载。内容存储接口206可从客户端设备150接收内容请求(例如,下载、上传等),验证访问控制列表145的许可权,与授权服务132通信以确定客户端设备150(和/或来自客户端设备150的请求)是否被授权将内容上传到内容存储装置142或从内容存储装置142下载,并且与内容存储装置142交互以下载内容存储装置142中的内容或将所述内容上传到客户端设备150。如果来自客户端设备150的请求是下载内容项的请求,则内容存储接口206可从内容存储装置142检索内容项并且将内容项提供给客户端设备150。如果来自客户端设备150的请求是上传内容项的请求,则内容存储接口206可从客户端设备150获得内容项并且将内容项上传到内容存储装置142以供存储。

当处理来自客户端设备150的内容请求时,内容存储接口206可与存储索引210通信以检查所请求的内容在内容存储装置142中的可用性和/或存储位置,并且跟踪内容存储装置142中的内容项。存储索引210可维持内容存储装置142上内容项的索引,所述索引标识内容存储装置142上的内容项,并且还可标识内容项在内容存储装置142内的相应位置。因此,存储索引210可跟踪内容存储装置142上的内容项以及内容项的存储位置。存储索引210可跟踪整个内容项(诸如文件)和/或内容项的部分(诸如块或小块)。在一些情况下,内容项可被分成可存储在内容存储装置142处并且以存储索引210进行跟踪的块或小块。例如,内容存储装置142可将内容项存储为数据的包括内容项的相应数据部分的块或小块。存储索引210可跟踪存储在内容存储装置142中的内容项的块或小块。下文描述的图2b示出用于存储和跟踪内容项的块的示例性配置。

文件日志接口202可管理客户端设备150与服务器文件日志148之间的通信,诸如元数据请求以及内容同步和操作。例如,文件日志接口202可在客户端设备150与服务器文件日志148之间转换、检验、认证和/或处理操作、配置和状态信息。文件日志接口202可根据光标中的fsauth令牌或通过授权服务132验证许可权,以授权客户端设备150发送到服务器文件日志148的请求或验证对所述请求的授权。当处理来自客户端设备150的请求或操作时,文件日志接口202可访问名称空间成员资格存储区208以确定或验证针对与来自客户端设备150的请求或操作相关联的任何名称空间的名称空间所有权信息,并且从访问控制列表145检索许可权信息以验证与来自客户端设备150的请求或操作相关联的内容的许可权。

文件日志接口202中的转换服务204可执行线性化和转换操作以用于在客户端设备150与服务器文件日志148之间进行通信。例如,转换服务204可将来自客户端设备150的通信转换成与服务器文件日志148中数据的结构和格式一致的不同格式,并且反之亦然。为了示出,在一些情况下,客户端设备150可将客户端设备150处的内容项信息(例如,状态、改变、版本等)处理为操作,而服务器文件日志148可处理与由数据结构(诸如数据库表)中的行反映的内容项修订相同的信息。为了使内容项信息能够在客户端设备150与服务器文件日志148之间同步,转换服务204可将来自客户端设备150的操作转换成适于服务器文件日志148的修订,并且可将反映在服务器文件日志148上的数据行中的修订转换成适于客户端设备150的操作。

在一些情况下,授权服务132可生成令牌,所述令牌验证或指示客户端设备150被授权访问、更新、下载或上传所请求的内容项。令牌可包括与客户端设备150相关联的设备标识符、与在客户端设备150处认证或授权的用户账户相关联的账户标识符、与在客户端设备150处授权的会话相关联的会话标识符、视图上下文以及对标识的集合的访问许可权。令牌可包括在将在下文详细描述的称为光标的加密签名的数据对象中。内容管理系统110和/或授权服务132可将一个或多个令牌发送到客户端设备150,并且客户端设备150可在向服务器文件日志148请求内容项修订和/或更新时向内容管理系统110提供令牌,如下文进一步描述。客户端设备150还可将令牌提供给内容存储接口206以检验任何内容请求(例如,下载、上传等)。内容存储接口206可使用令牌来授权对存储索引210的查询,并且将内容项上传到内容存储装置142或从内容存储装置142下载。

例如,客户端设备150可向内容存储接口206发送将内容项上传到内容存储装置142的请求。所述请求可包括令牌和要上传的内容项。内容存储接口206可使用令牌来授权对存储索引210的查询以检查内容项是否已存在于内容存储装置142上,并且授权将内容项上传到内容存储装置142。客户端设备150还可将令牌提供给文件日志接口202以授权将元数据存储在服务器文件日志148上的请求以便跟踪内容项的上传和修订。

图2b示出示例性块存储和同步配置。在这个实例中,内容存储装置142可存储数据块,所述数据块可以是多至特定大小(例如,4mb)的内容项(例如,文件)的不透明小块。内容项可被分成块,并且这些块可存储在内容存储装置142处以供访问。存储索引210可跟踪存储在内容存储装置142处的块以及存储在内容存储装置142处的块的相应位置。文件日志接口202可与服务器文件日志148交互以跟踪对存储在内容存储装置142处的内容项和/或块的修订。

例如,内容项220(例如,myfile.abc)可被分成块220a、220b、220c、220n。内容存储接口206可接收块220a、220b、220c、220n,并且将块数据222b发送到内容存储装置142以便存储在内容存储装置142处。块数据222b可包括与内容项220相关联的块220a、220b、220c、220n。

块220a、220b、220c、220n可存储在内容存储装置142处的一个或多个存储设备或卷上和/或聚合在一个或多个逻辑存储容器(例如,桶)或数据集群内。在一些情况下,块220a、220b、220c、220n可一起存储在相同位置(例如,存储设备、卷、容器和/或集群)上。在其他情况下,块220a、220b、220c、220n中的一些或全部可存储在两个或更多个不同位置(例如,两个或更多个不同的存储设备、卷、容器和/或集群)上。

内容存储接口206还可将块元数据222a存储在存储索引210处。块元数据222a可标识块220a、220b、220c、220n,并且允许存储索引210在内容存储装置142处跟踪块220a、220b、220c、220n。块元数据222a可包括用于每个块220a、220b、220c、220n的标识符。块的标识符可以是标识块的名称或密钥,诸如块的哈希。

块元数据222a还可包括针对块220a、220b、220c、220n的位置信息,所述位置信息指示块220a、220b、220c、220n的相应存储位置。块的位置信息可标识存储块的存储设备或卷和/或包含块的逻辑存储容器或数据集群。位置信息可用于访问或检索相关联的块。

内容存储接口206可在将块220a、220b、220c、220n存储在内容存储装置142处之前或之后,将块元数据222a存储在存储索引210处。例如,内容存储接口206可将块220a、220b、220c、220n存储在内容存储装置142处并且随后将块元数据222a存储在存储索引210处,以指示块220a、220b、220c、220n已经存储在内容存储装置142处。

在一些情况下,内容存储接口206可在将块220a、220b、220c、220n存储在内容存储装置142处之前查询存储索引210,以确定是否将块220a、220b、220c、220n存储在内容存储装置142处(或存储在何处)。例如,内容存储接口206可基于块元数据222a来查询存储索引210,以检查是否将块220a、220b、220c、220n存储在内容存储装置142处。存储索引210可将块元数据222a中的块标识符与存储索引210处的块标识符进行比较以检查任何匹配。块标识符之间的匹配指示相关联的块存储在内容存储装置142处。

如先前所提及的,服务器文件日志148跟踪内容项修订,包括内容项添加、编辑、移动或重命名、删除等。因此,文件日志接口202可将修订222c存储在服务器文件日志148处以指示内容项220和/或块220a、220b、220c、220n被添加到内容存储装置142。修订222c可表示对服务器文件日志148处的内容项修订的日志内的内容项220的修订。

修订222c可标识内容项220和与内容项220相关联的操作,诸如添加操作(例如,上传)、编辑操作、移动或重命名操作、删除操作等。修订222c还可标识内容管理系统110中的存储内容项220的名称空间和在服务器文件日志148处的内容项修订的日志中的用于存储修订222c的行。内容项修订的日志内的行可表示与对内容项220的修订222c相关联的修订号。

文件日志接口

图3a示出由文件日志接口202处理客户端设备150与服务器文件日志148之间的通信的图。服务器文件日志148跟踪内容项状态和改变(例如,修订)作为服务器文件日志148中的行和字段的值。例如,服务器文件日志148可维持对内容存储装置142中内容项的修订的一个或多个日志。一个或多个日志可跟踪对每个名称空间上每个内容项的修订。服务器文件日志148上的日志中的一行值可标识名称空间中的内容项并且反映名称空间中内容项的状态。日志中的对应于名称空间中相同内容项的后续行可反映对名称空间中内容项的后续修订。因此,服务器文件日志148中的与内容项相关联的行可标识内容项的当前状态以及对内容项从创建到当前状态的任何修订。

为了使内容项信息(例如,状态、改变或修订等)与客户端设备150同步,服务器文件日志148可向文件日志接口202发送修订数据304或从文件日志接口202接收修订数据304,所述修订数据304表示对一个或多个内容项的在服务器文件日志148中跟踪或存储的修订。修订数据304可包括例如对应于服务器文件日志148中的行的内容项修订的日志记录(log)。服务器文件日志148可将修订数据304发送到文件日志接口204,所述文件日志接口204可将修订数据304转换成客户端设备150的操作数据302,如下文进一步描述的。

客户端设备150可执行内容操作以在客户端设备150处更新或修改内容项。为了使内容项信息与服务器文件日志148同步,客户端设备150可向文件日志接口202发送操作数据302或从文件日志接口202接收操作数据302。客户端设备150可将操作数据302发送到文件日志接口202以将客户端设备150处的改变报告给内容项,并且从文件日志接口202接收操作数据302以从服务器文件日志148获得内容项的最新状态(例如,修订数据304)。

例如,客户端设备150可在客户端设备150处编辑内容项a并且向文件日志接口202报告指示对内容项a的编辑的编辑操作。编辑操作可包括在与文件日志接口202通信的操作数据302中以指示对内容项a的修订。文件日志接口202可接收包括编辑操作的操作数据302并且生成修订以用于存储在服务器文件日志148处,从而跟踪对内容项a的编辑。文件日志接口202可包括与修订数据304中的编辑操作相关联的对服务器文件日志148的修订以便更新服务器文件日志148以存储表示内容项a的编辑状态的修订。

如下文进一步描述,操作数据302可包括光标,所述光标标识由客户端设备150针对与客户端设备150相关联的每个名称空间获得的最新状态或修订。例如,光标可标识由客户端设备150针对与客户端设备150相关联的每个名称空间获得的服务器文件日志148中的最新修订。光标中的信息允许文件日志接口202确定来自客户端设备150的操作数据302中的操作是否反映了与操作相关联的一个或多个名称空间的服务器文件日志148中的最新状态或修订。这可帮助文件日志接口202确保来自客户端设备150的操作数据302中的对应于服务器文件日志148中的较旧修订的操作未写入服务器文件日志148中,这可在服务器文件日志148中的现有修订与从操作数据302转换的修订之间造成冲突。

为了使内容项信息能够在客户端设备150与服务器文件日志148之间同步,文件日志接口202可将操作数据302(例如,通过转换服务204)转换成修订数据304,并且反之亦然。当从客户端设备150接收操作数据302时,文件日志接口202可将操作数据302转变成修订数据304,所述修订数据304包括从操作数据302中的操作解译的内容项修订。当从服务器文件日志148接收修订数据304时,文件日志接口202可将修订数据304转变成操作数据302,所述操作数据302包括用于在客户端设备150处实现修订数据304中的修订的操作。修订数据304包括服务器文件日志148中的描述一个或多个内容项所发生的事(即,对一个或多个内容项的修订)的数据,并且操作数据302包括在客户端设备150处已经执行或应当执行以修改一个或多个内容项的操作。因此,文件日志接口202可将来自服务器文件日志148的描述对一个或多个内容项的修订的数据(例如,操作数据304)转换成在客户端设备150处已经执行或应当执行以修改客户端设备150处的一个或多个内容项的操作。

如前所述,除了将来自客户端设备150的操作数据302转换成针对服务器文件日志148的修订数据304之外,文件日志接口202还可将来自服务器文件日志148的修订数据304转变成针对客户端设备150的操作数据302。文件日志接口202可从服务器文件日志148获得修订数据304,并且将修订数据304中的修订转换成要在客户端设备150处执行的操作,以根据此类修订来修订客户端设备150处的一个或多个内容项。根据修订数据304中的修订生成的操作包括在由文件日志接口202提供给客户端设备150的操作数据302中。操作数据302与修订数据304之间的这种转换允许客户端设备150和服务器文件日志148根据需要使内容项信息彼此同步。

在向服务器文件日志148写入根据由客户端设备150提供的操作数据302生成的任何修订数据304之前,文件日志接口202可检查操作数据302中的光标和/或查询服务器文件日志148以确保修订数据304中的任何修订不会在服务器文件日志148中造成冲突。例如,文件日志接口202可查询服务器文件日志148以检查与修订数据304中的修订相关联的内容项的版本是否与服务器文件日志148处的内容项的版本相同,或者服务器文件日志148处的内容项的版本是否是作为与同修订数据304中的修订有关的内容项的更新或不同版本。如果服务器文件日志148示出内容项的最新版本是与同修订数据304有关的版本不同的版本,则这两个版本冲突。

文件日志接口202可更新服务器文件日志148,以存储包括在从操作数据302导出的修订数据304中的新修订。当查询和/或更新服务器文件日志148中的修订时,文件日志接口202可查询名称空间成员资格存储区208以检索与受修订数据304中的修订影响的任何名称空间相关联的名称空间所有权信息。名称空间所有权信息可指示哪些用户账户拥有特定名称空间或属于特定名称空间的成员,并且因此能够访问特定名称空间。因此,文件日志接口202可分析名称空间所有权信息,以确保服务器文件日志148不被更新成包括对来自不是名称空间成员的用户账户的名称空间的修订。

参考图3b,服务器文件日志148可存储日志310、312以跟踪和标识内容项修订和状态。在这个实例中,日志310包括包含名称空间标识符(ns_id)、服务器日志标识符(sj_id)、路径、块、先前修订(prev_rev)和目标名称空间(target_ns)的记录。ns_id可包括用于唯一地标识服务器文件日志148中的名称空间的一个或多个值。sj_id包括映射到给定名称空间中的行的单调地增加的值并且提供操作或修订在该名称空间内的排序。路径可以是标识相关联的内容项的名称空间相对路径。prev_rev标识对应于与路径相关联的内容项的先前状态的行的sj_id。target_ns标识已安装名称空间的安装点的目标名称空间的ns_id。对于与安装点不对应的行(例如,修订),不设置target_ns字段。

日志312包括包含ns_id、sj_id、时钟(例如,时间戳)、文件标识符(file_id)、一个或多个扩展属性(xattr)等的记录。xattr可存储与内容项或操作相关联的元数据。

在一些情况下,日志310可包括其他字段,诸如表示相关联内容项的大小的大小字段、可设置成指示内容项何时是目录的目录字段(例如,is_dir)、唯一地标识相关联文件的文件标识符、时钟或时间戳字段等。

如先前所提及的,文件日志接口202可基于操作数据302和修订数据304来执行转换320。当执行转换320时,转换服务204可将操作数据302变换成修订322以用于存储在服务器文件日志148中,所述修订322包括线性化修订。转换服务204还可将修订数据304变换成包括在发送给客户端设备150的操作数据302中的线性化操作324a,所述线性化操作324a可由客户端设备150应用以更新客户端设备150处的内容项信息(例如状态、改变等)。转换服务204还可生成或更新光标324b并且将操作数据302中的光标324b提供给客户端设备150。光标324b标识服务器文件日志148中对应于与线性化操作324b相关联的每个名称空间和/或内容项的相应修订或行。

例如,光标324b可标识名称空间(例如ns_id)和服务器文件日志148中针对该名称空间的行(例如sj_id),它们指示服务器文件日志148中针对该名称空间的最新修订。光标324b中的名称空间和行可与线性化操作324a中的操作相关联。光标324b可在服务器文件日志148中针对特定名称空间的修订的日志记录上标识特定位置,从而指示在客户端设备150处应用线性化操作324a之后和/或之前服务器文件日志148中名称空间的修订或状态。因此,光标324b可指示在线性化操作324a之前或之后服务器文件日志148中的名称空间和/或内容项的状态,这可帮助避免修订冲突并且跟踪在应用线性化操作324a之前和之后的修订次序。

图4a示出用于将服务器文件日志数据转换成线性化操作的示例性转换和线性化过程的图。服务器文件日志148存储日志310,所述日志310包括行402,所述行402包括修订322。在这个实例中,日志310跟踪针对多个名称空间(即,名称空间100和101(即,ns_id100和ns_id101))的修订(322)。然而,在一些情况下,服务器文件日志148可存储名称空间特定的日志,所述名称空间特定的日志跟踪特定于相应名称空间的修订。名称空间特定的日志中的行(例如,行402)包括特定于该名称空间的数据,并且每行反映特定于该名称空间的修订。

日志310中的每行(402)包括名称空间标识符字段(ns_id),其用于唯一地标识与该行相关联的名称空间;服务器日志标识符字段(sj_id),其包括映射到给定名称空间中的行的单调地增加的值并且提供操作或修订在该名称空间内的排序。日志310还包括用于标识内容项的名称空间相对路径的路径字段(路径)、用于标识与内容项相关联的块或块列表的块字段(块)、用于标识日志310中的表示内容项的先前状态或修订的行(即,sj_id)的先前修订字段(prev_rev)以及用于标识已安装名称空间的安装点的目标名称空间(如果行对应于安装的话)的目标名称空间字段(target_ns)。对于与安装点不对应的行(例如,修订),不存在针对target_ns字段的数据。

日志310中的第一行402标识名称空间“100”(ns_id100)中“file1”(路径字段值file1)的第一修订(sj_id1),所述第一修订(sj_id1)对应于块“h1”并且没有先前修订(prev_rev)或目标名称空间(target_ns)。由于所述行不包括先前修订或目标名称空间,因此由所述行表示的修订对应于在名称空间“100”处添加与块“h1”相关联的“file1”。日志310中的包含sj_id“4”的行表示日志310中的对名称空间“100”上的“file1”的最后修订,因为该行是日志310中的对应于名称空间“100”上的“file1”的最后的行或sj_id。包含sj_id“4”的该行指示名称空间“100”上的“file1”在被添加到sj_id“1”中之后被编辑,并且所述编辑对应于块“h4”。

修改404描绘了表示修订322的修改的实例。在这个实例中,修改404中的每一个示出来自日志310中的对应行(402)的内容修订。每个修改对应于日志310中的sjid和nsid,以及与日志310中对应的sjid和nsid相关联的文件。在这个实例中,与修改404相关联的内容表示日志310中的块(例如,“h1”、“h2”、“h3”、“h4”)的示例性内容值。出于说明目的提供修改404中的内容值,以描绘对与每个修订相关联的内容的示例性修改。

例如,修改404中的第一修改表示日志310中的sjid“1”和nsid“100”,并且描绘了在名称空间“100”中添加“file1”。内容“aaa”表示在nsid“100”的sjid“1”处“file1”的“h1”值。修改404还描绘了对表示日志310中的sjid“4”和nsid“100”的名称空间“100”中的“file1”的编辑,其示出将与名称空间“100”中的“file1”相关联的内容“aaa”(例如,“h1”)修改成“aa2”(例如,“h4”)。

在转换320中,将来自日志310中的行402的修订322转变成线性化操作324a。线性化操作324a是根据日志310中的修订322生成并且表示线性化之后的修改404。如线性化操作324a所示,线性化操作324a中的操作可基于多个修订(322)和/或修改(404),或单一修订(322)和/或修改(404)。

例如,修改404描绘了将“file1”添加到对应于日志310中的sjid“1”和nsid“100”的名称空间“100”的修订和编辑对应于日志310中的sjid“4”和nsid“100”的名称空间“100”中的“file1”的修订。可从与“file1”和nsid“100”相关联的内容值“aaa”(例如,“h1”)以及缺少“file1”和nsid“100”的任何先前修订来推断添加修订。换句话讲,内容“aaa”指示内容(例如,“h1”)已被添加或编辑,并且缺少对“file1”和nsid“100”的先前修订表明内容“aaa”表示内容(例如,“h1”)被添加而不是被编辑。可从与“file1”和nsid“100”相关联的内容值“aa2”(例如,“h4”)和与“file1”和nsid“100”相关联的先前修订(sjid“1”和nsid“100”)来推断编辑修订。换句话讲,从与“file1”和nsid“100”相关联的内容“aaa”改变到“aa2”表明内容“aa2”表示编辑。

在线性化操作324a中,可将对应于针对nsid“100”的sjid“1”和sjid“4”的添加和编辑修改(404)转变成单一线性化操作(编辑操作),所述单一线性化操作将与“file1”相关联的内容值从“aaa”(例如,“h1”)编辑到“aa2”(例如,“h4”)。将“file1”的内容(例如,“h1”)编辑成“aa2”(例如,“h4”)的单一线性化操作反映了将与内容“aaa”(例如,“h1”)相关联的“file1”添加到名称空间“100”的修改以及将与名称空间“100”中的“file1”相关联的内容“aaa”(例如,“h1”)编辑成“aa2”(例如,“h4”)的修改。因此,该线性化操作是基于两个修改404和修订322中的两个对应的修订。

修改404中的对应于日志310中的sjid“2”和nsid“100”的修改表示将与内容“bbb”(例如,“h2”)相关联的“file2”添加到名称空间“100”的修订。该修改表示对应于名称空间“100”上的“file2”的来自日志310的唯一修订322。因此,线性化操作324a包括针对名称空间“100”上的“file2”的单一操作,所述单一操作将与内容“bbb”(例如,“h2”)相关联的“file2”添加到名称空间“100”并且是基于单一修改404(在名称空间“100”上添加“file2”)和修订322。

在这个实例中,修改404还包括用于将与内容“ccc”(例如,“h3”)相关联的“file3”添加到对应于日志310中的sjid“3”和nsid“100”的名称空间“100”,以及从对应于日志310中的sjid“5”和nsid“100”的名称空间“100”删除“file3”(表示为“-1”)的修改。因此,修订322包括与名称空间“100”上的“file3”相关联的两个修改404。由于日志310中的与“file3”和命名空间“100”相关联的最后修订对应于表示日志310中的sjid“5”和nsid“100”的删除修改,因此与“file3”和命名空间“100”相关联的从修订322的添加和删除修改404可被线性化成从名称空间“100”删除“file3”的单一操作。因此,线性化操作324a包括针对“file3”和名称空间“100”的单一操作,所述单一操作是从名称空间“100”删除“file3”的单一操作。

日志310中的针对nsid“100”的sjid“6”和“7”以及针对nsid“101”的sjid“1”表示将“dir”添加到名称空间“100”,并且之后从名称空间“100”移动到名称空间“101”。例如,sjid“6”和nsid“100”标识“dir”和名称空间“100”并且不包括先前的修订,这指示“dir”在sjid“6”处已被添加到名称空间“100”。sjid“7”标识“dir”从名称空间“100”移动到名称空间“101”,如由块字段(“-“)、先前的修订字段(sjid“6”)和目标名称空间字段(“101”)所反映的。然后,针对nsid“101”的sjid“1”标识将“dir”添加到名称空间“101”,如由缺少针对“dir”和名称空间“101”的先前行或修订所指示的。nsid“100”中的sjid“6”和“7”以及nsid“8”中的sjid“1”的添加和移动修订通过三个修改404进行描绘:向对应于sjid“6”和nsid“100”的名称空间“100”添加“dir”、从对应于sjid“7”和nsid“100”的名称空间“100”删除“dir”以及向对应于sjid“1”和nsid“101”的名称空间“101”添加“dir”。

将分别对应于日志310中的nsid“100”的sjid“6”和“7”的“dir”和名称空间“100”的添加和删除修改404线性化成从名称空间“100删除“dir”的单一操作,因为日志310中的对应于“dir”和名称空间“100”的最后修订是在sjid“7”和nsid“100”处从名称空间“100”删除“dir”。向对应于日志310中的sjid“1”和nsid“101”的名称空间“101”添加“dir”是对应于“dir”和名称空间“101”的唯一修改404和修订322。因此,在线性化操作324a中将添加提供为针对“dir”和名称空间“101”的单一安装操作。因此,将来自修订322的对应于nsid“100”中的sjid“6”和“7”以及nsid“101”中的sjid“1”的三个修改404(即,“dir”在名称空间“100”上的添加和删除以及“dir”在名称空间“101”上的添加)在线性化操作324a中线性化成如下两个操作:针对“dir”在名称空间“100”中的删除操作和“dir”在名称空间“101”中的安装操作。

如上所述,线性化操作324a包括针对“file1”和名称空间“100”的编辑操作、针对“file2”和名称空间“100”的添加操作、“file3”在名称空间“100”中的删除操作、“dir”在名称空间“100”中的删除操作以及用于将“dir”添加到名称空间“101”的安装操作。线性化操作324a中的这些操作是根据修订322生成并且反映了日志310中每个内容项的最新状态。文件日志接口202可生成线性化操作324a并且将线性化操作324a发送到客户端设备150,以确保客户端设备150包含来自日志310中的修订322的最新状态。

当向客户端设备150提供线性化操作324a时,文件日志接口202可包括光标324b以及对客户端设备150的线性化操作324a。光标324b可标识对日志310中的每个名称空间(nsid)的最后修订(sjid)。在一些实施方案中,光标324b还可包括fsauth令牌,所述fsauth令牌包括用户id以及对在光标中提供的ns_id的最后观察到的访问许可权。对每个名称空间的最后修订可指示日志310中对应于发送给客户端设备150的对每个名称空间的最新修订。

在一些情况下,光标324b还可将线性化操作324a中的每个操作映射到日志310中的名称空间(nsid)和行(sjid)。与操作相关联的名称空间和行可指示日志310中对应于操作的位置。换句话讲,与操作相关联的名称空间和行可指示由该操作表示的日志310中的修订号。光标324b中的名称空间和行对应于与线性化操作324a相关联的每个名称空间和内容项的日志310中的最新状态。光标324b可作为客户端设备150的工具提供给客户端设备150,以在尝试从客户端设备150向一个或多个名称空间和/或内容项应用改变(例如,通过操作数据302)时向文件日志接口202标识由客户端设备150获得的针对一个或多个名称空间和/或内容项的最新状态或修订。当文件日志接口202从客户端设备150接收到光标324b时,它可使用光标324b来标识客户端设备150在日志310处的位置(例如,由客户端设备150获得的来自日志310的最新修订),并且检测或避免由来自客户端设备150的操作引起的冲突。

例如,如果文件日志接口202从客户端设备150接收到修改命名空间“100”中的“file1”的操作,则文件日志接口202可使用从客户端设备150接收的光标324b以及操作来检查与来自客户端设备150的光标324b中标识的修订相比,日志310对名称空间“100”中的“file1”是否具有更新的修订。如果光标324b中的修订是日记310中的最新修订,则文件日记接口202可将编辑操作提交为日志310中的对名称空间“100”中的“file1”的新修订(例如,nsid“100”中的sjid“8”)。

可替代地,如果光标324b中的修订不是日志310中的对名称空间“100”中“file1”的最新修订,则文件日志接口202可确定来自客户端设备150的编辑操作不是基于日志310中的对名称空间“100”中“file1”的最新版本。例如,如果光标324b在日志310中标识sjid“4”和nsid“100”,并且文件日志接口202确定日志310在sjid“12”和nsid“100”处包括对名称空间“100”中“file1”的修订,则文件日志接口202可确定来自客户端设备150的编辑操作与名称空间“100”上“file1”的较旧版本(例如,sjid“4”和nsid“100”)有关,并且编辑操作可造成冲突,因为它编辑的文件已被修改。文件日志接口202可检测到由编辑操作造成的该冲突并且拒绝编辑操作,尝试协调冲突,或者向客户端设备150提供最新修订并且允许客户端设备150协调冲突。

每当文件日志接口202向客户端设备150发送线性化操作时,它可包括如本文所述的光标,所述光标针对每个名称空间和/或内容项在日志310中标识相应位置。类似地,每当客户端设备150向文件日志接口202发送操作时,它可包括其最新光标,文件日志接口202可使用所述最新光标来使客户端设备150处的状态与日志310处的状态映射。

在这个实例中,日志310描绘具有多个名称空间的日志。如前所述,在一些实例中,服务器文件日志148可维持名称空间特定的日志。光标324b可包括用于每个名称空间的sjid和nsid,以指示对每个名称空间的最新修订。如本文进一步所解释,基于光标324b,在维持多个日志的实施方案中,文件日志接口200可查询多个日志,和/或从多个日志检索修订。

图4b示出用于线性化410以将来自从客户端设备150的操作数据302转变成对服务器文件日志148处日志310的修订322的示例性过程的图。客户端设备150可将操作数据302提供给文件日志接口202。在这个实例中,操作数据302包括客户端设备150处的操作412,诸如内容项编辑操作、添加操作、重命名操作、移动操作、安装操作或删除操作。在一些情况下,操作412可包括对相同内容项的多个操作。例如,操作412可包括编辑名称空间“100”上的“file4”的操作和从名称空间“100”删除“file4”的操作。

操作数据302还包括先前由客户端设备150从文件日志接口202接收的光标324b。光标324b可标识日志310中针对一个或多个名称空间和/或内容项的状态(例如,nsid和sjid)或最新修订。客户端设备150可将光标324b提供给文件日志接口202作为操作412的参考点。在这个实例中,光标324b提供名称空间“100”的最新状态,其由sjid“9”表示。

在一些情况下,光标由内容管理系统110加密签名,这允许文件日志接口202确定光标未被篡改。此外,由于客户端设备150在其已从服务器文件日志148接收到对名称空间的最新修订时向服务器文件日志148提交修订,因此文件日志接口202可接受最后观察到的对ns_id的访问许可权仍然有效,并且因此,客户端设备150有权访问名称空间。

文件日志接口202可接收操作412和光标324b并且执行线性化410,以将操作412从客户端设备150线性化和变换到对日志310的修订322。基于操作412,文件日志接口202可生成操作的日志记录414。日志记录414可包括来自映射到日志310中的相应名称空间的操作412的操作列表。在一些情况下,日志记录414可包括根据操作412生成的如前所述的线性化操作(324a)。

文件日志接口202可使用光标324b来在更新日志310以反映日志记录414中的操作之前,验证操作412反映日志310中的最新状态或修订。如果文件日志接口202确认光标324b反映日志310中针对与日志记录414相关联的名称空间和/或内容项的最新状态或修订,则文件日志接口202可基于日志记录414向日志310添加修订322。修订322可包括与日志记录414中的操作相关联的每个内容项和/或名称空间的最新状态或修订。

日志记录414中的操作包括针对”file5”的添加和编辑操作。因此,修订322包括对”file5”的编辑,文件日志接口202可将所述对”file5”的编辑作为”file5”的最新状态(即,将添加和编辑操作以线性化方式应用到”file5”之后的状态)写入日志310。日志记录414中的操作还包括针对“dir2”的添加操作以及针对名称空间“100”上的“file4”的编辑和删除操作。因此,修订322可包括将“dir2”添加到名称空间“100”的操作以及从名称空间“100”删除“file4”的操作分别作为“dir2”和“file4”的最新状态。

在图4b中,日志310中描绘的修订(322)反映与操作412相关联的每个内容项(“file4”、“file5”、“dir2”)的最新状态。然而,应当注意,在一些情况下,文件日志接口202可将由日志记录414表示的每个修订写入日志310,以便不但反映由日志记录414导致的每个名称空间和/或内容项的最新状态修订,而且反映导致最新状态或修订的任何先前状态或修订。例如,文件日志接口202可在日志310中写入针对“file4”的编辑的修订和针对“file4”的删除的后续修订,而不是仅写入反映来自操作412的最新状态的“file4”的编辑,以在日志310中指示来自操作412的“file4”修订的完整序列。

文件日志接口202可将日志记录414中的操作变换成修订322,并且将日志310更新成包括修订322。文件日志接口202可将对日志310的修订322写入日志310中的相应行处。文件日志接口202可将修订322添加到日志310中的下一个可用行(例如,sjid)。在一些情况下,文件日志接口202可基于相对顺序来添加修订322,所述相对顺序可基于线性化410和/或相应的时间戳或时钟来确定。

如图4b所示,名称空间“100”中的“file4”的删除操作包括在行“11”或名称空间“100”的sjid“11”中。日志310的sjid“11”中的修订指示名称空间“100”中的“file4”已被删除,如由块字段中的减符号所反映,并且将sjid“9”标识为日志310中的对名称空间“100”中的“file4”的先前修订。“dir2”的添加和“file5”的编辑分别包括在行或sjid12和14中。

图4b中的日志310已被更新为包括基于日志记录414和光标324b的修订322,以反映在日志记录414中修改的每个内容项的状态。日志310中的每行的路径字段标识相关联的名称空间(例如,名称空间“100”)内的内容项。行的路径字段是基于来自日志记录414中对应操作的文件和名称空间。日志310中的块字段表示内容项。在一些情况下,块字段可包括相应内容项或数据块的哈希。如果内容项已被删除和/或是目录、文件夹、安装项等,则块字段可为空。

当基于日志记录414和光标324b将日志310更新成包括修订322时,转换服务204可将每个内容项的路径标识成包括在日志310的路径字段中。在一些情况下,转换服务204可将内容项的标识符(例如,文件id)转换成内容项的路径(例如,/目录/文件名)。例如,客户端设备150可使用标识符来标识内容项(例如,操作数据302中的内容项目),而无需跟踪或计算内容项的相应路径。日志310可作为替代使用内容项的路径来标识内容项。转换服务204可使用来自客户端设备150的内容项的标识符来计算日志310的内容项的路径,并且使用针对内容项计算的路径来更新日志310。转换服务204还可执行反向转换,以基于内容项的路径获得内容项的标识符,并且在与客户端设备150通信中引用内容项时使用内容项的标识符。

例如,转换服务204可使用日志310中的路径、日志310中的nsid和/或日志310中的目录字段(或服务器文件日志148中的其他地方)来标识内容项并且获得该内容项的标识符(例如,文件id)。如果文件日志接口202向客户端设备150发送与该内容项有关的更新或信息,则文件日志接口202可将内容项的标识符提供给客户端设备150,客户端设备150可使用所述标识符来在具有或不具有内容项路径的情况下标识内容项。

如先前所提及的,在将修订322从操作412写入日志310之前,文件日志接口202可检查光标324b是否反映日志310中针对与操作412相关联的每个名称空间和/或内容项的最新状态或修订。在一些情况下,在确认光标324b反映日志310中的最新状态或修订之后,文件日志接口202也可执行第二次检查以确保根据操作412生成的修订将不会与日志310中的现有修订冲突。例如,如果日志310处的名称空间“100”中的sjid“5”表示“file5”的删除操作,则sjid“14”中描绘的从文件日志接口202从客户端设备150接收的操作412发出的“file5”的编辑修订322将通过尝试编辑”file5”而造成冲突,即使”file5”在sjid“5”处被删除。因此,在这个实例中,文件日志接口202可拒绝编辑操作和修订,并且向客户端设备150传达编辑操作无效。文件日志接口202可更新光标324b并且将更新的光标提供给客户端设备150,以根据需要通知客户端设备150日志310中针对”file5”(以及任何其他内容项)的最新状态或修订。

图5a示出跨名称空间操作的示例性线性化的图。跨名称空间线性化和跨分片或跨名称空间列表可通过时钟排序来执行。表502a、502b(统称为“502”)示出针对线性化的一批跨名称空间操作。表502a、502b分别包括列506a、508a,所述列506a、508a是用于标识表502a、502b中的记录的名称空间的名称空间(nsid)字段;列506b、508b,所述列506b、508b是用于标识表502a、502b中的针对列506a、508a中相应名称空间的行或sjid的sjid字段;列506c,508c,所述列506c,508c是用于标识与每个sjid相关联的操作的操作字段;以及列506d,508d,所述列506d,508d是用于标识与列506c、508c中的操作相关的时间戳的时钟字段。

在这个实例中,表502a描绘nsid“1”的sjid“100”和“101”。sjid“100”与在时间戳“1000”处向名称空间“1”添加“foo.txt”的操作相关联,并且sjid“101”与在时间戳“1001”处安装名称空间“2”的操作相关联。表502b描绘nsid“2”的sjid“1”和“2”。sjid“1”与在时间戳“500”处向名称空间“2”添加“bar.txt”的操作相关联,并且sjid“2”与在时间戳“1002”处编辑“bar.txt”的操作相关联。

线性化程序(例如,转换服务204)可获得表502中的这批操作,并且利用光标(514)发出单一操作流(512)。线性化程序可标识在表502中具有至少一个操作的所有名称空间,并且基于相应的时间戳、nsid、sjid来使针对所有名称空间的操作线性化。在这个实例中,表502中的这批操作被线性化为表504中所示的操作流。

表504包括:nsid列510,所述nsid列510包括用于标识每个操作的名称空间的nsid字段;操作列512,所述操作列512包括用于标识表504中的操作的操作字段;以及光标列514,所述光标列514包括用于标识每个操作的光标状态的光标字段。表504中的行504a包括来自表502a中的名称空间“1”的sjid“100”的添加操作。行504a的光标列514中的光标状态是名称空间“1”和sjid“100”,这指示添加操作对应于表502a中所示的名称空间“1”中的sjid“100”。表504中的行504b不包括nsid列510或操作列512中的值,但是将光标列514中的光标状态更新成包括跨名称空间光标状态,在这个实例中,所述跨名称空间光标状态针对名称空间“2”添加sjid“0”。

表504中的行504c包括来自表502a中所示的名称空间“2”中的sjid“1”的添加操作。针对行504c的光标列514中的光标状态包括与行504c中的添加操作相关联的名称空间“1”和“2”的相应的sjid“100”和“1”。如图所示,光标状态指示光标在名称空间“1”中的sjid“100”和名称空间“2”中的sjid“1”处。换句话讲,名称空间“1”中的行或sjid并未增加,因为添加操作不会影响名称空间“1”的状态,但是名称空间“2”中的行或sjid增加了一,因为添加操作表示名称空间“2”中的修订并且影响了名称空间“2”的状态。因此,行504c中的光标状态在名称空间“2”中的sjid“1”处进行添加操作之后,跟踪名称空间“1”和名称空间“2”的相应的sjid。

表504中的行504d包括在表502a的sjid“101”和名称空间“1”处的安装操作。安装操作将名称空间“2”安装在名称空间“1”处。安装操作将名称空间“1”中的sjid从“100”增加到“101”,但不会增加名称空间“2”中的sjid。因此,行504d的光标列514中的光标状态包括用于名称空间“1”的sjid“101”,并且保持用于名称空间“2”的sjid“1”。该光标状态反映名称空间“1”和“2”处的状态和/或顺序。

表504中的行504e包括在表502a中的sjid“2”和名称空间“2”处的编辑操作,根据安装操作和编辑操作的相应时间戳,所述编辑操作在名称空间“1”中的sjid“101”处的安装操作之后进行。行504e的光标列514中的光标状态将针对名称空间“1”的光标状态维持在sjid“101”处,但将针对名称空间“2”的光标状态增加到sjid“2”。

如表504所示,操作512被列出为基于跨名称空间“1”和“2”的因果关系和时间戳线性化的操作流。一旦在表504中使操作512线性化以反映跨名称空间的因果关系和定序,就可将操作512转变成服务器文件日志148中的修订(例如,日志310中的修订322)并且写入服务器文件日志148。

例如,可将服务器文件日志148中的名称空间“1”的日志更新成包括sjid“100”处的修订和sjid“101”处的修订,所述sjid“100”处的修订表示将“foo.txt”添加到名称空间“1”的添加操作,所述sjid“101”处的修订表示在名称空间“1”上安装名称空间“2”的安装操作。此外,可将服务器文件日志148中的名称空间“2”的日志更新成包括sjid“1”处的修订和sjid“2”处的修订,所述sjid“1”处的修订表示将“bar.txt”添加到名称空间“2”的添加操作,所述sjid“2”处的修订表示编辑名称空间“2”上的“bar.txt”的编辑操作。

兰波特时钟

图5b示出基于兰波特时钟事件跨名称空间的排序的图。在这个实例中,跨名称空间nsid1、nsid2和nsid3已经执行各种操作。每个名称空间维持该名称空间处的每个操作的sjid,以便确定操作在名称空间内的排序。然而,名称空间的sjid不会标识操作跨名称空间的排序和因果关系。因此,针对名称空间nsid1、nsid2、nsid3中的操作计算兰波特时钟,以确定因果关系并且获得操作的跨命名空间排序。

在nsid1处,操作510具有sjid1和时钟1。在nsid2处,操作516具有sjid1和时钟1。在nsid处,操作520具有sjid1和时钟1。操作510、516、520跨越多个名称空间并且不具有因果关系。因此,操作510、516、520不会影响彼此的时钟。

可基于名称空间处的sjid来确定操作在名称空间内的顺序。相同名称空间内的操作的时钟可仅仅递增1。因此,在nsid1中的sjid2处,操作512的时钟递增至2。

nsid1中的操作512是file1移动到nsid2。因此,操作512在nsid2处触发操作518,所述操作518是在nsid2处添加file1。由于nsid2处的操作518有因果地取决于来自不同名称空间的另一个操作,即,来自nsid1的操作512,因此基于nsid1处的时钟和nsid2处的时钟来计算操作518的时钟。算法可表述为:targetns_clockt1=max(source_nsclock,targetns_clockt0)+1。因此,在这个实例中,用于nsid2处的操作518的时钟为3(例如,max(2,1)+1)。因此,nsid2处的操作518具有sjid2和时钟3。

类似地,在nsid处的操作516是将file2从nsid2移动到nsid1。因此,操作516在nsid1处触发操作522,所述操作522是在nsid1处添加file2。基于时钟算法计算操作522的时钟,所述时钟等于3。因此,操作522在nsid1处具有sjid3和时钟3。

nsid3处的操作524有因果地取决于相同名称空间中的操作,即,nsid3处的操作520。因此,可通过使nsid3处的操作520的时钟递增来计算操作524的时钟。在这个实例中,操作524的时钟因此为2。nsid3处的操作524具有sjid2和时钟2。由于操作524是用于将dir移至nsid1的移动操作,因此操作524触发nsid1处的操作526,从而将dir添加到nsid1。

由于操作526由不同名称空间(nsid3)中的操作524触发,因此基于nsid1处的时钟和操作524的时钟来计算操作526的时钟。因此,操作526的时钟被设置为4(例如,max(2,3)+1)。因此,操作526在nsid1处具有sjid4和时钟4。

nsid1处的操作528将file3添加到nsid1,并且不是跨名称空间操作。因此,通过使nsid1处的时钟递增来计算操作528的时钟。因此,操作528的时钟被设置为5。

操作530有因果地也取决于nsid1内的操作528。因此,通过使nsid1处的操作528的时钟递增来将操作530的时钟设置为6。操作530在nsid1处具有sjid6和时钟6。

操作530是将file3移动至nsid3的移动操作。因此,操作530触发nsid3处的操作532。由于操作532是基于来自不同名称空间的操作,因此其时钟使用时钟算法基于nsid3处的时钟和操作530的时钟来计算。在这种情况下,操作532的时钟被设置为7。因此,操作532在nsid3处具有sjid3和时钟7。

操作534、536不是跨名称空间操作,并且有因果地与nsid3处的操作532相关。因此,可通过使操作530的时钟递增来计算操作534、536的时钟。在这个实例中,操作534、536的时钟分别被设置为8和9。

树数据结构

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

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

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

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

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

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

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

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

当在内容管理系统上进行改变时,内容管理系统生成指定所进行的改变的修改数据,并且将修改数据传输到客户端设备上的客户端同步服务。客户端同步服务基于修改数据来更新表示由内容管理系统存储的内容项的服务器状态的远程树。例如,在远程树610中,表示foo.txt内容项的节点604被示出为已删除。

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

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

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

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

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

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

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

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

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

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

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

使用树数据结构的同步

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

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

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

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

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

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

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

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

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

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

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

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

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

冲突处置

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

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

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

在操作720处,系统可接收被配置来使服务器状态和文件系统状态收敛的一系列操作。所述一系列操作可例如是关于图7a的方法700生成和描述的所述一系列客户端操作或所述一系列服务器操作。

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

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

一旦执行了解决方案动作,系统就可在操作724处基于解决方案和所述一系列操作来生成一系列解决或重建基础操作,并且在操作728处将所述一系列解决操作提供给适当的实体以供执行。例如,如果所述一系列操作是一系列客户端操作,则可将所述一系列解决操作提供给客户端设备。如果所述一系列操作是一系列服务器操作,则可将所述一系列解决操作提供给内容管理服务。另外,方法可顺序地、并行地或以各种不同的次序基于一系列客户端操作和一系列服务器操作执行。

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

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

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

提交协议

图8示出反映客户端设备150处的操作的树数据结构610、620、630的示例性状态。意图806表示操作在客户端设备150处的预期结果。在这个实例中,意图806示出用于在客户端设备150处添加“foo.txt”的添加操作。本地树630已被修改以基于意图806添加节点804。节点804修改本地树630以描绘在根节点802内添加“foo.txt”。如前所述,当意图806与内容管理系统110同步时,客户端设备150可将远程树610和同步树620更新成包括节点804,并且因此在客户端设备150处使树数据结构610、620、630同步。当同步时,树数据结构610、620、630反映客户端设备150处的同步状态。

为了使意图806与内容管理系统110同步,客户端设备150可将意图806提交给内容管理系统110。在这个实例中,客户端设备150向内容管理系统110提交添加“foo.txt”,以便使意图806与内容管理系统110同步。

图9a示出用于向内容管理系统110提交意图806的示例性方法。在步骤902处,客户端设备150上的客户端同步服务156在客户端设备150处记录提交操作(例如,来自意图806的操作)的意图。客户端同步服务156可将提交操作的意图持久地记录在客户端设备150处的磁盘或存储器上以跟踪待决提交。客户端设备150可存储脏提交记录并且跟踪修改,直到事件触发移除一个或多个待决提交(诸如,失败或成功)。

在步骤904处,客户端同步服务156向内容管理系统110(例如,文件日志接口202)提交操作。客户端同步服务156可向内容管理系统110发送请求提交操作的消息。如前所述,消息可包括光标,内容管理系统110可使用所述光标来确定内容项在客户端设备150处的状态以及客户端设备150在服务器文件日志148处的位置。光标可包括例如与客户端设备150相关联的每个名称空间的服务器日志id(sjid)。sjid指示客户端设备150在每个名称空间的服务器文件日志148处的位置,并且因此提供每个名称空间在客户端设备150处的状态。

在步骤906处,客户端同步服务156确定来自步骤904的向内容管理系统110的提交是否成功。在一些情况下,内容管理系统110可响应于提交而自动地向客户端同步服务156发送错误或确认,从而指示提交成功或失败。在一些情况下,客户端同步服务156可联系内容管理系统110以请求确认或错误通知。例如,客户端同步服务156可向内容管理系统110发送请求确认提交成功的消息。

如果提交成功,则内容管理系统110可对客户端同步服务156作出响应,并且通知客户端设备150提交成功。如果提交不成功,则内容管理系统110可响应失败响应或可对来自客户端同步服务156的请求不作出响应。如果客户端同步服务156确定提交失败,则在步骤910处,客户端同步服务156从客户端设备150清除提交操作的意图。如果客户端设备150处的状态相对于服务器文件日志148处的状态已经过时,则客户端同步服务156可接收或请求任何必要的更新,以使客户端设备150处的状态与服务器文件日志148处的状态同步。

如果客户端同步服务156确定提交成功,则在步骤908处,客户端同步服务156将远程树610和同步树620更新成包括节点804,如图8所示。在步骤910处,客户端同步服务156然后从客户端设备150清除提交操作的意图。

通过在步骤906处确定向内容管理系统110的提交是否成功,客户端同步服务156可防止由客户端同步服务156提交操作并且更新其内容和树数据结构(610、620、630),但是提交在内容管理系统110处不成功的场景导致的冲突。这将在客户端设备150与内容管理系统110之间造成状态冲突。

例如,在客户端同步服务156在步骤904处提交操作之后,各种场景可实际上防止在内容管理系统110处成功地处理和应用提交,诸如在客户端设备150或内容管理系统110发生崩溃、网络条件(例如,出现等待时间或拥堵、网络故障等),处理条件(例如,内容管理系统110处出现长队列、内容管理系统110处发生存储器错误等)等等。在步骤906处,客户端同步服务156因此可在决定是否应用操作或清除在客户端设备150处提交的存储或高速缓存意图之前,验证提交是成功还是失败。

检查提交是否成功以及如果提交失败,则清除提交意图还允许客户端设备150将自编写的操作区分开并且避免通过自编写的操作与自身产生冲突。例如,客户端设备150可记录针对客户端设备150编写的任何操作的提交意图以及所述操作是自编写的指示。然后,客户端设备150与内容管理系统110进行检查以在应用操作(例如,更新树数据结构)之前验证提交是否成功。如下面关于图9b进一步描述,内容管理系统110可保证如果它向客户端设备150报告提交意图已经失败或没有被接收,则此类提交意图如果随后被内容管理系统110接收,则随后将不会成功。因此,客户端设备150可类似地保证在客户端设备150指示提交意图失败之后提交不会成功,并且在从内容管理系统110接收到失败或成功确认之后清除所述提交意图。

这可防止例如客户端设备150认为提交操作的尝试失败并且基于内容管理系统110随后批准所述操作来稍后从内容管理系统110接收更新或修订指示的场景。例如,客户端设备150可向内容管理系统110发送提交。如果提交暂时丢失或延迟,则内容管理系统110和客户端设备150可认为所述提交失败。如果提交稍后重新出现并且内容管理系统110在客户端设备150已经清除提交意图或以其他方式将提交意图标示为失败之后处理并批准提交,则即使与失败的提交相关联的操作从未被批准,所述操作也可不经意地传播到客户端设备150。客户端设备150可从先前的失败提交接收所述操作并且不会意识到所述操作是其自身的操作并且应用所述操作,从而认为所述操作是从另一个设备生成和同步的。无法将所述操作区分为与先前失败的提交相关联的自编写操作,客户端设备150可应用所述操作并且在相关联的一个或多个内容项或一个或多个名称空间的状态中造成冲突。因此,客户端设备自身的操作可在客户端设备处造成冲突,所述冲突是由客户端设备使其自身操作失败并且随后在认为所述操作是另一个设备生成并且传播到客户端设备的新修订的情况下应用相同操作导致的。

图9b示出用于在内容管理系统110处处理提交的示例性方法。在步骤920处,文件日志接口202监控来自客户端设备(例如,客户端设备150)的提交请求。在步骤922处,文件日志接口202从客户端设备150(例如,客户端设备156)接收提交操作的请求。所述请求可标识与提交相关联的操作和与客户端设备150相关联的光标。例如,所述请求可以是来自客户端同步服务156的提交意图806的请求,如图9a所示。因此,所述请求可标识对应于图8所示的意图806的添加操作(例如,添加“foo.txt”)和客户端设备150处的光标。客户端设备150处的光标可以是由客户端设备150从文件日志接口202接收的最后或最新光标。

如前所述,光标可标识客户端设备150在服务器文件日志148处的位置,所述位置反映了相对于每个名称空间中的每一个在服务器文件日志148处的修订或状态,每个名称空间在客户端设备150处的最新修订或状态。例如,光标可标识每个名称空间在客户端设备150处的服务器文件日志标识符(sjid)。名称空间的sjid指示由客户端设备150获得的该名称空间的最新sjid(例如,行、修订或状态)。光标因此可指示客户端设备150是否已经接收到服务器文件日志148中对客户端设备150处的每个名称空间的最新修订。

响应于提交操作的请求,在步骤924处,文件日志接口202检查与来自客户端设备150的提交相关联的光标。在步骤926处,文件日志接口202确定光标是否在头部。在此,文件日志接口202确定由光标标识的对光标中的每个名称空间的修订(sjid)是否是服务器文件日志148上对该名称空间的最新修订。

例如,如果光标标识名称空间2的sjid50,则文件日志接口202确定sjid50是否是服务器文件日志148(例如,日志310)中名称空间2的最新sjid(例如,最新行或修订)。如果这样,则来自客户端设备150的光标在头部,这意味着对于客户端设备150处的每个名称空间,它在服务器文件日志148的端部,这指示客户端设备150已获得服务器文件日志148中对客户端设备150处的每个名称空间的最新修订或状态。如果不是,则来自客户端设备150的光标不在头部,这意味着对于客户端设备150处的每个名称空间,它不在服务器文件日志148的端部,这指示客户端设备150尚未获得服务器文件日志148中对客户端设备150处的每个名称空间的最新修订或状态。换句话讲,客户端设备150处的与一个或多个名称空间相关联的内容项已经过时。

如果光标不在头部,则在步骤928处,文件日志接口202拒绝来自客户端设备150的提交。例如,基于光标不在头部,文件日志接口202可确定与来自客户端设备150的提交相关联的操作修改了过时(例如,不能反映服务器文件日志148处的最新修订)的一个或多个内容项和/或一个或多个名称空间,并且可与服务器文件日志148处对该一个或多个内容项和/或一个或多个名称空间的修订造成冲突。因此,文件日志接口202可拒绝提交,以防止与提交相关联的操作造成冲突。文件日志接口202可向客户端设备150发送指示提交已经被拒绝的响应。文件日志接口202还可向客户端设备150发送服务器文件日志148中的最新修订或状态,或提示客户端设备150执行更新。

如果光标在头部,则在步骤930处,文件日志接口202可接受提交。在一些情况下,文件日志接口202可执行另一项检查,以验证操作在接受提交之前将不会造成冲突。例如,除确定光标在头部之外,文件日志接口202还可将由与提交(例如,意图806)相关联的操作反映的修订与服务器文件日志148处的修订进行比较,以验证即使光标在头部,所述操作也将不会造成冲突。为了示出,假设操作是针对文件的删除操作,并且文件日志接口202确定光标在头部。在接受提交之前,文件日志接口202可验证服务器文件日志148包括将文件添加到特定名称空间的先前修订。如果文件日志接口202确定服务器文件日志148不包括用于将文件添加到名称空间的修订,则文件日志接口202可标识删除操作与缺少添加修订之间的冲突。然后,文件日志接口202可拒绝提交,协调冲突,和/或要求客户端设备150协调冲突。

在接受提交之后,在步骤932处,文件日志接口202基于提交来更新服务器文件日志148。例如,文件日志接口202可将反映与提交相关联的操作的修订写入服务器文件日志148。文件日志接口202可将操作转换成修订,如前所述,并且写入对与所述操作相关联的名称空间的修订。

在步骤934处,文件日志接口202可确定它是否从客户端设备150接收到确认请求。例如,客户端设备150可向文件日志接口202发送针对确认提交的请求,以便确定提交是成功还是失败。在步骤936处,文件日志接口202可对来自客户端设备150的确认请求作出响应。文件日志接口202可通知客户端设备150提交的状态,包括提交是成功还是失败。

在步骤938处,文件日志接口202可撞击与客户端设备150相关联的光标。例如,假设来自客户端设备150的光标在客户端设备150处将名称空间1的sjid6标识为名称空间1的最新修订并且与提交相关联的操作对应于名称空间1。文件日志接口202可使与名称空间1相关联的光标从sjid6撞击到sjid7。文件日志接口202可将更新的光标提供给客户端设备150,并且客户端设备150可将更新的光标用于将来的提交。

文件日志接口202可在更新服务器文件日志148之后或在从客户端设备150接收到确认请求之后撞击光标。在一些情况下,即使文件日志接口202不接受与确认请求相关联的提交,文件日志接口202也可在从客户端设备150接收到确认请求之后撞击光标。例如,如果文件日志接口202从客户端设备150接收到确认请求,则即使文件日志接口202从未接收或批准相关联的提交请求,它也可基于所述确认请求来撞击光标。通过撞击光标,文件日志接口202可保证一旦它向客户端设备150指示尚未接受或记录提交,所述提交就将不会随后被接受或记录。

例如,当客户端设备150向文件日志接口202发送提交的请求时,在一些情况下,请求可能由于各种原因(诸如网络或计算问题(例如,等待时间,拥堵,崩溃、客户端任务取消等))而暂时丢失或延迟。因此,文件日志接口202可能在晚于预期之前不会接收到提交请求。例如,文件日志接口202可从客户端设备150接收确认请求,对确认请求作出响应,以仅稍后从客户端设备150接收提交的原始请求。在这个实例中,如果文件日志接口202在具有未记录、接收或批准提交的指示的情况下对客户端设备150作出响应并且随后接收并批准/记录所述提交,则此类提交可在内容管理系统110与客户端设备150处的状态之间造成冲突。

因此,为了保证当文件日志接口202告诉客户端设备150并未记录或批准提交时,此类提交即使随后由文件日志接口202接收,也将不会在稍后提交,文件日志接口202可撞击光标以在丢失或延迟提交重新出现的情形下确保它将被拒绝。例如,当文件日志接口202在响应于客户端设备150并未记录或批准提交之后接收到提交请求时,文件日志接口202检查光标是否在头部,如步骤926中所述。由于自从客户端设备150初始地发送提交请求以来,文件日志接口202已经撞击光标,因此文件日志接口202将确定与提交请求相关联的光标不在头部,并且之后拒绝提交请求,如步骤928中所述。因此,文件日志接口202可防止由在处理或传输期间延迟或丢失的提交导致的冲突或错误。换句话讲,如果当光标被撞击时并未批准或接收到提交,则撞击光标将确保此类提交从未被批准或记录。

如前所述,这也防止在客户端设备150处来自自编写操作的冲突发生。例如,如果客户端设备150使在客户端设备150处的提交意图失败,则撞击光标将确保失败的提交随后不会被文件日志接口202记录并且传播到客户端设备150。

撞击光标还可防止可用其他方法(诸如,客户端设备150和/或文件日志接口202可重试失败的提交的“再次提交”方法)潜在地造成各种修改或提交竞赛。以下是通过撞击光标防止的这种竞赛或条件的非限制性实例。

客户端设备150记录向块列表a添加“foo.txt”的意图806。来自客户端设备150的提交请求被分派到文件日志接口202,但是在网络处被延迟。此外,客户端设备150在发送提交之后崩溃。客户端设备150然后返回在线,并且在恢复模式下尝试重新提交添加。文件日志接口202拒绝提交,因为“foo.txt”在其他地方已经是最新。客户端设备150将拒绝的提交解释为其自己正在运行的提交已经失败的证据,并且因此清除在客户端设备150处提交高速缓存/日志记录的意图。然后,客户端设备150将客户端设备150上的“foo.txt”编辑到块列表b。“foo.txt”被另一个用户或设备远程删除。然后,来自客户端设备150的针对意图806的原始提交请求到达文件日志接口202并且被文件日志接口202接受。客户端设备150然后以与向块列表b编辑“foo.txt”相同的路径从文件日志接口202撤回(pull)向块列表a添加“foo.txt”。客户端设备150现在向块列表b编辑“foo.txt”与其自己先前向块列表a添加“foo.txt”之间具有冲突。因此,客户端设备150自身无意地发生了冲突。

通过撞击光标将防止出现这种示例性场景。例如,当文件日志接口202稍后接收到向块列表a添加“foo.txt”的提交时,文件日志接口202检查光标并且确定光标不在头部(例如,步骤926),因为自从客户端设备150发送提交以来光标已经被撞击。然后,文件日志接口202将拒绝提交,并且防止客户端设备150从文件日志接口202撤回向块列表a添加“foo.txt”。因此,一旦客户端设备150确定提交已经失败并且清除了提交高速缓存/日志记录的意图,就保证所述提交永远不会成功。因此,文件日志接口202和客户端设备150可保证客户端设备150在先前实例中编辑“foo.txt”之后,将不会撤回向块列表a添加“foo.txt”,并且在相同路径处在向块列表a添加“foo.txt”与向块列表b编辑“foo.txt”之间造成冲突。

树数据结构的再同步

图10示出用于在客户端设备150处重构树数据结构(例如,610、620、630)的示例性再同步过程。如前所述,树数据结构(610、620、630)在客户端设备150处用于持久化关于在客户端设备150与内容管理系统110之间同步的内容项的元数据和状态信息。如果需要,再同步过程在此可在客户端设备150处重构树数据结构。例如,如果客户端设备150处的树数据结构和持久化的元数据被损坏或损毁,则再同步过程可在客户端设备150上重建树和元数据,并且使客户端设备150处的本地状态与内容管理系统110处的远程状态再同步。

在一些情况下,如果客户端设备150遇到严重的同步问题或错误,则它可通过在客户端设备150处清除和重构树和元数据而不是尝试修复当前树和元数据的任何问题而更容易或更好地恢复。再同步过程允许清除和重构树和元数据以解决此类问题。

在步骤1002处,触发再同步过程以用于根据与内容管理系统110处的用户账户相关联的内容项的当前状态在客户端设备150处构造树数据结构(610、620、630)。如果客户端设备150处的树和元数据丢失或被损坏,或者同步服务遇到可通过在客户端设备150处重建树和元数据而解决的问题,则可触发再同步过程。

一旦再同步过程被触发,客户端设备150就可进入再同步过程的阶段1。阶段1可被称为用于重构本地树(例如,630)和远程树(例如,610)的“再同步哈希和列表”阶段。在步骤1004处,客户端设备150(例如,客户端同步服务156)基于客户端设备150处的内容项来构造本地树(例如,630)。再同步过程不同于新安装场景,因为它涉及客户端设备150具有来自先前安装的现有内容项,但是遇到重构内容项的树和元数据的需要的情况。因此,内容项可在客户端设备150处提供本地文件系统状态的快照,再同步过程可使用所述快照来重构本地树。可稍后使在内容项与远程状态之间的任何改变同步,如下所述。

具体地,客户端设备150可爬取客户端设备150处的内容项并且对所述内容项进行索引以生成本地树。本地树反映客户端设备150处的本地文件系统状态。在一些情况下,客户端设备150执行重新索引操作并且哈希在客户端设备150处找到的内容项。然后,客户端设备150基于其在客户端设备150处找到的内容项来生成本地树。本地树可包括表示在客户端设备150处找到的每个内容项以及内容项元数据(例如,文件名、文件id、目录id等)的节点,如前所述。每个节点可存储其相关联的内容项或阻止列表的哈希和/或内容项元数据。

在步骤1006处,客户端设备150可基于内容管理系统110处的状态在客户端设备150处构造远程树。客户端设备150可从内容管理系统110接收远程快照,所述远程快照提供内容项的远程状态。客户端设备150可处理远程更新,直到其达到当前或最新状态为止。客户端设备150可向内容管理系统110发送列表请求,以确定内容管理系统110处的状态和修订。内容管理系统110可将如前所述指示内容管理系统110上服务器文件日志148处的状态或修订的光标返回至客户端设备150。当客户端设备150的后续列表请求返回相同的光标时,客户端设备150可确定已经接收到来自内容管理系统110的所有更新并且客户端设备150处的远程状态是最新的。

基于来自内容管理系统110的远程更新,客户端设备150构造远程树以反映来自内容管理系统110的远程快照。一旦本地树和远程树已被构造,客户端设备150就可移动至再同步过程的阶段2。客户端设备150可在阶段2期间“冻结”本地树和远程树,以防止在客户端设备150处理阶段2时改变。在一些情况下,客户端设备150可防止在阶段1和阶段2期间将任何改变提交给内容管理系统110或尝试重构远程改变。

阶段2可被称为用于生成同步树(例如,620)的“重新关联”阶段。在步骤1008处,客户端设备150比较本地树和远程树以标识在本地树与远程树之间的任何匹配。在步骤1010处,基于所述比较,客户端设备150构造同步树。同步树可以是本地树的与远程树匹配的前缀。同步树可包括本地树与远程树之间共同的任何节点或信息。因此,同步树可表示本地树与远程树之间一致的任何状态或元数据。因此,同步树可提供基线状态或真实情况,并且标识本地状态和远程状态的不同部分。

在一些情况下,可在远程树中搜索本地树中的每个节点。如果匹配项被标识,则将所述节点添加至同步树。例如,可基于内容项的唯一标识符(例如,文件id)和/或其他元数据(诸如文件名、目录标识符等)在远程树中搜索本地树中的每个内容项。当在远程树中找到本地树中的内容项时,将所述内容项添加至同步树。

在一些实例中,客户端设备150针对本地树中的每个文件标识符检查在远程树中是否找到文件标识符和/或其目录标识符、文件名、元数据等。如果本地树中的节点(例如,文件标识符、目录标识符、文件名、元数据等)与远程树中的另一个节点匹配,则可将匹配的节点添加至同步树。通过使本地树与远程树之间的节点匹配,客户端设备150可迭代地构造同步树。

如果在远程树中找不到针对本地树中的节点或文件标识符的匹配,则客户端设备150可从同步树中排除所述节点。在一些情况下,如果在远程树中找不到针对本地树中的节点或文件标识符的匹配,则客户端设备150可查询内容管理系统110以确定内容管理系统110是否具有含有对应于节点属性(例如,文件标识符、目录标识符、文件名和/或元数据)的内容项的任何记录。例如,客户端设备150可基于与本地树中的节点相关联的文件标识符、目录标识符、文件名和/或元数据来查询内容管理系统110,以确定内容管理系统110是否具有曾经具有此类属性(例如,文件标识符、目录标识符、文件名、元数据等)的内容项的记录。内容管理系统110可接收查询并且在服务器文件日志148中执行搜索以确定服务器文件日志148是否具有含有特定文件标识符、目录标识符、文件名和/或元数据的内容项的任何记录。如果内容管理系统110标识用于内容项的匹配记录,则客户端设备150可将来自本地树的对应的节点添加至同步树。

为了示出,客户端设备150可询问内容管理系统110服务器文件日志148上是否曾经存在给定的元组(例如,文件标识符、目录标识符、文件名和/或元数据)。文件日志接口202可检查服务器文件日志148上的日志(例如310)中的任何行是否对应于给定元组中的文件标识符。服务器文件日志148上日志中的行可提供相应的文件标识符、文件名、目录标识符和/或元数据。文件日志接口202可过滤行中与给定元组中的文件标识符、目录标识符、文件名和/或元数据匹配的条目。如果文件日志接口202标识日志中包含文件标识符和/或文件名的行,则文件日志接口202可验证该行的目录标识符字段中的值是否与给定元组中的目录标识符匹配。目录标识符字段允许文件日志接口202确定匹配行中的文件名或文件标识符的路径是否与给定元组中的路径匹配。如果文件日志接口202标识用于文件标识符和/或文件名的匹配行并且确定给定元组中的文件标识符或文件名的路径与匹配行中的路径匹配,则文件日志接口202可通知客户端设备150服务器文件日志148具有驻留在相同路径处的相同内容项的先前记录。然后,客户端设备150可将与该内容项和路径相关联的节点添加至同步树。

一旦在将本地树中的每个节点与远程树中的节点和/或内容管理系统110上的记录进行比较之后,同步树已经被构造,客户端设备150就可移动至再同步过程的阶段3。

在阶段3中,在步骤1012处,客户端设备150基于本地树、远程树和同步树执行递增同步。如果本地树在阶段1处被构造时反映了完全同步的状态,则本地树、远程树和同步树应相同并且完全同步。在这种情况下,递增同步可能是不必要的。

如果在步骤1010处构造的同步树指示远程状态与本地文件系统状态之间的冲突,则客户端设备150标识远程状态和本地文件系统状态中的任何差异并且执行递增同步以使远程状态和本地文件系统状态收敛并且解决冲突,如先前关于图7a和图7b所描述。在递增同步之后,本地树、远程树和同步树应相同并且完全同步。

图11示出如先前在图10中描述的再同步过程的图。在客户端设备150处已触发再同步过程之后,图从阶段1(例如,步骤1004、1006)开始。在这个实例中,在阶段1处,客户端设备150基于客户端设备150处的内容项来构造本地树630,并且基于与客户端设备150相关联的内容项在内容管理系统110上的远程状态来构造远程树610。因此,当再同步过程被触发时,本地树630反映本地文件系统状态,并且远程树610反映在内容管理系统110上服务器文件日志148中对应的状态。

本地树630包括根节点1102和节点1104,所述根节点1102对应于客户端设备150处的根目录,所述节点1104对应于根目录内的子目录或文件夹“/bar”。根节点1102和节点1104可存储相应的内容或阻止列表哈希,所述相应的内容或阻止列表哈希可唯一地标识与每个节点以及相应的元数据(诸如文件标识符、目录标识符、文件名、修订编号、内容属性、时间戳等)相关联的内容(或改变)。

远程树610包括根节点1102、节点1104和节点1106,所述节点1106对应于存储在内容管理系统110处“/bar/”内的“foo.txt”。远程树610上的节点1102、1104、1106可类似地包括如先前关于本地树630所解释的相应的哈希和相应的元数据。此外,可基于从内容管理系统110(例如,文件日志接口202)接收的修订或操作来将节点1102、1104、1106添加至远程树610,所述修订或操作反映与客户端设备150和/或客户端设备150处的用户账户相关联的内容项在服务器文件日志148处的远程状态。

在阶段2处,基于本地树630和远程树610来构造同步树620。为了构造同步树620,客户端设备150将本地树630中的每个节点与远程树610中的每个节点进行比较以确定哪些(如果有的话)节点匹配。例如,客户端设备150可搜索远程树610以确定本地树630中的节点1102和1104是否包含在远程树610中。客户端设备150然后用任何匹配的节点填充同步树620。

例如,客户端设备150可使用来自本地树630中的根节点1102的文件标识符和/或元数据(例如,文件名、目录标识符等)来搜索远程树610。如果客户端设备150在远程树610中标识匹配,则客户端设备150可确定根节点1102也包含在远程树610中。客户端设备150然后可将根节点1102添加至同步树620。然后,客户端设备150使用来自本地树630中的节点1104的文件标识符和/或元数据(例如,文件名、目录标识符等)来搜索远程树610。如果客户端设备150在远程树610中标识匹配,则客户端设备150可确定节点1104也包含在远程树610中。客户端设备150然后可将节点1104添加至同步树620。

在一些情况下,如果客户端设备150确定在远程树610中找不到本地树630中的节点,则客户端设备150可查询内容管理系统110以检查与该节点相关联的内容项先前是否存在于内容管理系统110中。例如,客户端设备150可要求内容管理系统110搜索服务器文件日志148中包含与内容项相关联的文件标识符和/或与内容项相关联的元数据(例如,文件名,路径、目录标识符等)的任何记录。这样,客户端设备150可确定该内容项是添加在客户端设备150处的从未与内容管理系统110同步的新内容项,还是先前在内容管理系统110处的内容项。如果客户端设备150确定内容项确实是先前在内容管理系统110处的,则客户端设备150可在同步树620中添加对应的节点。当在远程树610中找不到所述节点时,客户端设备150可将所述节点包括在同步树620中以稍后验证所述节点是否本来应该或不应该从远程树610移除。由于所述节点位于本地树630中(这指示相关联的内容项存储在客户端设备150处)并且所述内容项是先前在内容管理系统110处的,因此客户端设备150可在它执行递增同步时决定在阶段3解决不一致问题。

在这个实例中,在阶段2之后,同步树620包括根节点1102和节点1104。然而,同步树620不包括远程树610中的节点1106。这反映在本地树630与远程树610之间的不一致。不一致可能是由于与内容管理系统110或客户端设备150不同步的更新或操作(例如,添加或删除)引起的。

在阶段3处,客户端设备150可执行递增同步以解决本地树630与远程树610之间的冲突。客户端设备150可确定是应将节点1106从远程树610移除还是应添加至同步树620和本地树630。在这个实例中,客户端设备150确定节点1106是基于与客户端设备150不同步的“foo.txt”在内容管理系统110处的添加。因此,客户端设备150将节点1106添加至同步树620和本地树630。

可替代地,如果客户端设备150确定在最新修订中已删除“foo.txt”并且节点1106应从远程树610移除,则客户端设备150可从远程树610删除节点1106,而不是将节点1106添加至同步树620和本地树630。例如,在本地树630中缺少节点1106可指示“foo.txt”在客户端设备150处被删除并且删除事件从未与内容管理系统110成功同步。通过递增同步,客户端设备150可因此确定本地树630和同步树610应保持没有节点1106并且删除操作应与内容管理系统110同步。客户端设备150可同步删除操作并且更新远程树610以移除节点1106。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1