处理远程数据库的变化的制作方法

文档序号:12287986阅读:171来源:国知局
处理远程数据库的变化的制作方法与工艺
本申请根据35U.S.C.§119(e)要求2014年6月24日提交的美国专利申请序号62/016,457的优先权,该申请的全部内容通过引用结合到本文中。
背景技术
:本说明书涉及处理远程数据库的变化(mutation)。数据库是通常被以支持处理包括在其中的数据的方式组织的数据集合。数据库常常被数据库服务器管理,所述数据库服务器促进由数据库管理员和/或通过局域网或广域网连接到该数据库服务器的设备的用户对包括在数据库中的数据的访问和操纵。技术实现要素:一般地,可以用包括以下动作的方法来体现在本说明书中描述的主题的一个创新方面:从客户端设备接收数据库变化的日志,所述数据库变化的日志指示先前对存储在所述客户端设备上的数据库的客户端版本进行的改变,并且每个数据库变化指定:包括在所述数据库中的实体;用于所述实体的操作;以及用于所述实体的客户端版本号;在所述数据库变化的日志中识别两个或更多个数据库变化,每个数据库变化针对相同实体指定相同客户端版本号;基于冲突解决策略,确定所述两个或更多个数据库变化有资格折叠;以及将所述两个或更多个数据库变化折叠成单个数据库变化。这方面的其它实施例包括被配置成执行在计算机存储设备上编码的方法的动作的相应系统、装置以及计算机程序。这些及其它实施例每个可以可选地包括以下特征中的一个或多个。基于冲突解决策略确定所述两个或更多个数据库变化有资格折叠包括:识别基于所述冲突解决策略将被应用于远程数据库的所述两个或更多个数据库变化中的第一数据库变化。将所述两个或更多数据库变化折叠可以包括:将所述第一数据库变化和所述两个或更多个数据库变化中在所述第一数据库变化之后发生的每个其它数据库变化折叠成单个数据库变化。将所述第一数据库变化和每个其它数据库变化折叠成单个数据库变化包括将来自有资格折叠的所述两个或更多个数据库变化的最近数据库变化折叠成单个数据库变化。有资格折叠的所述两个或更多个数据库变化中的每一个可以指定冲突解决策略。该冲突解决策略可以是与数据库的远程版本相关联的默认冲突解决策略。该操作还可以包括:针对所述单个数据库变化并且针对包括在所述日志中的每个其它数据库变化:查询所述数据库的远程版本以识别由该变化指定的实体的基础版本号;确定该实体的客户端版本号是否与该实体的基础版本号匹配;响应于确定所述客户端版本号与所述基础版本号匹配:针对所述数据库的所述远程版本,执行由该变化指定的操作;生成对所述客户端设备的响应数据,所述响应数据包括该实体的经更新的基础版本号;以及响应于确定所述客户端版本号与所述基础版本号不匹配:基于冲突解决策略来确定是否将执行由该变化指定的操作;针对所述数据库的所述远程版本,只有当确定将执行由该变化指定的操作时才执行由该变化指定的操作;以及生成对所述客户端设备的冲突响应数据,所述冲突响应数据指定是否执行由该变化指定的操作。针对由该变化指定的实体,对所述客户端设备的所述冲突响应数据包括存储在所述数据库的所述远程版本中的实体的当前版本。一般地,可以用包括以下动作的方法来体现在本说明书中描述的主题的另一方面:访问存储在客户端设备上的数据库变化的日志,所述数据库变化的日志指示先前对存储在所述客户端设备上的数据库的客户端版本进行的改变,并且每个数据库变化指定:包括在所述数据库中的实体;用于所述实体的操作;以及所述实体的客户端版本号;在所述数据库变化的日志中识别两个或更多个数据库变化,每个数据库变化针对相同实体指定相同客户端版本号;基于冲突解决策略,确定所述两个或更多个数据库变化有资格折叠;以及将所述两个或更多个数据库变化折叠成单个数据库变化。这方面的其它实施例包括配置成执行在计算机存储设备上编码的方法的动作的相应系统、装置以及计算机程序。这些及其它实施例每个可以可选地包括以下特征中的一个或多个。基于冲突解决策略确定所述两个或更多数据库变化有资格折叠可以包括:确定由所述两个或更多数据库变化指定的操作的结果与存储在数据库上的对应数据库实体的远程版本的值无关。将所述两个或更多个数据库变化折叠成单个数据库变化可以包括将来自有资格折叠的所述两个或更多个数据库变化的最近数据库变化折叠成单个数据库变化。有资格折叠的所述两个或更多个数据库变化中的每一个可以指定冲突解决策略。该冲突解决策略可以是与数据库的远程版本相关联的默认冲突解决策略。所述操作还可以包括:将数据库变化的折叠日志提供给数据库服务器,所述数据库变化的折叠日志包括所述数据库变化的日志中的未被折叠的每个变化和所述单个数据库变化。一般地,可以用包括以下动作的方法来体现在本说明书中描述的主题的另一方面:从客户端设备接收对于对存储在所述客户端设备上的数据库的客户端版本的更新的请求,所述请求包括i)所述数据库的所述客户端版本的客户端数据库版本号,以及ii)指定包括在所述数据库的所述客户端版本中的特定数据库实体的第一游标;访问远离所述客户端设备的所述数据库的远程版本,所述数据库的所述远程版本包括多个数据库实体,每个数据库实体具有跨所述数据库的所述多个数据库实体以单调增加方式分配的远程实体版本;针对包括在以与所述特定数据库实体匹配的数据库实体开始的数据库实体的有序子集中的多个数据库实体中的每一个数据库实体:基于该数据库实体的远程实体版本号与所述客户端数据库版本号的比较来确定该数据库实体是否已被更新;以及针对已被更新的每个数据库实体,向所述客户端设备提供实体更新;以及利用至少一个实体更新向客户端设备提供远程数据库版本号,所述远程数据库版本号是所述数据库的所述远程版本中的最高远程实体版本号。这方面的其它实施例包括配置成执行在计算机存储设备上编码的方法的动作的对应系统、装置以及计算机程序。这些及其它实施例每个可以可选地包括以下特征中的一个或多个。所述数据库实体的子集不包括在所述数据库的所述远程版本中的每个数据库实体。所述数据库实体的子集基于被满足的一个或多个系统约束来动态地确定。所述一个或多个系统约束包括:针对所述对于更新的请求所允许的最大处理时间;或者针对所述对于更新的请求所允许的最大更新尺寸。所述操作还可以包括:从客户端设备接收对于对所述数据库的所述客户端版本的更新的第二请求,所述第二请求包括i)第二客户端数据库版本号,所述第二客户端数据库版本号与利用实体更新提供给所述客户端设备的所述远程数据库版本号匹配;以及ii)指定第二数据库实体的第二游标,所述第二数据库实体包括在所述数据库的所述客户端版本中并且排序在所述数据库实体的有序子集中所包括的最后数据库实体之后。所述操作还可以包括:更新所述数据库的所述远程版本的三维表格,所述三维表格指定在当前时间之前预定时间段内发生的对所述数据库的所述远程版本的每个更新。一般地,可以用包括以下动作的方法来体现在本说明书中描述的主题的另一方面:从服务器设备接收至指定版本号为止的包括在数据库的远程版本中的数据库实体的计数;确定所述数据库实体的计数小于客户端实体计数,所述客户端实体计数指定至所述指定版本号为止的包括在所述数据库的客户端版本中的实体的数目;响应于确定所述数据库实体的计数小于所述客户端实体计数,向所述服务器设备发送对于包括在所述数据库的所述远程版本中的所述数据库实体的键列表的请求;从所述服务器设备接收包括在所述数据库的所述远程版本中的所述数据库实体的适当子集的键的第一适当子集;以及从所述数据库的所述客户端版本移除包括在所述数据库的所述客户端版本中的数据库实体的对应适当子集内且具有未被包括在所述键的第一适当子集中的键的任何数据库实体。这方面的其它实施例包括配置成执行在计算机存储设备上编码的方法的动作的相应系统、装置以及计算机程序。这些及其它实施例每个可以可选地包括以下特征中的一个或多个。所述操作还可以包括:向所述服务器设备发送对于包括在数据库实体的第二子集中的数据库实体的第二计数的第二请求,所述数据库实体的第二子集不同于所述数据库实体的第一子集,所述第二请求指定所述数据库的第二版本号;从所述服务器设备接收至所述第二版本号为止的数据库实体的第二计数,该数据库实体包括在被包括在所述数据库的所述远程版本中的数据库实体的对应第二子集中;确定所述数据库实体的第二计数小于第二客户端实体计数,所述第二客户端实体计数指定至所述第二版本号为止的包括在所述数据库的所述数据库实体客户端版本的第二子集中的实体的第二数目;向所述服务器设备发送对包括在所述第二子集中的所述数据库实体的键的第二列表的第二请求;从所述服务器设备接收包括在所述数据库的所述远程版本中的所述数据库实体的第三子集的键的第三子集;以及从所述数据库的所述客户端版本移除包括在所述数据库的所述客户端版本中的数据库实体的子集内与所述第三子集相对应且具有未被包括在所述键的第三子集中的键的任何数据库实体。可以实现在本说明书中描述的主题的特定实施例从而实现以下优点中的一个或多个。存储数据库的本地拷贝的客户端设备能够以被设计成在也减少错误和误报冲突的风险的同时且在其中客户端设备与数据库服务器之间的网络通信可能频繁地中断的情况下减少用于客户端设备和数据库服务器两者的开销的方式保持本地拷贝被更新并提交对数据库的远程版本的改变。数据库服务器和客户端设备不需要存储用于数据库的改变日志或删除标记,减少了相对于使用改变日志和删除标记的其它数据库管理方法所需的系统资源。在附图和以下描述中阐述了在本说明书中描述的本主题的一个或多个实施例的细节。根据本描述、附图以及权利要求,本主题的其它特征功能、方面以及优点将变得显而易见。附图说明图1是在其中处理远程数据库变化的示例环境的框图。图2是用于处理远程数据库变化的示例过程的数据流程。图3A是用于处理远程数据库变化的示例过程的流程图。图3B是用于提供远程数据库变化的示例性过程的流程图。图4是用于使数据库同步的示例过程的数据流。图5是用于使数据库同步的示例过程的流程图。图6是用于检测和处理被删除数据库实体的示例过程的数据流。图7是用于检测和处理被删除数据库实体的示例过程的流程图。图8是示例数据库处理装置的框图。各图中的相同的附图标记指示相同元件。具体实施方式概览当多个客户端设备需要访问存储在数据库中的数据时,可以使用远程数据库来为每个客户端设备提供对相同数据集的访问。频繁地需要访问存储在远程数据库中的数据的客户端设备可以在客户端设备上的数据库中存储本地拷贝,本地拷贝可以在不需要与托管远程数据库的设备通信的情况下被访问。例如,可以使用远程数据库来存储人的电话和电子邮件联系人。用户可以使用膝上型计算机、平板计算机以及智能电话,其全部可以访问包括用户的联系人的远程数据库,并且每个用户设备还可以存储用户的联系人的本地拷贝。数据库的本地拷贝可以被用于例如用户设备进行的快速访问和/或当与远程数据库的网络通信不可用时用于对用户的联系人的访问。当用户做出改变时,例如在本地数据库中添加、编辑或删除联系人时,发生改变的客户端设备也可以更新远程数据库,使得对数据库的改变可以被使用远程数据库传播到用户的其它设备上的本地数据库。作为另一示例,可以使用远程数据库来存储各种食物的营养信息。用户可以使用包括在客户端设备(诸如智能电话)上的应用来访问包括在数据库中的信息,例如以跟踪用户的每日营养摄入。远程数据库的本地拷贝可以例如对能够在网络连接缓慢或不可用时访问数据库有用。用户还可以例如通过在本地数据库中添加新食物和更新现有食物的营养信息来更新本地数据库。当已经对本地数据库作出改变时,客户端设备和数据库服务器可以合作以使数据库同步,例如通过以用户在本地作出的改变来更新远程数据库并以其它用户提供给远程数据库的改变来更新本地数据库。客户端设备和数据库服务器促进远程数据库与存储在客户端设备上的数据库的本地拷贝之间的数据库同步化。由客户端设备应用于本地数据库的数据库变化可以由客户端设备在将变化提供给数据库服务器以提交(committed)给或应用于远程数据库之前进行折叠或合并。折叠变化一般地涉及到通过以保留客户端的意图的方式将变化组合或合并来减少变化的数目。由客户端设备提供给数据库服务器的数据库变化可以在被提交到远程数据库之前被进一步折叠,在保留用户意图并确保幂等性的同时节省时间和计算资源。对由客户端设备为本地数据库所请求的更新的响应可以被分成多个请求和响应,以节省系统资源并减少该请求和响应所需的网络通信负荷。可以使在远程数据库上删除的数据库实体与本地数据库同步而不需要改变日志或删除标记。例如,客户端设备可以访问数据库变化的日志,该日志应存储在客户端设备上的数据库的客户端版本。每个数据库变化指定数据库实体、用于该实体的操作、以及该实体的客户端版本号。还可以将数据库实体称为包括在数据库中的行或记录。客户端设备识别对于具有相同版本号的数据库实体的变化,并且基于冲突解决策略来确定该变化是否可以被折叠。识别具有相同版本号的数据库实体的某些变化不能被折叠,例如如果变化的结果取决于存储在数据库的远程版本中的值的话。在折叠了有资格的变化之后,客户端设备向数据库服务器提供数据库变化的折叠日志以便应用于该数据库的远程版本。数据库服务器从客户端设备接收数据库变化的日志,并且如果适用的话,将未被客户端设备折叠的指定相同客户端版本号的数据库变化折叠。如客户端设备的情况一样,数据库服务器识别具有相同版本号的数据库实体的变化,并且基于冲突解决策略来确定变化是否可以被折叠。数据库服务器可以根据需要检查远程数据库,例如针对取决于存储在数据库的远程版本中的值的数据库变化。如上所述,折叠数据库变化可以减少处理数据库变化的日志所需的时间和系统资源。还可以针对变化且在某些实施例中针对客户端设备与数据库服务器之间的其它通信保持幂等性,而不需要明确的肯定应答。例如,可以保存从数据库服务器发送到客户端设备的最近响应,并且在接收到具有与所保存的响应匹配的标识符的请求时,可以提供所保存的响应而不尝试处理包括该匹配标识符的请求。为了使数据库同步,客户端设备可以向数据库服务器发送对更新的请求。该请求可以包括客户端数据库版本号和(在某些实施方式中)指示对于其而言正在寻求更新的实体的游标。数据库服务器为客户端设备提供用于自从被提供客户端的请求的客户端数据库版本号以来被更新的任何实体的更新。为了虑及低客户端设备带宽及其它潜在网络问题,数据库服务器可以将数据库更新分离成实体范围,为客户端设备提供在范围内的更新。在某些实施方式中,远程数据库不针对被删除的数据库实体保持改变日志或使用删除标记。为了使删除同步化,客户端设备首先将存储在远程数据库中的实体的计数与数据库实体的本地计数相比较。如果在数据库的本地版本中存在在更多数据库实体,则客户端设备请求用于当前在远程数据库中的实体的键列表。每个键唯一地识别实体,并且客户端设备将键列表与存储在本地数据库中的键相比较以找到被从远程数据库删除的实体。如同步请求的情况一样,数据库服务器可以提供实体键的部分列表,使范围内的删除同步。下面更详细地描述了这些特征和附加特征。示例性操作环境图1是在其中处理远程数据库变化的示例性环境100的框图。计算机网络102(诸如局域网(LAN)、广域网(WAN)、互联网或其组合)将一个或多个客户端设备104连接至与一个或多个数据库存储设备108通信的一个或多个数据库服务器106。在某些实施方式中,可以在包括许多数据处理器的分布式处理系统中实现数据库服务器106,所述许多数据处理器可以用来管理存储于被直接和/或间接地连接到分布式处理系统的数据库存储设备中的数据库。还可以使用其它系统和网络配置来促进客户端设备与数据库服务器之间的通信。数据库服务器106是能够管理例如数据库存储设备108中的数据存储的电子设备。示例性数据库服务器包括个人计算机、服务器计算机以及可以通过网络102发送和接收数据的其它设备。数据库服务器106通常包括被用来管理存储于数据库中的数据并执行任务(诸如数据分析、存储、以及操纵)的数据库应用。其它组件也可以被包括在数据库服务器106中或与之通信以促进与客户端设备104的通信和网络通信的管理,诸如负荷平衡器或应用服务器。客户端设备104是能够通过网络102来请求或接收数据(包括发送数据库变化)的电子设备。示例性客户端设备104包括个人计算机、移动通信设备以及可以通过网络102发送和接收数据的其它设备。客户端设备106通常包括促进通过网络102来发送和接收数据的一个或多个应用。例如,例如在数据库存储设备108中远程地存储应用数据的应用可以具有用于例如存储在客户端设备上的应用的数据库的客户端版本以及使用数据库服务器可访问的数据库的远程版本。数据库存储设备108存储对数据库服务器106而言可访问的数据库数据和元数据。数据库服务器106与数据库存储设备108之间的通信可以是例如直接通信、内部网络通信、和/或跨网络102的通信的任何组合。可以在一个数据库存储设备上或者跨多个数据库存储设备存储单个数据库,并且单个数据库存储设备可以存储多个数据库。远程数据库(例如,数据库存储设备108中的远离客户端设备104存储的数据库)可以被数据库服务器106定期地更新。数据库服务器106可以按照在数据库服务器106上运行的数据库应用的指定和/或响应于从客户端设备104接收到数据库变化而更新数据库。例如,客户端设备可以基于客户端设备对数据库的客户端本地拷贝作出的改变为数据库服务器提供数据库变化的日志或队列。数据库服务器可以使用数据库变化的日志来将其应用于存储在数据库存储设备上的数据库的远程版本。数据库的远程版本可以被许多客户端设备(每个具有其自己的数据库客户端版本)访问和更新。例如,应用可以使用远程数据库来确保使用应用的每个客户端设备看到相同信息。当一个客户端设备更新远程数据库时,第二客户端设备将在其在后来的时间访问远程数据库时看到更新。在下面更详细地描述的各种冲突解决技术被用来管理当多个客户端设备尝试更新数据库中的相同数据片时引入的冲突。在某些实施方式中,可以使用版本控制来帮助在更新数据库时解决潜在的冲突。存储在数据库中的每个实体可以具有关联版本号,并且每个数据库也可以具有关联版本号。可以在数据库内以单调递增的方式分配实体版本号,意味着每个数据库实体具有唯一版本号,并且应用于每个数据库实体的每个后续变化促使经变化的数据库实体被分配增加的版本号。在某些实施方式中,数据库实体版本号只有当实体被插入、更新等时才被数据库服务器更新。数据库版本号可以是特定于设备、客户端或服务器的,并且在某些实施方式中等于相应客户端或服务器数据库中的最高数据库实体版本号。可以使用数据库版本、数据库实体版本以及冲突解决策略来解决潜在的冲突并防止客户端的数据库版本与数据库的远程版本之间的差异。客户端数据库与其相应远程数据库之间的冲突和差异可以在多个不同数据库操作期间发生并被解决,所述数据库操作诸如数据库变化的应用、使客户端数据库同步、以及当识别被删除的数据库实体时。下面更详细地描述了这些操作中的每一个操作期间的冲突和差异解决。处理数据库变化图2是用于处理远程数据库变化的示例性过程200的数据流。客户端设备202在本地存储设备204中存储数据库206的客户端版本。客户端设备202可以定期地向客户端数据库206应用数据库变化。数据库变化是对存储在数据库中的实体的改变。例如,添加、移除、或更新数据库实体每个是使用指定包括在数据库中的实体、对实体的操作、以及用于实体的客户端版本号的数据库变化而执行的。数据库变化的示例日志208描绘了客户端设备202对客户端数据库206作出的变化的列表。在日志208中描绘的每个示例变化指定用于实体的键、对实体的操作、客户端版本号、以及冲突解决策略。例如,实体A具有值x,客户端设备首先将其改变成5。后来在日志208中,客户端设备202针对该实体A将值x改变成2,然后再次地改变成4。针对实体A的每个变化,冲突解决策略被列为“MIN(x)”,其指示在冲突的情况下用于x的最小值将获胜。在示例性过程200中,数据库服务器210控制数据库中的实体的版本号,并且在客户端设备202上发生的数据库变化不导致对用于数据库实体的版本号的改变,例如虽然实体A在客户端数据库206中具有被向其应用的三个变化,但版本号保持相同(客户端版本10)。客户端设备202在将日志208中的变化提供给数据库服务器210之前确定其中的哪些变化可以被折叠或合并。为了确定哪些变化已被折叠,客户端设备202识别日志208中的两个或更多个变化,每个指定用于同一实体的相同客户端版本号。例如,第一、第五以及第六变化全部是用于实体A的客户端版本10。使用冲突解决策略,诸如在日志208中指定的策略,客户端设备202确定所识别的变化是否可以被折叠。在某些实施方式中,可以使用默认冲突解决策略。默认解决策略可以是例如用于存储在数据库服务器210处的所有数据库的默认策略或者特定于特定数据库且与该特定数据库一起存储的默认策略。例如当用于实体的客户端版本号与用于远程数据库214中的实体的基础版本号不匹配时,可以出现冲突。当冲突存在时,数据库服务器210使用冲突解决策略来确定是否应当应用冲突的数据库变化。示例性冲突解决策略包括:远程—其中将有利于远程数据库而解决冲突、客户端—其中将有利于客户端设备的变化而解决冲突、MIN—其中将通过选择将导致用于实体的最低值的值来解决冲突,以及MAX,其中将通过选择将导致用于实体的最高值的值来解决冲突。前述策略和策略名称是示例性的,并且可以使用其它策略或用于该策略的名称。客户端设备202可以使用冲突解决策略来确定数据库变化是否有资格被折叠。在某些实施方式中,如果由数据库变化指定的操作的结果与针对远程数据库214上的对应数据库实体存储的值无关,则数据库变化有资格折叠。例如,具有“远程”或“客户端”的冲突解决策略的数据库变化可以被折叠,因为使用那些策略的冲突解决并不取决于存储在远程数据库214中的任何值。换言之,如果冲突解决策略是“远程”,则冲突将始终有利于远程数据库中的值而解决,无论远程数据库214中的值如何,并且“客户端”的冲突解决策略将始终促使冲突有利于客户端的变化而解决,无论存储在远程数据库214中的值如何。在某些情况下,由数据库变化指定的操作的结果取决于存储在远程数据库214中的值。例如,日志208中的第五和第六变化指定用于实体A的两个变化:x=2和x=4,以及MIN(x)的冲突解决策略。由客户端设备202提供的数据库变化相互并不冲突,并且通常将被按顺序应用,导致x被改变成2,然后变成4。然而,由于远程数据库可以存储在2和4之间的值,所以这两个变化可能未被折叠成单个数据库变化,例如x=4的最近数据库变化。举例来说,如果远程数据库中的x的值是3,则将x=2和x=4折叠成x=4,冲突将导致x=3,因为MIN(4,3)=3。如果变化未被折叠,则最终结果将是x=4,因为与变化x=2的冲突将导致MIN(2,3)=2,并且因为来自同一日志的多个变化并不冲突,最后一个变化x=4将不冲突,导致x从2变成4。冲突解决策略是以保留用户的意图的方式解决。下面的表格列出了给定某些示例性解决策略的情况下的可以被折叠的变化。每个变化是用于相同的数据库实体和版本号。表格的每个第一变化包括操作A以及冲突解决策略。表格中的每个第二变化包括操作B以及可以与第一变化折叠的冲突解决策略。结果得到的折叠变化在表格的第三列中示出。例如,给定第一变化“客户端(A)”,任何冲突或者无冲突都将有利于客户端而解决。在变化有利于客户端而解决之后,后续变化不能冲突,因此无论由第二变化指定了哪个策略,都将执行操作B。保留每个变化的意图,折叠结果是“客户端(B)”。同样地,在其中第二变化是“客户端(B)”的情况下,第一操作或策略是什么无关紧要,因为与第二变化的任何冲突或无冲突将有利于客户端和操作B而解决。在示例性过程200中,客户端设备202已将包括在日志208中的某些变化折叠,导致数据库变化的折叠日志209。客户端设备208例如确定第一和第五变化(用于实体A的那些)有资格折叠成x=2,因为具有MIN(x)策略的x=5,后面是x=2,并不取决于存储在远程数据库中的x的值,例如MIN(5,2)=2。如上所述,用于实体A的第六变化x=4不能被合并,并且在折叠日志209中仍是单独变化。包括在日志208中的第二和第三变化是用于实体B,客户端版本7。客户端设备202基于可以被存储在客户端设备202、客户端数据库206、数据库服务器210或远程数据库214中的一个或多个上的“默认”冲突解决策略而确定这些变化有资格被折叠成x=4。例如,“远程”的默认解决策略将允许用于同一实体的同一版本的多个变化被折叠成最近变化,其在本示例中是x=4。用于实体C的第四变化未被折叠,因为在日志208中存在用于实体C的仅一个变化。不同类型的变化可以以不同的方式折叠。例如,下面的表格列出了折叠变化,例如对同一实体执行的INSERT(插入)、UPDATE(更新)、UPSERT(更新插入)以及DELETE(删除)数据库操作。INSERT将插入新的实体或失败,UPDATE将更新现有实体或失败,UPSERT将插入新的实体或更新现有的一个实体,并且DELETE将删除实体,如果其存在的话。如在示例的表格中所指示的,如果实体已作为第一INSERT的结果而存在,则第二INSERT将失败,导致“<badrequest(不良请求)>”作为折叠变化。可以将后面是UPDATE(B)的INSERT(A)的第一变化折叠成单个INSERT(B)变化第一变迁第二变迁折迭变迁INSERT(A)INSERT(B)<badrequest>INSERT(A)UPDATE(B)INSERT(B)INSERT(A)UPSERT(B)INSERT(B)INSERT(A)DELETE()--UPDATE(A)INSERT(B)<badrequest>UPDATE(A)UPDATE(B)UPDATE(B)UPDATE(A)UPSERT(B)UPDATE(B)UPDATE(A)DELETE()--UPSERT(A)INSERT(B)<badrequest>UPSERT(A)UPDATE(B)UPSERT(B)UPSERT(A)UPSERT(B)UPSERT(B)UPSERT(A)DELETE()DELETE()DELETE()INSERT(B)UPSERT(B)DELETE()UPDATE(B)<badrequest>DELETE()UPSERT(B)UPSERT(B)DELETE()DELETE()DELETE()在示例性过程200中,数据库服务器120接收数据库变化的折叠日志209。数据库服务器210不需要接收折叠日志209,并且在某些实施方式中,可以接收未被折叠的日志(例如,日志208)以便由数据库服务器210处理。数据库服务器210在折叠日志209中识别指定相同客户端版本号的数据库变化,并且确定那些数据库变化有资格折叠。在某些实施方式中,数据库服务器210将折叠多个变化,使得用于实体的仅一个变化被提交到远程数据库214,即使在折叠日志209中存在用于实体的多个变化。在某些实施方式中,数据库服务器210通过识别基于冲突解决策略将被应用于远程数据库214的一个变化来确定用于同一实体的同一客户端版本的多个数据库变化有资格折叠。如果数据库变化i)并未引起冲突,或者ii)以有利于数据库变化而被解决的冲突,则该数据库变化将被应用于远程数据库214。如上所述,当从客户端设备202接收到的数据库变化指定用于实体的客户端版本号、该客户端版本号与用于远程数据库214中的实体的基础版本号不匹配时,可能出现冲突。数据库服务器210每当用于实体的变化被应用于远程数据库214时更新实体的基础版本号。在其中实体的基础版本与客户端版本号匹配的情况下,不存在冲突。如果另一方面实体的基本版本与客户端版本号不匹配,则将存在冲突,因为例如来自另一客户端设备的变化在被应用于包括在折叠日志209中的数据库变化的应用之前已经被应用于远程数据库214。在识别到将被应用于远程数据库214的变化之后,用于该实体的折叠日志209中的所有数据库变化可以被折叠成单个数据库变化。例如,当将应用变化中的至少一个时,可以将用于实体的所有数据库变化折叠成用于该实体的最近数据库变化,因为一旦操作或冲突以有利于客户端提供的变化而解决,则由客户端供提供的其它变化不能相互冲突,并且可以被折叠成由客户端针对对应实体提供的最近变化。在示例性过程200中,折叠日志209的第三和第四变化指定实体A的客户端版本10。在其中数据库服务器210确定将应用第三操作x=2的情况下,因为第四变化在第三变化之后,并且不能与第三变化冲突,可以将该变化折叠成第四变化x=4,。举例来说,折叠日志209中的用于实体A的客户端版本号是10。远程数据库214中的用于实体A的基础版本是13。因为版本号不匹配而发生冲突,例如由于实体A先前被数据库服务器210更新。MIN(x)的冲突解决策略促使冲突以有利于第三变化x=2而解决,因为2小于存储在远程数据库中的用于x的值,即3。由于第三变化将被应用于远程数据库214,所以任何后续变化也将被应用,这允许数据库服务器210将用于实体A的所有变化折叠成单个变化。在其中将不应用用于实体的变化(例如引起始终以有利于远程数据库值而解决的冲突的用于实体的多个变化)的情况下,数据库服务器210可以将用于该实体的所有数据库变化以类似于上文所述的方式折叠成单个变化。在某些实施方式中,将不被应用的变化可以被从数据库操作的列表移除,并且数据库服务器210将不尝试将其提交给远程数据库214。在示例性过程200中,第二折叠日志216描绘已被数据库服务器210折叠之后的变化。针对分别地用于实体B和C的第一和第二变化不需要进一步折叠,因为该第一和第二变化是用于包括在折叠日志209中的那些实体的仅有变化。当向远程数据库214提交变化时,数据库服务器210针对用于远程数据库214中的对应实体的基础版本检查数据库变化或折叠变化(在适用时)的客户端版本号。在其中由数据库变化指定的客户端版本号与基础版本号匹配的情况下,不存在冲突,并且可以将该数据库变化应用于远程数据库214。例如,折叠日志216中的用于实体C的变化指定客户端版本号4和操作x=7。数据库服务器将客户端版本号(4)与存储在远程数据库214中的基础版本号(4)相比较,并且找到匹配,确定可以应用操作x=7,在远程数据库中将x的值从2变成7。折叠日志216中的指定实体B的变化具有客户端版本7,其在与存储于远程数据库214中的基础实体版本(12)相比较时导致冲突。该变化并不指定冲突解决策略,并且将根据数据库服务器210默认或者(在其中定义冲突的解决的情况下)远程数据库214默认来执行冲突的解决。例如,在默认解决策略“远程”的情况下,将不应用冲突变化,而默认解决策略“客户端”将导致数据库服务器210应用冲突变化。折叠日志216的第三变化指定实体A的客户端版本10和操作x=4。数据库服务器210先前确定此折叠变化将被应用于远程数据库214,因此操作x=2被应用于远程数据库214。当数据库服务器210对远程数据库214应用变化时,用于受影响实体的基础实体版本在远程数据库214中也被更新。例如,实体A和C在上述示例中被更新,并且当以单调增加的方式分配版本号时,实体C的基础版本可以被从4更新成14,并且实体A的基础版本可以被从13更新成15。虽然前述示例将基础版本号增加1,但也可以使用保持实体被更新的顺序的其它量来增加基础版本号。作为另一示例,可以使用时间戳来确保版本号始终增加。数据库服务器210在处理数据库变化之后向客户端设备202提供响应数据218。响应数据218可以包括与数据库变化的结果有关的信息。例如,针对被更新的实体,响应数据218可以包括与远程数据库214中的基础版本号匹配的该实体的新版本号。响应数据218还可以包括成功或失败的指示,其中,成功指示变化被接收并处理——但不一定被应用于远程数据库,并且失败指示变化未被接收到或未被数据库服务器210处理。在示例性过程200中,针对包括在被发送到数据库服务器210的折叠日志209中的每个数据库变化,响应数据218指示处理变化中的成功或失败的指示、已尝试的变化应用的结果、以及对应实体的基础版本号。在某些实施方式中,还可以提供当前值,例如,结果218可以指示实体B在远程数据库214中具有值7。在某些实施方式中,未对值提供结果218,并且客户端设备202通过单独的查询或更新请求来获得更新。客户端设备202可以使用响应数据218来确定在日志208中提供的变化是否被成功地接收到、处理以及应用。如果成功,则客户端设备202可以更新客户端数据库206中的对应实体的版本号以反映在响应数据中提供的新基础版本。如果不成功,则客户端设备202可以发送新的变化或者从远程数据库214请求用于对应实体的当前数据,例如在更新请求中。在某些实施方式中,数据库服务器和客户端设备可以以被设计成确保数据库变化以及(在某些实施方式中)由数据库服务器接收到的其它通信或指令的幂等性的方式操作。例如,发送到数据库服务器的指令可以具有由客户端设备提供的请求标识符。当数据库服务器对来自客户端设备的请求进行响应时,数据库服务器可以存储该响应并将其与请求标识符相关联。在其中客户端设备接收到响应的情况下,任何后续请求将被分配新的请求标识符。当数据库服务器接收到具有新标识符的请求时,该新标识符充当给数据库服务器的肯定应答,该肯定应答为先前提供的响应被客户端设备接收到。在其中客户端设备并未接收到响应的情况下,客户端设备可以使用相同的请求标识符来重试请求。即使在其中客户端设备改变请求的情况下也使用该相同的请求标识符。当数据库服务器接收到具有与最近提供的响应匹配的请求标识符的请求时,数据库服务器不对该新请求采取行动并替代地为客户端设备提供先前响应。响应数据在被客户端设备接收到时向客户端设备指示哪个请求实际上成功了。示例性过程200的某些部分可以由客户端设备202执行,而示例性过程200的其它部分可以由数据库服务器210执行。图3A和3B每个从不同的观点出发描述示例性过程。在图3A中描述的示例性过程可以由服务器设备执行,而图3B中描述的示例性过程可以由客户端设备执行。现在转到图3A:图3A是用于处理远程数据库变化的示例性过程300的流程图。过程300可以由数据处理装置执行,诸如上述数据库服务器。从客户端设备接收数据库变化的日志(302)。数据库变化的日志指示先前对存储在客户端设备上的数据库的客户端版本作出的改变。每个数据库变化指定:包括在数据库中的实体、用于实体的操作、以及用于该实体的客户端版本号。变化的日志可以包括用于任何数目的实体的任何数目的变化。在数据库变化的日志中识别两个或更多个数据库变化,每个指定用于相同实体的相同客户端版本号(304)。例如,数据库变化的日志可以包括单个实体的五个不同变化,并且五个变化中的每一个指定用于该实体的相同客户端版本号。过程300基于冲突解决策略而确定两个或更多个数据库变化有资格折叠(306)。在某些实施方式中,确定两个或更多数据库变化有资格折叠包括:识别基于冲突解决策略将被应用于远程数据库的所述两个或更多个数据库变化中的第一数据库变化。例如,如果针对同一实体存在五个不同数据库变化,只要所述数据库变化中的一个将被应用于远程数据库,则该数据库服务器可以确定这五个不同数据库变化有资格折叠。为了确定数据库变化是否将被应用于远程数据库,数据库服务器可以例如:首先检查冲突,并且如果没有冲突,则将应用变化;以及如果存在冲突,则检查该冲突是否将以有利于数据库变化或当前远程数据库值而被解决。在某些实施方式中,如果两个或更多个数据库变化中没有一个将被应用于远程数据库,则所述两个或更多个数据库变化有资格折叠。例如,在涉及到冲突以及有利于远程数据库中的值的冲突解决策略的情况下,可以确定数据库变化有资格折叠。在某些实施方式中,有资格折叠的两个或更多个数据库变化中的每一个指定冲突解决策略。在某些实施方式中,该冲突解决策略是与数据库的远程版本相关联的默认冲突解决策略。将两个或更多个数据库变化折叠成单个变化(308)。在某些实施方式中,将两个或更多个数据库变化折叠包括将第一数据库变化和在所述第一数据库变化之后发生的所述两个或更多个数据库变化中的每个其它数据库变化折叠成单个数据库变化。例如,在具有有资格折叠的五个数据库变化的情况下,可以将全部的五个数据库变化折叠成单个数据库变化。在某些实施方式中,单个数据库变化是来自有资格折叠的两个或更多数据库变化最近数据库变化。在某些实施方式中,针对所述单个数据库变化且针对包括在日志中的每个其它数据库变化,过程300包括查询数据库的远程版本以识别用于由该变化指定的实体的基础版本号。例如,用于实体的基础版本号可以是数据库服务器供应的时间戳,其指定对远程数据库中的实体的最近更新的日期和时间。数据库服务器然后可以确定用于该实体的客户端版本号是否与用于该实体的基础版本号匹配。响应于确定客户端版本号与基础版本号匹配,数据库服务器可以针对数据库的远程版本执行由变化指定的操作,并且生成用于客户端设备的响应数据,所述响应数据包括用于实体的已更新基础版本号。例如,如果已折叠的或其它的数据库变化具有与存储在远程数据库中的实体的基础版本匹配的客户端数据库,则可以应用该变化,因为不存在冲突,例如,自从客户端设备最近接收到或提供用于该实体的更新以来该实体未被更新。响应于确定客户端版本号与基础版本号不匹配,数据库服务器可以基于冲突解决策略来确定由变化指定的操作是否将被执行,并且只有当确定该操作将被执行时才执行该操作,并且生成用于客户端设备的冲突响应数据,所述冲突响应数据指定由变化指定的操作是否被执行。冲突解决策略包括例如其中冲突将始终以有利于客户端而解决、将始终以有利于远程数据库值而解决、将以有利于特定结果而解决等的策略。在某些实施方式中,针对由变化指定的实体,冲突响应数据库包括用于存储在数据库的远程版本中的该实体的当前版本。例如,如果数据库变化冲突且该冲突被以有利于远程数据库值而解决,则该远程数据库值和版本号可以被提供给客户端设备。图3B是用于提供远程数据库变化的示例性过程350的流程图。如上所述,过程350可以由数据处理装置(诸如上述客户端设备)执行。例如由客户端设备访问(352)存储在客户端设备上的数据库变化的日志。数据库变化的日志指示先前对存储在客户端设备上的数据库的客户端版本作出的改变。每个据库变化指定:包括在数据库中的实体、用于该实体的操作、以及用于该实体的客户端版本号。变化的日志可以包括用于任何数目的实体的任何数目的变化。在数据库变化的日志中识别两个或更多个数据库变化,每个数据库变化指定用于相同实体的相同客户端版本号(354)。例如,数据库变化的日志可以包括用于单个实体的五个不同变化,并且五个变化中的每一个指定用于该实体的相同客户端版本号。过程300基于冲突解决策略而确定两个或更多个数据库变化有资格折叠(356)。在某些实施方式中,确定两个或更多个数据库变化有资格折叠包括:确定由所述两个或更多个数据库变化指定的操作的结果与对应数据库实体存储在数据库的远程版本上的值无关。例如,指定冲突将以有利于客户端而解决的冲突解决策略并不取决于对于该实体而言什么值被存储在远程数据库中,这意味着对应变化有资格折叠。同样地,指定冲突将以有利于远程数据库而解决的冲突解决策略并不取决于该实体的存储在远程数据库中的值,因为该远程值将保持相同,无论其是什么。在某些实施方式中,有资格折叠的两个或更多个数据库变化中的每一个指定冲突解决策略。在某些实施方式中,冲突解决策略是与数据库的远程版本相关联的默认冲突解决策略。将两个或更多个数据库变化折叠成单个变化(308)。在某些实施方式中,将所述两个或更多个数据库变化折叠成单个数据库变化包括将来自有资格折叠的所述两个或更多个数据库变化的最近数据库变化折叠成单个数据库变化。例如,在具有有资格折叠的5个数据库变化的情况下,可以将全部的五个数据库变化折叠成单个最近数据库变化。在某些实施方式中,过程350还包括将数据库变化的折叠日志提供给数据库服务器,数据库变化的折叠日志包括未被折叠的数据库变化日志中的每个变化和所述单个数据库变化。在某些实施方式中,折叠日志可以包括被折叠成单个变化的多个变化。使远程和本地数据库同步图4是用于使数据库同步的示例性过程400的数据流。在示例性过程中,客户端设备402将客户端数据库406存储在本地存储设备404中。客户端数据库406是存储在对数据库服务器410而言可访问的数据库存储设备412中的远程数据库414的本地拷贝。在其中其它客户端设备对远程数据库414作出改变的情况下,这些改变可能未被自动地提供给客户端设备402,例如如果客户端设备402被关断或者以其他方式不能够访问数据库服务器410。客户端设备402可以定期地向数据库服务器410发送用于更新的请求或同步请求。每个请求(例如408a和408b)包括客户端数控版本号,并且还可以包括用于数据库的游标。在某些实施方式中,客户端数据库版本号等于客户端数据库406中的最高实体版本号。在示例性数据流400中,最高实体版本号是10,其在第一请求408a中被发送到数据库服务器410。游标是指示将充当用于接收更新的起始点的特定数据库实体的逻辑位置。在示例性数据流400中,第一请求408a所指定的游标指定客户端数据库的第一数据库实体,即实体A。在某些实施方式中,在请求中未指定游标,在这种情况下数据库服务器410可以开始检查来自第一实体的更新。数据库服务器410通过访问远程数据库414来处理更新请求408a,并且从对应于该游标的实体开始,检查实体是否已被更新。在其中数据库实体版本号被以单调增加的方式分配的情况下,具有比在请求408a中提供的客户端数据库版本号更高的版本号的任何数据库实体已被更新,而具有等于或小于客户端数据库版本号的版本号的任何数据库实体未被更新。在示例性数据流400中,对应于键1、2、5、7以及9的实体全部已被更新。针对已被更新的每个数据库实体,数据库服务器410为客户端设备402提供指定已被更新实体的数据、被更新的值、以及远程数据库414中的实体的版本号。例如,包括在示例性过程400中的更新416中的一个(第一更新422)包括对实体A的更新。更新422指定用于实体的远程数据库版本号12以及更新值a2。在某些实施方式中,数据库服务器410不检查和提供整个远程数据库414的更新,而是替代地检查并提供用于数据库实体的子集或适当子集的更新。对于其而言提供了更新的数据库实体的子集可以例如取决于由远程数据库414和/或数据库服务器410指定的系统约束。示例性系统包括最大处理时间和/或最大更新尺寸等。在其中客户端设备402不具有快速和/或可靠网络访问的情况下,限制处理请求的时间量和包括在更新中的数据量可以帮助防止数据的损失和/或不一致性。另外,包括大量数据的数据库可能花费长的时间段来检查更新,在该时间期间可能产生数据库变化的积压。使用系统约束来处理请求和为数据库实体的子集提供更新可以降低发生其它问题(诸如由在被检查更新之后但是在更新响应被发送到客户端设备402之前被改变的实体所产生的冲突)的可能性。在示例性过程400中,被检查更新的数据库服务器的实体的第一子集420包括由键A—D指定的实体。例如,数据库服务器410在达到时限之前可能已对数据库记录中的四个检查更新。由数据库服务器410提供的第一数据库更新422指示被更新的两个实体、用于所述实体的远程数据库版本号、以及用于所述实体的更新值。另外,第一更新422指定远程数据库版本号20以及游标D。远程数据库版本号和游标向客户端设备402指示包括在第一更新422中的实体的第一子集420在实体D处结束,并且包括在第一子集420中的每个实体到远程数据库版本号20为止是最新的。当对客户端数据库406应用第一更新422时,客户端设备402还可以存储指示由键A—D指定的实体到数据库版本20为止是最新的,即使用于该数据库的客户端版本号是10。请注意,当仅针对数据库条目的子集提供了更新时,用于客户端数据库406的客户端版本号未被更新,因为其它实体(例如由键E—J指定的实体)到仅数据库版本10为止就是最新的。在接收到并应用第一更新422之后,客户端设备可以向数据库服务器410发送第二请求408b。第二请求408b包括指示数据库服务器410应提供从实体D开始(不包括实体D)的更新。在第二请求408b中指定的客户端数据库版本号仍是版本10,因为客户端数据库406中的与键E—J相关联的实体仅到数据库版本10为止就是最新的。数据库服务器410开始检查用于第二子集430的更新,从实体D之后的实体(其为实体E)开始。在示例性过程400中,数据库服务器410在满足条件之前将其应用于实体G,并且数据库服务器410将第二更新432连同用于实体E—G的更新一起发送到客户端设备402。由于对远程数据库414进行了在第一更新422与第二更新432之间的改变,远程数据库版本号到第二更新432的传输为止已经增加至版本24。在第一更新422与第二更新432之间,实体G例如已被从版本20更新至21。在接收到第二更新432时,客户端设备402更新包括在客户端数据库406的第二子集430中的实体。当对客户端数据库406应用第二更新432时,客户端设备402还可以存储指示由键E—G指定的实体到数据库版本24为止为最新的数据。在这里,实体A—D仍仅仅到数据库版本20为止是最新的,并且实体H—J到数据库版本10为止是最新的。在第三子集440已被更新之后,过程400可以再次地从第一实体继续,并且过程400可以被重复多次。在某些实施方式中,可以动态地调整实体的子集。换言之,针对示例性过程400中的后续更新,数据库服务器410可以在提供更新之前仅完成实体A—C。在某些情况下,数据库服务器410可以在单次更新中完成所有数据库实体。可以例如基于对于任何特定更新请求而言系统约束允许什么而动态地调整子集。在某些实施方式中,可以将子集合并。例如,如果每个子集到同一远程数据库版本号为止是最新的,则客户端设备402可以确定可以将客户端数据库406的两个或更多个子集合并成单个子集。在其中两个或更多个子集到不同远程数据库版本号为止为最新的情况中,可以将其合并,只要使用较低的远程数据库版本号即可。在某些实施方式中,数据库服务器410更新用于远程数据库414的改变日志,例如三维表格。改变日志存储用于远程数据库414的每个更新达预定时间段。使用改变日志允许数据库服务器410处理对于到特定数据库版本号为止的更新的查询,而不仅仅是允许对当前数据版本号的查询。这可以例如被客户端设备402使用,其创建具有到相同数据库版本号为止最新的所有实体的客户端数据库406。在示例性过程400中,远程数据库414具有描绘被删除的实体,实体F,的空行。在某些实施方式中,在更新请求期间,不检测或虑及被删除实体,而是在对于被删除实体的单独请求中处理。在某些实施方式中,更新416可以包括用于整个远程数据库或数据库的子集的实体计数。该实体计数可以用来确定实体是否已被删除。下面相对于图6和7更详细地描述了被删除实体的检测和处理。图5是用于使数据库同步的示例性过程500的流程图。过程500可以由数据处理装置(诸如上文参考图4所述的数据库服务器)执行。从客户端设备接收对于对存储在客户端设备上的数据库的客户端版本的更新的请求(502)。该请求包括i)用于数据库的客户端版本的客户端数据库版本号,以及ii)指定包括在数据库的客户端版本中的特定数据库实体的第一游标。客户端数据库版本号可以是分配给数据库的客户端版本中的实体的最高实体版本号。游标可以例如从数据库中的第一实体开始,并且可以随着客户端设备继续发送对更新的请求而被更新。访问远离客户端设备的数据库的远程版本(504)。数据库的远程版本包括数据库实体,每个数据库实体具有跨用于数据库的数据库实体以单调增加方式分配的远程实体版本号。例如,数据库的远程版本可以是被一组数据库服务器用于通过网络(诸如互联网)处理接收到的客户端设备请求的许多存储设备中的一个。可以例如每当实体被更新时使用数据库服务器时间戳或连续增加的整数值来分配单调增加的版本号。过程500针对包括在从与特定数据库实体匹配的数据库实体开始的数据库实体的有序子集中的多个数据库实体中的每一个来确定数据库实体是否已被更新(506)。该确定是基于数据库实体的远程实体版本号和客户端数据库版本号的比较而进行的。例如,数据库服务器可以在由游标指定的实体处开始,按顺序遍历远程数据库实体,确定其是否已被更新。在其中远程实体版本号高于客户端数据库版本号的情况下,对应的远程数据库实体已被更新。在其中远程实体版本号小于客户端数据库版本号或与之匹配的情况下,对应的远程数据库实体未被更新。在某些实施方式中,数据库实体的子集不包括数据库的远程版本中的每个数据库实体。例如,该子集可以包括仅一个数据库实体、数据库实体的一半、或者数据库实体中的除掉一个的全部。在某些实施方式中,基于被满足的一个或多个系统约束而动态地确定该数据库实体的子集。例如,系统约束可以包括针对更新的请求所允许的最大处理时间或者针对更新的请求所允许的最大更新尺寸。由于此类子集是动态地确定的,所以每一个可以具有不同的尺寸,并且其在重复历经数据库期间可以重新调整尺寸。针对已被更新的每个数据库实体,向客户端设备提供实体更新(508)。例如如果数据库实体已被更新,则数据库服务器可以为客户端设备提供用于实体的更新值和更新版本号。将远程数据库版本号连同至少一个实体更新一起提供给客户端设备(510)。例如,用于数据库实体的子集的每个更新可以包括远程数据库版本号,客户端设备可以将其用来跟踪子集被更新到哪个远程数据库版本号。在某些实施方式中,过程500包括从客户端设备接收用于对数据库的客户端版本的更新的第二请求,该第二请求包括i)第二客户端数据库版本号,其与利用实体更新提供给客户端设备的远程数据库版本号匹配;以及ii)第二游标,其指定包括在数据库的客户端版本中且排序在包括在数据库实体的有序子集中的最后数据库实体之后。在某些实施方式中,第二游标可以指定为其提供了更新的最后一个实体。数据库服务器可以例如以与第一更新请求相同的方式处理第二更新请求,除起始位置由游标指定而不是在第一数据库实体处开始之外。该过程可以重复历经所有的数据库实体,并且在遍历所有数据库实体之后再次开始。在某些实施方式中,过程500包括更新用于数据库的远程版本的三维表格,该三维表格指定在当前时间之前预定时间段内发生的对数据库的更新版本的每个更新。例如,三维表格或改变日志可以存储在过去5分钟内对数据库的所有改变,允许请求被发送到数据库服务器到特定远程数据库版本号“为止”。换言之,客户端设备可以针对连续的更新请求指定同一数据库版本号,确保当已经由数据库服务器提供了所有更新时数据库对于该数据库版本号而言是一致的。处理被删除数据库实体图6是用于检测和处理被删除数据库实体的示例性过程600的数据流。在某些实施方式中,没有删除标记被数据库服务器610用来指示实体的删除。另外,数据库服务器610可以不保持用于远程数据库的改变日志。为了检测被删除实体,客户端设备602向数据库服务器610发送实体计数请求608。在某些实施方式中,实体计数请求608被包括在另一请求中,例如更新请求,诸如上文参考图4所讨论的请求408a。请求608可以包括指示针对哪个数据库版本请求实体的计数的数据库版本号。数据库服务器610接收计数请求608并确定多少实体被包括在存储于数据库存储设备612上的远程数据库614中。数据库服务器610为客户端设备提供远程数据库614中的实体的计数616。在某些实施方式中,可以用另一响应来提供计数,例如用在同步操作期间提供给客户端设备602的更新,诸如上文参考图4所讨论的更新416。在示例性过程600中,由数据库服务器610提供的计数616指示9个实体被存储在远程数据库614中。虽然在示例性过程600中明确地请求该计数,但不需要存在对于从客户端设备602发送的实体计数的明确请求。例如,可以将实体计数与对数据库变化的响应和/或与在同步操作期间发送的更新一起发送。客户端设备602将远程数据库614中的实体的计数616与存储在存储于本地存储设备604上的客户端数据库606中的实体的本地计数相比较。在其中远程数据库614中的实体的计数616与本地计数匹配的情况下,客户端设备602不需要检查被删除实体。在其中计数616指示远程数据库614中的实体比客户端数据库606中少时,实体已被从远程数据库614删除,并且删除商未被传播到客户端数据库606。在某些实施方式中,为远程数据库版本号提供计数616。客户端设备602可以使用计数的远程数据库版本号和客户端数据库版本号来确认在针对同一数据库版本号比较计数。如果数据库版本号不匹配,则由数据库服务器提供的计数对于数据库的客户端版本而言可能是不准确的。为了保持一致性,可以针对相同的数据库版本号比较计数。响应于确定计数不匹配,客户端设备602向数据库服务器610发送列表请求618。列表请求618是针对存储在远程数据库614中的实体的所有数据库键的列表的请求。例如,客户端设备602可以请求键而不是实体,因为键小于实体且足以用于检测删除,因为每个键唯一地识别对应实体。在某些实施方式中,数据库服务器610响应于列表请求618而提供用于包括在远程数据库614中的实体的所有键(例如,键A—E和G—J)的列表。客户端设备602可以将包括在列表中的键与客户端数据库606中的键相比较以找到被从远程数据库614删除的实体。在检测到被删除实体时,例如识别到被包括在客户端数据库606中而未在键列表中的键,客户端设备602将实体从客户端数据库606删除。如上所述,实体计数和键列表可以是用于同一数据库版本号,并且在其中数据库版本号与客户端数据库版本号匹配的情况下,这确保到特定数据库版本号为止,适当地检测到删除。在某些实施方式中,由数据库服务器610提供的键列表620包括被包括在远程数据库614中的键的适当子集。如上文相对于图4和5详细地描述的同步过程一样,可以按照子集来处理列表请求618和在响应中提供对应键列表,例如基于与上文所述的那些类似的系统约束。在示例性过程600中,第一键列表632是用于包括在远程数据库614中的实体的第一子集630的键,所述第一子集630例如实体A—D。示例性第一响应632还包括远程数据库版本号和指示第一子集630的最后一个实体的逻辑位置的游标。在某些实施方式中,不使用明确的游标,并且客户端设备602可以依赖于在响应中提供的最后一个键作为游标。当客户端设备602接收到第一响应632时,其可以确定包括在第一响应632中的键是否也被包括在客户端数据库606中。可以将检测到的任何已删除实体从客户端数据库606移除。在处理第一响应632之后,客户端设备可以提交第二列表请求618,其请求包括在远程数据库614中的键的其余部分的列表。第二请求可以包括游标,例如指定第二请求是针对在实体D之后的键列表——实体D是针对其在第一响应632中提供键的最后一个实体。在示例性过程600中,数据库服务器610提供用于数据库实体的第二子集640的第二响应642。第二响应642列出键E和G而不是F,因为F是被从远程数据库614删除的实体。客户端设备602使用第二响应642来确定实体F被删除,因为实体F在第二响应642所提供的键范围内,但是用于实体F的键未被包括在第二响应642中,而F被包括在客户端数据库606中。只要还有要检测和要处理的删除,就可以重复实现过程600,例如只要实体计数在客户端数据库606与远程数据库614之间不匹配即可。在其中向客户端设备602提供多个键范围的实施方式中,用于每个范围的每个请求和响应可以针对同一数据库版本号。这可以确保对于特定的实体范围而言由数据库服务器610提供的计数和键是用于与客户端数据库上的对应实体范围相同的数据库版本。例如,键范围A—D是用于数据库版本20;客户端设备可以请求用于其余实体E—J的键列表,到数据库版本20为止。在这种情况下,数据库服务器610可以访问用于远程数据库614的短期改变日志或三维表格以获得到数据库版本20为止的键列表。在某些实施方式中,在接收到指定数据库版本24的第二响应642时,客户端设备可以确保客户端数据库版本号是24,并且确保键E—G的范围在数据库版本24处。如果不是,则客户端设备可以在检查删除之前请求到数据库版本24为止的对实体E—G的更新。图7是用于检测和处理被删除数据库实体的示例性过程700的流程图。过程700可以由数据处理装置(诸如上文参考图6所述的客户端设备和/或数据库服务器)执行。从服务器设备接收至指定版本号为止的包括在数据库的远程版本中的数据库实体的计数(702)。例如,数据库实体的计数可以指定90个数据库实体被存储在到数据库版本300为止的数据库的远程版本中。过程700确定数据库的计数小于客户端实体计数,该客户端实体计数指定包括在到指定版本号为止的数据库的客户端版本中的实体的数目(704)。例如,客户端设备可以确定数据库的客户端版本仅包括到数据库版本300为止的85个数据库实体,其指示在数据库的远程版本上删除5个数据库实体。响应于确定数据库实体的计数小于客户端实体计数,向服务器设备发送用于包括在数据库的远程版本中的数据库实体的键列表的请求(706)。在某些实施方式中,该请求可以包括指定对于其而言客户端设备具有关于实体删除的信息的最后一个数据库实体的游标。不包括游标的请求可以例如在第一数据库实体处开始。从服务器设备接收用于包括在数据库的远程版本中的数据库实体的适当子集的键的第一适当子集(708)。例如,服务器设备可能已提供用于总共85个数据库实体中的前30个数据库实体的键列表。包括在子集中的键的数目可以取决于服务器约束,诸如上文参考图4和5所述的那些。从数据库的客户端版本移除在被包括在数据库的客户端版本中的数据库实体的相应适当子集内且具有未被包括在键的第一适当子集中的键的任何数据库实体(710)。例如,在其中数据库的客户端版本包括在由第一子集指定的范围内但具有不在用于由服务器设备提供的30个数据库实体的键的第一子集内的键的两个数据库实体的情况下,可以将那两个数据库实体从数据库的客户端版本移除,例如视为被删除实体,因为其不再存在于数据库的远程版本上。在某些实施方式中,过程700还包括向服务器设备发送用于包括在数据库实体的第二子集中的数据库实体的第二计数的第二请求,所述数据库实体的第二子集不同于数据库实体的第一子集,所述第二请求指定数据库的第二版本号。第二子集可以是例如未包括在第一子集内的所有实体,例如数据库实体31至90,其可以由在将第30(不包括第30)或第31(包括第31)实体指定为起始点的计数请求中发送的游标指定。在某些实施方式中,过程700可以包括从服务器设备接收到第二版本号为止的包括在被包括在数据库的远程版本中的数据库实体的相应第二子集中的数据库实体的第二计数;确定数据库实体的第二计数小于第二客户端实体计数,所述第二客户端实体计数指定到第二版本号为止的包括在数据库的数据库实体客户端版本的第二子集中的实体的第二数目;以及向服务器设备发送针对包括在第二子集中的数据库实体的键的第二列表的第二请求。可以不需要第二计数,例如在前文的示例中,基于第一计数来检测五个实体的删除,并且被删除实体中的仅两个已被识别,其留下三个被删除实体要检测。然而,在其中数据库版本号在请求之间改变的情况下,可能需要针对第二子集请求新的计数以便发现可能在请求之间已在第二子集内发生的任何新的删除。在某些实施方式中,可以使用短期改变的三维表格(例如,短期改变日志)来处理用于到特定数据库版本号为止的整个数据库的删除检测。在某些实施方式中,过程700可以包括从服务器设备接收用于包括在数据库的远程版本中的数据库实体的第三子集的键的第三子集。由于某些数据库服务器可能在某些系统约束内不能读取远程数据库中的每个键,例如时间或响应尺寸,所以由数据库服务器返回的键的子集可以再次地小于数据库中的其余键,例如列表可以包括用于第31至第65数据库实体的键。在某些实施方式中,过程700可以包括从数据库的客户端版本移除在对应于该第三子集的包括在该数据库的客户端版本中的数据库实体的子集内且具有未被包括在键的第三子集中的键的任何数据库实体。例如,如果对应子集中的三个实体具有未被包括在键的第三子集中的键,则可以将那三个实体从数据库的客户端版本删除。在前文的示例中,过程700可以在不请求用于数据库的其余部分的键的情况下结束,例如因为全部的五个删除已被识别。过程700的各部分可以重复。例如,客户端设备可以针对数据库实体的多个范围请求并接收包括在远程数据库服务器中的数据库实体的列表;并且可以使用那些列表来从数据库的客户端版本移除已删除实体。过程700在某些实施方式中可以继续发送用于实体列表的请求,例如,直至客户端数据库实体的计数与远程数据库实体的计数匹配为止。如果计数在第一次历经数据库之后并未相匹配,例如在其中在删除正在被更新的同时另一实体被删除的情况下,过程可以从开头继续。在某些实施方式中,可以将上文例如相对于图3A、3B、5和7单独地描述的每个过程完全或部分地与其它过程组合。例如,可以连同用于更新的请求一起提供对更新的请求,并且对更新的请求可以包括对计数或实体列表的请求。对更新请求的响应可以包括被包括在响应中的实体的列表,已更新或未更新两者的,允许客户端设备在不需要单独请求和响应的情况下检查被删除实体。可以使用请求和响应的其它配置来执行上述过程。示例性数据处理装置图8是示例性数据库处理装置800的框图。系统800包括处理器810、存储器820、存储设备830、以及输入/输出设备840。组件810、820、830和840中的每一个可以例如使用系统总线850互连。处理器810能够处理用于在系统800内执行的指令。在一个实施方式中,处理器810是单线程处理器。在另一实施方式中,处理器810是多线程处理器。处理器810能够处理被存储在存储器820中或存储设备830上的指令。存储器820存储在系统800内的信息。在一个实施方式中,存储器820是计算机可读介质。在一个实施方式中,存储器820是易失性存储器单元。在另一实施方式中,存储器820是非易失性存储器单元。存储设备830能够提供用于系统800的大容量存储。在一个实施方式中,存储设备830是计算机可读介质。在各种不同实施方式中,存储设备830可以包括例如硬盘设备、光盘设备、或某些其它大容量存储设备。输入/输出设备840提供用于系统800的输入/输出操作。在一个实施方式中,输入/输出设备840可以包括例如以太网卡之类的网络接口设备、例如RS-232端口之类的串行通信设备、和/或例如802.11卡之类的无线接口设备中的一个或多个。在另一实施方式中,输入/输出设备可以包括被配置成接收输入数据并向其它输入/输出设备(例如,键盘、打印机和显示设备860)发送输出数据的驱动设备。然而,还可以使用其它实施方式,诸如移动计算设备、移动通信设备、机顶盒电视客户端设备等。可以用数字电子电路或者用计算机软件、固件或硬件来实现本说明书中描述的本主题的实施例和在本说明书中描述的操作,包括在本说明书及其等价物中以及在其中的一个或多个的组合中公开的结构。可以将在本说明书中描述的本主题的实施例实现为一个或多个计算机程序,即在计算机存储介质上编码以便由数据处理设备执行或控制其操作的计算机程序指令的一个或多个模块。计算机存储介质可以是计算机可以读存储设备、计算机可读存储基板、随机或串行存取存储器阵列或设备或其中的一个或多个的组合,或者被包括在其中。此外,虽然计算机存储介质不是传播信号,但计算机存储介质可以是在人工生成的传播信号中编码的计算机程序指令的源或目的地。计算机存储介质还可以是一个或多个单独物理组件或介质(例如,多个CD、磁盘或其它存储设备)或者被包括在其中。可以将本说明书中描述的操作实现为由数据处理设备对存储在一个或多个计算机可读存储设备上或从其它源接收到的数据执行的操作。术语“数据处理设备”包括用于处理数据的所有种类的装置、设备以及机器,举例来说包括可编程处理器、计算机、芯片上系统、或前述各项的多个或组合。该装置可以包括专用逻辑电路,例如FPGA(现场可编程门阵列)或ASIC(专用集成电路)。除硬件之外,该装置还可以包括创建用于正在讨论中的计算机程序的执行环境的代码,例如组成处理器固件、协议栈、数据库管理系统、操作系统、跨平台运行时环境、虚拟机或其中的一个或多个的组合的代码。该装置和执行环境可以实现各种不同的计算模型基础设施,诸如web服务、分布式计算、和网格计算基础设施。可以用任何形式的编程语言(包括编译或解释语言或者说明或过程语言)来编写计算机程序(也称为程序、软件、软件应用、脚本或代码),并且可以将其以任何形式部署,包括作为独立程序或作为模块、组件、子例程、对象或适合于在计算环境中使用的其它单元。计算机程序可以但不需要对应于文件系统中的文件。可以将程序存储在保持其它程序或数据(例如,存储在标记语言文档中的一个或多个脚本)的文件的一部分中、专用于正在讨论中的程序的单个文件中、或者在多个协调文件(例如,存储一个或多个模块、子程序、或代码部分的文件)中。可以将计算机程序部署成在一个计算机上或者在位于一个地点处或跨多个地点分布并被通信网络互连的多个计算机上。在本说明书中描述的过程和逻辑流程可以由执行一个或多个计算机程序以通过对输入数据进行操作并生成输出来执行动作的一个或多个可编程处理器执行。该过程和逻辑流程还可以由专用逻辑电路执行,并且还可以将装置实现为专用逻辑电路,该专用逻辑电路流FPGA(现场可编程门阵列)或ASIC(专用集成电路)。适合于计算机程序执行的处理器举例来说包括通用和专用微处理器二者,以及任何种类的数字计算机的任何一个或多个处理器。一般地,处理器将从只读存储器或随机存取存储器或两者接收指令和数据。计算机的必不可少元件是用于根据指令执行动作的处理器和用于存储指令和数据的一个或多个存储器设备。一般地,计算机还将包括或者被操作耦合到以从其接收或向其传输或两者用于存储数据的一个或多个大容量存储设备(例如磁、磁光盘或光盘)。然而,计算机不需要具有此类设备。此外,可以将计算机嵌入另一设备中,例如移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏控制台、全球定位系统(GPS)接收机、或便携式存储设备(例如,通用串行总线(USB)闪速驱动),仅举几个例子。适合于存储计算机程序指令和数据的设备包括所有形式的非易失性存储器、介质或存储器设备,举例来说包括半导体存储器设备(例如,EPROM、EEPROM以及闪速存储器设备;磁盘,例如内部硬盘或可移动磁盘;磁光盘;以及CD-ROM和DVD-ROM磁盘)。可以用专用逻辑电路来补充处理器和存储器或者结合在其中。为了提供与用户的交互,在本说明书中描述的主题的实施例可以在计算机上实现,该计算机具有用于向用户显示信息的显示设备(例如,CRT(阴极射线管)或LCD(液晶显示器)监视器)和用户可以用来向计算机提供输入的键盘和指示设备,例如鼠标或轨迹球。也可以使用其它种类的设备来提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈,例如,视觉反馈、听觉反馈或触觉反馈;并且可以以任何形式接收来自用户的输入,包括声学、话音或触觉输入。另外,计算机可以通过向和从用户所使用的设备发送文档和接收文档来与用户相交互;例如,通过响应于从web浏览器接收到的请求而向用户的用户设备上的web浏览器发送网页。在本说明书中描述的主题的实施例可以在计算系统中实现,该计算系统包括例如作为数据服务器的后端组件或者包括例如应用服务器之类的中间件组件或者包括例如具有用户可以通过其与在本说明书中描述的主题的实施方式相交互的图形用户接口或web浏览器的用户计算机的前端组件,或者一个或多个此类后端、中间件或前端组件的任何组合。可以用数字数据通信的任何形式或介质(例如,通信网络)来将系统的组件互连。通信网络的示例包括局域网(“LAN”)和广域网(“WAN”)、互联网(例如,因特网)以及对等网络(例如,自组式对等网络)。计算系统可以包括用户和服务器。用户和服务器一般地相互远离并通常通过通信网络进行交互。用户和服务器的关系借助于在各计算机上运行且相互具有用户-服务器关系的计算机程序发生。在某些实施例中,服务器向客户端设备发射数据(例如,HTML页面)(例如,出于向和从与用户设备相交互的用户显示数据和接收用户输入的目的)。可以在服务器处从用户设备接收在用户设备处生成的数据(例如,用户交互的结果)。虽然本说明书包含许多特定实施方式细节,但不应将这些理解为对任何发明或可要求保护的范围的限制,而是作为可以为特定发明的特定实施例所特有的特征描述。在本说明书中在单独实施例的场境下描述的某些特征也可以组合地在单个实施例中实现。相反地,在单个实施例的场境下描述的各种特征也可以单独地或以任何适当的子组合在多个实施例中实现。此外,虽然上文将特征描述为以某些组合的方式作用甚至最初同样地要求保护,但在某些情况下可以从该组合去除来自要求保护的组合的一个或多个特征,并且要求保护的组合可以是针对子组合或子组合的变化。同样地,虽然在图中按照特定顺序描绘了各操作,但不应将其理解为要求按照所示的特定顺序或按照连续顺序来执行此类操作,或者执行所有的所示操作以实现期望的结果。在某些情况下,多重任务和并行处理可能是有利的。此外,不应将上述实施例中的各种系统组件的分离理解为在所有实施例中都要求此类分离,并且应理解的是所述程序组件和系统一般地可以在单个软件产品中被集成在一起或者封装到多个软件产品中。因此,已描述了本主题的特定实施例。其它实施例在以下权利要求的范围内。在某些情况下,在权利要求中记载的动作可以按照不同的顺序执行且仍实现期望的结果。另外,在附图中描绘的过程不一定要求所示的特定顺序或连续顺序以实现期望的结果。在某些实施方式中,多重任务和并行处理可以是有利的。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1