首页> 中国专利> 基于更新的变更提要处理删除请求

基于更新的变更提要处理删除请求

摘要

本文中的公开内容描述了利用变更提要来使用序列号处理删除请求。当源数据存储库上发生删除时,删除通知在源服务器上的变更提要中被创建。删除通知包括标识要被删除的记录集的删除记录ID集、标识删除通知集中的删除通知的序列的墓碑序列号(TSN)、和/或删除序列号(DSN)。每次新的删除通知被创建时,DSN递增1。删除通知可以表示单个记录或记录集的删除。每个删除通知被分配生存时间(TTL)值。删除通知在TTL到期时被删除。TSN和DSN条目用于确定任何删除更新是否已经错过以防止静默故障。

著录项

  • 公开/公告号CN114930315A

    专利类型发明专利

  • 公开/公告日2022-08-19

    原文格式PDF

  • 申请/专利权人 微软技术许可有限责任公司;

    申请/专利号CN202080092810.8

  • 发明设计人 K·阿加瓦尔;V·沙玛;

    申请日2020-11-24

  • 分类号G06F16/27(2006.01);

  • 代理机构北京市金杜律师事务所 11256;

  • 代理人李兴斌

  • 地址 美国华盛顿州

  • 入库时间 2023-06-19 16:25:24

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-09-06

    实质审查的生效 IPC(主分类):G06F16/27 专利申请号:2020800928108 申请日:20201124

    实质审查的生效

说明书

背景技术

一些数据库系统按照其修改时间的顺序列出对数据库中数据的变更。变更列表或变更提要包括对存储数据的写入和其他修改。但是,这些系统不会记载或记录存储数据的删除。已删除标记可以被添加到变更提要记录中,以模拟删除时的更新。根据配置的生存时间,已删除标记可以在一段时间后被永久删除。但是,用户或应用可能直到已删除标记的生存时间到期之后才能读取变更提要。在这种情况下,用户或应用可能永远不会知道文档被删除。这会造成静默故障。

发明内容

提供本“发明内容”以便以简化的形式介绍一些概念,这些概念将在下面的“具体实施方式”中进一步描述。本“发明内容”既不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于作为确定所要求保护的主题的范围的辅助。

一种用于在与存储数据的源数据存储库相关联的变更提要中创建删除通知的计算机化方法。删除通知包括标识要被删除的记录集的删除记录ID集和标识删除通知集中的删除通知的序列的墓碑序列号(TSN)。变更提要中的当前删除索引删除通知序列号(DSN)递增1。生存时间(TTL)值被分配给删除通知。删除通知在与TTL值相对应的时间段到期时被移除。与删除通知相关联的记录集从源数据存储库中被永久删除。

附图说明

下面结合以下所列的附图对所公开的示例进行详细描述:

图1是说明用于使用变更提要处理删除请求的系统100的示例性框图。

图2是说明用于基于对源数据存储库的变更来更新目标数据存储库的系统200的示例性框图。

图3是说明源服务器创建反映对用于更新目标数据存储库的源数据存储库的变更的删除通知的示例性框图。

图4是说明当数据变得与源数据存储库不同步时目标服务器更新数据存储库并且发起恢复过程的示例性框图。

图5是说明具有墓碑序列号(TSN)的删除通知的示例性框图。

图6是说明计算设备删除记录和更新包括TSN的变更提要的操作的示例性流程图。

图7是说明计算设备基于从源服务器接收的变更提要更新来更新本地数据存储库的操作的示例性流程图。

图8是说明计算设备基于来自变更提要的更新来更新本地数据存储库的操作的示例性流程图。

图9是说明计算设备检测源数据存储库与数据的本地只读副本之间的数据不一致性的操作的示例性流程图。

图10是说明适合于实现本文中公开的各种示例中的一些示例的示例计算环境的示例性框图。

对应附图标记在整个附图中指示对应部分。

具体实施方式

一些服务(诸如但不限于Azure物联网中心)使用具有变更提要特征的数据库系统来日志记录对数据的变更作为持久存储。在一个示例中,数据库系统(诸如但不限于CosmosDB系统)提供了这种变更提要日志记录特征,以使得用户能够按照其修改时间的顺序获取项目列表。变更提要还支持从称为事务提交序列号(LSN)/事务时间戳“etag”的偏移中读取提要的能力,该偏移可以保存并且用于在下一未处理的变更条目处继续读取提要。但是,变更提要不支持删除。正在读取和处理变更提要序列中的条目的应用不知道删除,因为已删除记录不会出现在变更提要中。这可能导致错过更新和不正确的更新行为。

“已删除”标记可以被添加到文档中以模拟删除时的更新。当文档被删除时,记录上的“已删除”标记被切换或被设置为“真”。这可能导致已删除文档条目的数目不断增加,其中已删除文档的记录的数目可能超过活动记录的数目。这会导致数据爆炸,除非最终清除已删除项目数据。

如果服务支持记录到期,则生存时间(TTL)字段可以被添加到记录中。已删除项目记录在TTL到期时被自动删除。但是,这种方法存在问题,即,用户可能直到已删除文档的TTL到期后才能读取变更提要。在这种情况下,读取变更提要的用户或应用可能永远不会知道文档已经被删除,从而无法确定错过了哪些删除更新。

在一个示例中,代替于发出请求DELETE/recordId,请求是PUT/recordId,其内容主体{deleted:true,ttl:3600}指示一小时的到期时间。如果应用或托管应用的服务器在超过TTL的时间段内停机,则应用可能要到到期时间之后才能读取变更提要,在这种情况下,条目将从变更提要中删除。应用永远不会意识到发生了删除。

本公开的各方面提供了一种变更提要组件,该变更提要组件在与存储数据的源数据存储库相关联的变更提要中创建删除通知。删除通知包括标识要被删除的记录集的删除记录ID集和标识删除通知集中的删除通知的序列的墓碑序列号(TSN)。TSN用于验证没有错过任何删除通知。这使得能够使用变更提要更准确地更新数据,同时减少静默故障并且减少必须将源数据的整个快照重新复制到目标数据存储库的次数。这减少了处理器使用,减少了网络带宽使用,减少了响应时间,并且提高了目标数据存储库中只读数据的可靠性和准确性。

其他方面提供了变更提要内的删除序列号(DSN),在每次发生删除记录集时,DSN递增。DSN用于检测删除更新故障并且防止静默故障。这减少了目标数据存储库中的故障,减少了处理器资源使用,并且降低了目标数据存储库中数据更新的错误率。

在其他示例中,提供删除更新的这个变更提要组件使得能够一致地处理从源数据存储库到目标数据存储库的删除并且没有任何时间上的依赖。DSN和TSN还提供了一种检测故障场景并且发起从故障事件中的恢复的方法。

在其他示例中,变更提要内的当前DSN在每次发生删除时递增1。这有助于检测错过的删除通知,尤其是在所有通知都已到期时。

通过包括用于目标数据存储库的增量更新的删除通知记录并且提供删除序列以标识错过的删除更新,变更提要以非常规方式操作。以这种方式,变更提要以非常规的方式使用,并且允许删除记录更新和检测静默故障以减少系统上的负载,从而提高底层计算设备的功能并且防止用户读取不正确或错误的数据。

图1是说明用于使用变更提要处理删除请求的系统100的示例性框图。在一些示例中,系统100包括存储数据103的源数据库102。源数据库102中的数据103不断地被从服务集接收的变更请求110修改。变更请求110可以包括用于写入(修改)或删除数据库102中的数据103的至少一部分的放置、提交和/或删除请求。

数据库102可以是任何类型的数据库或一个或多个数据存储设备上的其他数据存储库。与数据库102相关联的数据存储设备可以包括一种或多种不同类型的数据存储设备,诸如,例如一个或多个旋转磁盘驱动器、一个或多个固态驱动器(SSD)和/或任何其他类型的数据存储设备。在一些非限制性示例中,数据存储设备包括独立磁盘冗余阵列(RAID)阵列。数据存储设备可以被包括在计算设备内、附接到计算设备、插入计算设备或以其他方式与计算设备相关联。在其他示例中,数据库可以在经由网络访问的一个或多个远程数据存储库上被支持,诸如远程计算设备上的数据存储设备、远程数据中心中的数据存储或云存储。

变更提要104被维护以跟踪对数据103的更新106(变更)。变更提要104是对数据103执行的变更的索引,该索引以对数据103进行修改的顺序被列出。变更或更新106是响应于从服务集108接收的变更请求110做出的。

服务集108可以包括在数据库102中读取至少一些数据103、写入(修改)至少一些数据103和/或删除至少一些数据103(一个或多个记录)的应用或其他客户端发送请求。

源数据库102中的数据103的只读副本由一个或多个分区内的应用集112中的一个或多个应用维护。在一些示例中,数据103的只读副本由应用或服务维护,诸如例如但不限于高速缓存114、数据仓库116和/或搜索索引118。在一些非限制性示例中,数十或数百个服务器和/或客户端在源数据库102中维护数据103的只读副本。

应用集112利用从变更提要104接收的更新106来更新数据103的本地只读副本以保持本地副本与源数据库102中的数据同步。换言之,来自变更提要的信息用于复制对数据103的更新,其发生于在目标数据存储库(诸如高速缓存114、数据仓库116、搜索索引118或任何其他目标数据存储库)处维护的只读副本内的源数据库中。

图2是说明用于基于对源数据存储库的变更来更新目标数据存储库的系统200的示例性框图。在该非限制性示例中,一个或多个客户端202集对存储在源数据库208或其他源数据存储库中的记录集206中的数据204进行变更。源数据库208是用于存储在一个或多个数据存储设备上实现的数据的数据库,诸如但不限于图1中的数据库102。客户端集202可以经由一个或多个变更请求来修改数据204,诸如但不限于提交210请求、放置212请求和/或删除214请求。

在一些示例中,提交210创建新记录,放置212更新存储在服务中的预先存在的记录,以及删除214从服务中移除或擦除预先存在的记录。提交210和放置212请求还可以将条目插入到由带有新的记录或已更新记录的记录变更组成的序列中,而删除214则不可以。

在该示例中,变更提要216是索引或日志记录或以其他方式跟踪对数据204的变更。在其他示例中,变更提要不是数据库中的显式组件。数据库在创建或更新期间用单调增加的事务时间标记每个记录。如果相同的记录更新了两次,则它只会出现一次,并且删除永远不会出现。

当数据从记录集206被写入(修改)或删除时,条目被添加到变更提要216以记录变更。在一些示例中,变更提要216包括按照修改顺序220对数据204进行的更新列表218。

在一些非限制性示例中,多个服务器228在一个或多个分区内维护记录集206中的数据204的一个或多个只读副本。多个服务器228向变更提要216发送读取查询230以获取更新列表218。在一些示例中,对变更提要216的查询包括时间戳232或LSN。该查询请求变更或记录列表,该列表记录了自从给定时间戳232被包括在查询中以来对数据204进行的变更。如果查询中的时间戳是逻辑时间“t4”并且当前时间戳是“t7”,则变更提要发送在从“t4”开始到在“t7”结束的间隔期间对数据204进行的所有变更的更新列表218。因此,如果一个记录在时间戳“t5”处被删除,并且两个记录在时间戳“t6”处被添加,则发送到请求目标服务器的更新列表包括标识在“t5”处被删除的记录的删除通知、和标识在“t6”处被添加的两个记录的一个或多个更新。

更新列表218用于更新在目标数据库226处维护的记录集224中的数据204的只读222副本。当客户端集236中的客户端发送从目标数据库226中读取数据204的一个或多个请求238时,基于从变更提要216中获取的更新列表218进行的更新可以确保作为响应而提供给客户端集236的数据与数据库208上的源副本准确(同步)。

在一些示例中,如果时间戳232在时间“t0”,则发送查询以读取在t0之后具有时间戳的所有变更。如果页面大小为2,则返回的更新返回最多两个记录的返回。如果页面大小为1,则返回单个记录。下次在时间戳t2处发送读取查询时,查询会请求在时间t2之后对源数据存储库进行的所有变更。以这种方式,针对在它们进行的次序中发生的变更更新,系统递增地扫描数据。如果目标服务器停机,则一个或多个删除通知可能会在目标服务器能够查询它们之前被删除。当目标服务器恢复在线并且查询自从在t2处的上次更新以来的变更时,返回的更新不包括已超时并且从变更提要216中已被移除的删除通知记录。在这种情况下,在多个服务器中的目标服务器能够通过将用于在目标服务器处处理过的最后删除通知的先前TSN与用于下一删除通知的TSN进行比较以标识错过通知来检测错过的删除通知。

如果所有删除通知都已到期,则服务器可以查询变更提要中的DSN以检测错过的删除通知。DSN是在源服务器上设置的TSN的最新值。在某些示例中,可能存在TSN值小于DSN的删除通知。在该示例中,只有最后的删除通知具有TSN设置为等于DSN。

在一些示例中,系统在包含没有TTL的DSN的末尾使用删除通知。在每次删除操作中,这个最后的删除通知都会使用新的DSN被更新,并且因此它始终出现在所有其他删除通知之后。以这种方式,目标服务器标识其中目标数据库226变得与源数据库208不同步的情况。

图3是说明源服务器302创建反映对用于更新目标数据存储库的源数据存储库的变更的删除通知的示例性框图。在一些示例中,源服务器302包括存储数据306的数据存储库304,该数据306由于从诸如应用或客户端等一个或多个服务接收的写入请求和删除请求而变更。

变更提要组件308维护变更提要列表或变更日志,诸如但不限于图1中的变更提要104和/或图2中的变更提要216。当接收到修改数据306的写入请求(放置或提交)时,变更提要组件308在变更提要中创建标识记录和数据条目变更的记录。

在一些示例中,当从应用、用户或服务接收到删除请求时,变更提要组件在变更提要中创建删除通知312。删除通知是与一个或多个记录的删除相关联的记录。删除通知被添加到变更提要更新中。删除通知可以称为墓碑记录。

在其他示例中,删除通知包括已删除记录的标识和提供删除序列或索引号的TSN。删除通知312还包括TTL 316。TTL是直到删除通知被删除的阈值等待时间。换言之,当删除通知312被创建时,它被允许保留在更新的变更提要列表中直到TTL到期。TTL可以是任何可配置的时间段。在一个非限制性示例中,TTL可以是24小时。

在给定删除通知的TTL到期时,删除管理器组件310删除该删除通知。当原始记录被删除并且标识已删除记录的删除通知在TTL时间段结束时也被删除时,在变更提要中没有附加的数据删除记录或者没有提供给目标数据存储库326的任何其他更新数据。

删除管理器组件310周期性地检查变更提要中的每个记录的TTL。删除管理器组件可以称为垃圾收集器组件。

在一个示例中,删除管理器组件可以每小时、每分钟、每秒或任何其他周期性时间段检查记录的到期。当给定记录的TTL到期时,删除管理器组件310删除该记录。在一个示例中,当分配给给定删除通知的TTL到期时,删除管理器组件310从变更提要中删除该删除通知。

在一些示例中,源DSN 320也被维护在变更提要的DSN条目内。DSN是标识每个分区的删除记录的数目的索引或序列号。由于删除记录在TTL之后到期,这只是曾经创建的删除记录的总数目,而不是那些在某个时间点存在于变更提要中的删除记录的总数目。系统为每个数据分区维护DSN的本地副本。当给定分区中的某些内容被删除时,该给定分区的DSN会递增1。

每次创建删除通知时,DSN更新组件318将源DSN 320递增1。因此,如果当前源DSN320值为十二(12),并且表示从源数据存储库304中删除一组三个记录的新的删除通知被创建,则DSN更新组件318将源DSN 320值递增1,得到为十三(13)的新的值。

更新从源服务器传输到托管目标数据存储库326的目标服务器。在一些示例中,变更提要更新由目标服务器经由网络334从源服务器接收。该网络可以由一个或多个物理网络组件实现,诸如但不限于路由器、交换机、网络接口卡(NIC)和其他网络设备。网络334可以是用于能够与远程计算设备通信的任何类型的网络,诸如但不限于局域网(LAN)、子网、广域网(WAN)、无线(Wi-Fi)网络或任何其他类型的网络。在该示例中,网络334可以是WAN,诸如因特网。然而,在其他示例中,网络是本地或专用LAN。

目标数据存储库326在源数据存储库304中维护数据306的只读数据328副本。维护可以与源DSN 320值比较的本地删除序列号(DSN)330。每次目标数据存储库326基于删除通知312被更新以删除一些数据时,本地DSN 330递增1或者被设置为等于删除记录中的TSN,因为如果没有错过的删除记录,TSN应当单调递增。以这种方式,本地DSN 330应当等于源DSN 320或者仅比源DSN 320少1,因为每次在源数据库上发生删除时,更新都会被发送到目标数据存储库,作为响应,这使本地DSN递增。最终,目标上的本地DSN应当等于源DSN。

目标存储在处理变更提要方面可能落后很多,并且在这种情况下,其本地DSN可能比源DSN小1以上。例如,如果本地DSN为5,源DSN为9,则TSN在5到9之间的删除记录(诸如值6、7、8或9)会出现在变更提要中(假定它们尚未到期)。一旦目标存储库已经处理完所有删除记录,那么本地DSN就变得与源DSN相等。

如果本地DSN 330值与源DSN 320值相差不止1,并且没有待从变更提要中读取的删除记录,则指示目标数据存储库与源数据存储库304不同步。因此,如果本地DSN 330等于源DSN或仅比源DSN 320值小1,则目标数据存储库326没有错过任何删除通知,并且只读数据328应当是源数据306的准确副本。如果本地DSN 330比源DSN的值小2或更多,则目标数据存储库326已错过一个或多个删除通知,并且不再包括源数据306的忠实副本。因为删除通知在TTL时间后被删除,并且由删除通知表示的原始记录在删除通知创建时被删除,所以无法使用来自变更提要的更新来更新目标数据存储库326中的只读数据。这使得系统能够准确地检测错过的删除通知并且制定恢复过程以利用源数据存储库304中的数据306的准确副本重构目标数据存储库。

在其他示例中,目标数据存储库326维护先前TSN 332记录。先前TSN 332是来自在目标数据存储库处处理后的最后的删除通知的墓碑序列号。新接收的删除通知312的TSN314与先前TSN 332进行比较以确定新的TSN 314是否与先前TSN 332按次序排列。例如,如果先前TSN 332是七(7)并且来自变更提要组件308的更新中接收的删除通知的新的TSN314是八(8),则新的删除通知具有正确的次序并且没有删除通知由于服务器故障或与源服务器的通信丢失而被错过。然而,如果新的TSN 314是九(9)并且先前TSN 332只有七(7),它指示TSN为八(8)的错过的删除通知从未被接收。墓碑序列号中的这个间隙指示错过的删除通知。系统可以发起故障恢复过程。

在一些示例中,变更提要组件308接收删除事务请求作为输入,该删除事务请求包括要在称为“ids_to_delete”的变量中被删除的记录的ID列表。变更提要组件308可以读取具有最近(最新)删除通知的ID的删除通知(墓碑)记录,并且将其存储在对象“ctr”中。变更提要组件308创建与删除通知相关联的“Tombstone”类型的新对象。源上的DSN状态的表示如下:

{dsn:u64}。

在删除操作之后,状态变为:

dsn=dsn+1。

最近的删除通知(墓碑)用新的删除时期和已删除记录ID更新。此外,这等效于源数据存储库上的DSN。在设计中,我们创建该记录,使得它作为最后的删除记录出现在变更提要中。由于该记录没有TTL,因此它不会到期,并且目标最终将始终在提要中读取它。变更提要组件308创建Tombstone类型的新对象如下:

在删除操作之后,删除通知被添加到变更提要中,这可以看起来如下:

该对象存储在删除通知(墓碑)记录中。这相当于上面讨论的删除通知。在这个非限制性示例中,TTL为记录提供一天的生存时间。变更提要组件删除在“ids_to_delete”中ID的记录。

在一些非限制性示例中,如果事务被成功地执行,则变更提要组件308将最新的事务序列号/事务时间戳存储为LSN。在其他示例中,在目标上维护的唯一状态是最后处理的删除记录的TSN和从其恢复读取变更提要的检查点。当应用启动时,它会在初始化内存中的最后的已知的删除通知(墓碑)状态,并且定期将该状态刷新到磁盘或永久存储体。

在处理删除通知时,它获取更新如下:

在冷启动时,LSN和TSN的值都为零。(多个)值可以被初始化为磁盘或永久存储体中的最后的已知值。

变更提要读取器组件不依赖于任何时间语义来确保正确性,并且提供确定性方式来处理已删除记录、标识潜在的系统故障和/或发起恢复机制。例如,故障恢复过程可以使目标数据存储库326由于坏数据而停止使用和/或将目标处的数据复原到正确状态。目标数据存储库326可以通过从目标数据存储库中删除所有数据并且将源数据存储库304中的所有数据的新快照复制到目标数据存储库326中来被复原。

图4是说明当数据变得与源数据存储库不同步时目标服务器400更新数据存储库以及发起恢复过程的示例性框图。在一些示例中,目标服务器400是托管目标数据存储库422的服务器。目标服务器可以被实现为诸如但不限于使用变更提要处理器或类似技术并且构建处理变更流以维持状态的应用或系统的任何数据库系统。

目标数据存储库422存储数据,诸如但不限于源数据存储库中的数据副本。目标数据存储库422可以在多个分区中的分区内实现。目标数据存储库422可以可选地包括数据库,诸如但不限于图2中的数据库226。

在一些示例中,目标服务器400包括变更提要读取器组件402。变更提要读取器组件402向源服务器上的变更提要组件发送查询,诸如但不限于图3中的变更提要组件308。变更提要读取器组件402从源服务器上的变更提要接收更新。

如果删除通知在更新中被接收到,则变更提要读取器组件402将本地维护的DSN410值与在更新中提供的当前DSN的值进行比较408。当前DSN值是指示删除序列的源DSN,诸如但不限于图3中的源DSN 320。如果本地DSN和源DSN相等或者本地DSN只比源DSN少1,则删除是最新的。差值为1指示没有删除已被错过。删除在应用删除记录之后是最新的,之后,本地DSN和源DSN变得相同。只有当本地DSN和源DSN相等时,我们才可以说目标和源在已删除记录方面是同步的。

然而,如果本地DSN 410值比在来自变更提要的最近删除通知中提供的当前DSN小2或更多,则目标服务器已经错过了一个或多个删除通知。在这种情况下,恢复组件418发起恢复过程420。恢复过程使本地数据存储库422离线或以其他方式使本地数据存储库422中的本地数据对于从数据存储库422中读取数据的用户、应用或其他服务不可用,因为数据不是源数据的准确副本。

在其他示例中,变更提要读取器组件将从最后的处理后的删除通知(墓碑)记录中获取的先前TSN 412的本地副本与由来自源服务器的变更提要更新提供的最新接收的删除通知中的当前TSN进行比较。当前TSN是从在变更提要更新中从变更提要接收的删除通知中获取的。当源服务器上发生给定删除操作时,系统会创建具有TTL的删除通知,该TTL指令了删除通知在被删除之前保留在变更提要中的时间。源服务器上的TSN被递增1以反映删除操作。

先前TSN值是与目标数据存储库上的数据的只读版本相关联的TSN值。在目标服务器上处理变更提要中的最后的删除通知时,先前TSN应当等于源数据存储库上的DSN。变更提要按修改时间排序。目标服务器上等待被处理的删除通知没有与之关联的TTL。删除通知将一直保留,直到目标服务器处理删除通知以更新目标数据存储库上的只读数据。

如果新的(未处理的)删除通知中的当前TSN等于先前TSN或仅比上次处理的删除通知(删除通知)的先前TSN多1,则指示没有来自变更提要的删除通知被丢失或以其他方式被错过。因此,本地数据存储库中的本地数据是准确的。但是,从变更提要接收的新接收并且未处理的删除通知的当前TSN比先前TSN大2或更多,这指示一个或多个删除通知已经被错过。在这种情况下,恢复组件418发起恢复过程420。

在一些示例中,每次基于删除通知,数据存储库422上的数据发生更新时,递增组件414执行递增操作416。递增操作可以包括每次发生记录集删除时将DSN递增1。

每次删除通知在变更提要中被创建时,源服务器302上的删除管理器组件310为删除通知分配TSN值,该TSN值比上一删除通知的先前TSN递增1,如以上在图3中所示。在删除操作时递增TSN是在源上完成的。然而,在一些非限制性示例中,每次新的删除通知被生成时,递增组件递增TSN的值。

当记录集被删除时,在一些示例中,变更提要读取器组件402从变更提要中读取删除通知记录。与删除通知相关联的DSN和/或TSN由变更提要读取器组件使用以处置已删除记录的处理并且检测系统是否已达到无法恢复的故障状态。当检测到这样的故障时,系统会放弃其内部状态并且开始重构服务器。

在一些示例中,变更提要读取器组件402从变更提要中读取记录并且处理该记录。在应用异常地发生故障之后,它会丢失它的内存状态并且从持续状态初始化自己。在一些示例中,内存状态被保存。

在其他非限制性示例中,应用读取的变更提要是源数据库的变更提要的连续子序列。DSN和/或TSN用于验证应用/目标数据库状态和源数据库状态是否彼此同步,或者在变更提要中是否存在要由应用处理的待定更新。如果变更提要中具有与变更更新相关联的到期的TTL的删除通知,在目标服务器处进行处理之前从源处的变更提要中被移除,则可能导致数据错过或不同步。在这种情况下,将在应用上运行恢复操作。与该删除通知相关联的TSN在TTL到期时从源服务器中被清除,以避免数据爆炸。

以这种方式,利用DSN和TSN的变更提要读取器有助于构建高度可用的服务,从而以非常高性能的方式提供存储在持久只读数据存储库中的数据的高度一致的视图。

图5是说明具有TSN 502的删除通知500的示例性框图。删除通知500可以表示单个记录的删除或多个记录(两个或更多个记录)的删除。删除通知500中包括的已删除记录ID集504包括每个已删除记录的记录标识符(ID)。如果单个记录被删除,则已删除记录ID集504仅包括该记录的单个ID。如果三个记录在单个事务期间被删除,则已删除记录ID集504包括标识三个已删除记录中的每个的三个记录ID。

TSN 502是删除通知500的墓碑序列号502。墓碑序列号在每次另一删除通知被创建时递增。删除通知不包括DSN。

最后提交的事务序列号(LSN)506是每个事务的序列号。在某些示例中,删除通知是可以如下表示的“TombstoneRecord”:

struct TombstoneRecord

{

id:String,

delete_epoch:u64,

deleted_record_ids:Vec

_lsn:u64

}

其中术语“delete_epoch”表示TSN,它是一个单调递增的数字,每当记录集被删除时它就会递增。术语“deleted_record_ids”表示被删除的记录的标识符(ID)列表。LSN(_lsn)是执行删除操作的事务提交序列号。

当文档集被删除时,则在同一事务中,删除通知记录用单个事务或单个删除请求的已删除记录的ID列表被更新。如果单个删除通知记录具有从开始的已经删除的所有记录ID的列表,则该列表会增长,从而导致另一种数据爆炸情况,尽管它仅在一个记录中。

在一个示例中,提供了具有已知标识符“CURRENT_TOMBSTONE”的删除通知记录。在冷启动时,其可以表示为:

id:’CURRENT_TOMBSTONE’,

delete_epoch:0,deleted_record_ids:[],

_lsn:0}.

在每个删除事务中,使用不同ID创建该记录的副本。该记录使用新的已删除记录ID集被更新。在复制记录上添加TTL,以便记录在到期时间后自动删除。这可以防止数据爆炸,因为所有已删除记录及其删除通知记录最终都会从系统中删除。这也有助于标识读取变更提要的应用是否落后TTL持续时间以上并且必须开始恢复动作。

为删除通知和错过的删除检测提供逻辑版本号的删除通知对时间或其他这样的非确定性因素没有任何依赖。该删除通知提供了一种确定的方法来使用更新的变更提要来处置删除请求的一致处理。它进一步提供了一种检测系统是否处于故障状态的方法,并且也提供了一种从中恢复的方法。

图6是说明计算设备删除记录和更新包括TSN的变更提要的操作的示例性流程图。图6所示的过程由在计算设备(诸如图10的计算设备1000)上执行的变更提要组件执行。

该过程开始于在602接收用于删除的记录ID集。记录ID集是在来自用户、应用或服务的删除请求中接收的。在604,在创建删除通知记录之前或在创建删除通知记录时立即递增DSN。在606,变更提要组件创建删除通知记录。删除通知记录可以称为墓碑记录。在608,变更提要组件为删除通知记录创建(分配)TTL。在610,从源数据存储库中删除记录集。

在612,确定是否接收到下一删除请求。如果是,则变更提要组件迭代地执行602到612,直到没有接收到附加的删除请求。该过程随后终止。

删除通知记录包含DSN的最新值作为TSN。记录删除、删除通知记录的创建、TTL创建和DSN递增作为事务发生。如果任何步骤发生故障,则事务将回滚到先前状态。

虽然图6所示的操作由计算设备执行,但本公开的方面考虑了由其他实体执行该操作。在非限制性示例中,云服务执行操作中的一个或多个。在另一示例中,存储计算机可读指令的一个或多个计算机可读存储介质可以执行以使得至少一个处理器实现图6所示的操作。

图7是说明计算设备基于从源服务器接收的变更提要更新来更新本地数据存储库的操作的示例性流程图。图7所示的过程由在计算设备(诸如图10的计算设备1000)上执行的变更提要组件或变更提要读取器组件执行。

该过程开始于在702向源变更提要发送读取查询。读取查询在给定时间戳之后请求对源数据存储库的所有更新。在704,确定是否接收到更新。如果是,则在706,确定更新是否是未处理的更新。未处理的更新是先前没有被接收和处理以更新本地数据存储库的更新。如果是,则在708,确定更新是否包括未处理的删除通知。如果否,则在710,处理更新并且此后该过程终止。

返回到708,如果更新包括删除通知,则在712,变更提要读取器将删除通知中的新的TSN与先前TSN进行比较。在714,确定新的TSN是否比先前TSN大1以上。如果是,则在716,发起恢复操作。此后该过程终止。

如果新的删除通知的TSN不大于先前TSN,则在718,从本地数据存储库中删除记录。在720,将DSN递增1。此后该过程终止。

虽然图7所示的操作由计算设备执行,但本公开的方面考虑了由其他实体执行该操作。在非限制性示例中,云服务执行操作中的一个或多个。在另一示例中,存储计算机可读指令的一个或多个计算机可读存储介质可以执行以使得至少一个处理器实现图7所示的操作。

图8是说明计算设备基于来自变更提要的更新来更新本地数据存储库的操作的示例性流程图。图8所示的过程由在计算设备(诸如图10的计算设备1000)上执行的变更提要组件或变更提要读取器组件执行。

该过程开始于在802从源变更提要接收更新。在804,确定是否接收到具有更新的DSN。如果是,则在806,变更提要读取器组件计算所接收的源DSN与本地DSN之间的差值。在808,确定该差值是否小于或等于1。如果是,则在810,处理删除。在812,递增本地DSN以反映处理后的删除通知。

如果源DSN与本地DSN之间的差值大于1,则在814,确定是否存在未处理的删除通知。如果没有,则在816,发起恢复过程。此后该过程终止。如果有未处理的删除通知,则数据可能仍处于同步状态。例如,如果目标DSN为6并且源DSN为8,则源DSN值与目标DSN值之间的差值大于1。但是,如果变更提要中剩余两个未处理的删除通知等待在目标处被处理,则目标不会与源不同步,因为当两个待处理的删除通知被完全处理以更新目标处的数据时,目标DSN将递增2。

虽然图8所示的操作由计算设备执行,但本公开的方面考虑了由其他实体执行该操作。在非限制性示例中,云服务执行操作中的一个或多个。在另一示例中,存储计算机可读指令的一个或多个计算机可读存储介质可以执行以使得至少一个处理器实现图8所示的操作。

图9是说明计算设备检测源数据存储库与数据的本地只读副本之间的数据不一致性的操作的示例性流程图。图6所示的过程由在计算设备(诸如图10的计算设备1000)上执行的变更提要组件或变更提要读取器组件执行。

该过程开始于在902接收删除通知。在904,将删除通知的新TSN与先前TSN的本地副本进行比较。在906,确定先前TSN与新TSN之间的差值是否大于1。如果否,则在908,变更提要读取器组件将本地DSN与由变更提要更新提供的更新后的源DSN进行比较以确定数据是否不同步。在910,确定两个序列之间是否存在大于1的间隙,并且在变更提要中没有剩余的未决删除通知。如果否,则在912,将删除通知中标识的记录集从本地数据存储库中删除。在914,将本地DSN递增1。在916,将先前TSN更新为删除通知的TSN值。

如果在906处TSN与先前TSN之间的间隙大于1,则在918,发起恢复操作。类似地,如果本地DSN与在变更提要更新中接收的源DSN之间的间隙,则在918,发起恢复操作操作。此后该过程终止。

虽然图9所示的操作由计算设备执行,但本公开的方面考虑了由其他实体执行该操作。在非限制性示例中,云服务执行操作中的一个或多个。在另一示例中,存储计算机可读指令的一个或多个计算机可读存储介质可以执行以使得至少一个处理器实现图9所示的操作。

其他示例

本文中公开的一些方面和示例针对一种用于处理具有变更提要的删除请求的系统、方法和/或计算机可执行指令,其包括:处理器;以及存储指令的计算机可读介质,该指令在处理器执行时可操作以:在与存储数据的源数据存储库相关联的变更提要中创建删除通知,删除通知包括标识要删除的记录集的删除记录ID集和标识删除通知集中的删除通知的序列的TSN;在变更提要中递增当前DSN,DSN标识在变更提要上生成的删除通知的数目;为删除通知分配TTL值,其中删除通知在与TTL值相对应的时间段到期时被移除;以及删除与删除通知相关联的记录集。

本文中公开的另外的方面和示例针对一种用于在与存储数据的源数据存储库相关联的变更提要中创建删除通知的系统、方法或计算机可执行指令,删除通知包括标识要删除的记录集的删除记录ID集和标识删除通知集中的删除通知的序列的TSN;在变更提要中递增当前DSN,DSN标识在变更提要上生成的删除通知的数目;为删除通知分配TTL值,其中删除通知在与TTL值相对应的时间段到期时被移除;以及删除与删除通知相关联的记录集。

本文中公开的其他方面和示例针对一种用于使用具有变更提要的序列号来处理删除请求的系统、一种方法和/或一种或多种其上存储有计算机可执行指令的计算机存储设备,该指令在由计算机执行时引起计算机执行包括以下各项的操作:在与存储数据的源数据存储库相关联的变更提要中创建删除通知,删除通知包括标识要删除的记录集的删除记录ID集和标识删除通知集中的删除通知的序列的TSN;在变更提要中递增当前DSN,DSN标识在变更提要上生成的删除通知的数目;为删除通知分配TTL值,其中删除通知在与TTL值相对应的时间段到期时被移除;以及删除与删除通知相关联的记录集。

在示例场景中,诸如CosmosDB等数据库系统使用变更提要中的LSN、DSN和/或TSN执行每个事务的删除和更新操作以检测故障。读取更新变更提要以维护数据库中的本地状态的任何应用都可以利用每个分区的DSN和/或TSN来处理删除通知并且检测错过的删除通知以触发恢复操作。

在其他示例中,系统对存储在服务中的数据执行事务。在事务中更新的每个记录都分配有单调增加的LSN,LSN是事务提交序列号。变更提要中的条目包括记录的最新LSN。LSN用于跟踪与放置和提交请求以及删除相关联的更新。

当数据文档被删除时,临时删除通知记录被插入。它为已删除文档插入临时删除通知记录。永久删除通知记录使用最新的删除时期TSN和事务LSN被更新。它还更新变更提要并且插入新的和更新后的文档。插入到变更提要中的文档顺序按事务被批处理,但它们在批处理中的顺序可能无法保证。

其他系统中的系统模拟对应用的恢复操作,这相当于通过从头读取变更提要来清除所有应用状态并且从数据库中重新水化数据。在恢复完成之后,内存中应用状态将与数据库状态同步并且处理来自变更提要的所有记录。

在其他非限制性示例中,来自变更提要的记录仅在其LSN大于或等于最后的检查点LSN时才被处理。变更提要仅从最后的检查点LSN中被读取。如果读取的记录是数据文档,则应用会更新其内存状态。否则,如果它是删除通知记录,并且墓碑时期最多比应用的删除时期早1,则该记录被处理,并且应用将文档从内存状态中删除。如果墓碑时期比应用的删除时期早2或更多,则应用错过了删除并且运行恢复操作。

在示例场景中,当记录“R1”被删除时,删除通知记录(TM)被创建。删除的序列号递增1。为删除通知创建条目,该条目包括TSN,并且为DSN创建另一条目。目标服务器读取这两个条目并且跟踪序列号。如果新的更新中的DSN为22,但目标服务器的本地DSN仅为20,则系统知道删除通知序列中的缺少数字。在发生这种情况时,恢复过程可以重构服务器以防止向请求客户端提供不良数据。

同样,在另一示例中,如果删除通知的TSN是TM 7并且目标数据库上的先前TSN是TM 5,则系统识别出删除TM 6错过或未被接收到。这指示数据与源数据存储库不同步。这提供了一个简单的可扩展的系统,由于源与目标之间的数据传播较少,因此该系统计算效率更高。这是一种增量方法,可以防止安全违规并且可以准确检测删除错过而没有数据质量损失。

备选地,或除了本文中描述的其他示例,示例包括以下各项的任意组合:

-将与源数据存储库上的数据的只读版本相关联的本地DSN值与从变更更新中的删除通知获取的当前DSN进行比较,以标识本地DSN值与当前DSN的值之间的差值,该变更更新是从变更提要接收的;

-响应于本地DSN值与当前DSN的值之间的差值等于1,从目标数据存储库中删除在删除通知中的删除记录ID集中标识的记录集,并且将本地DSN值递增1;

-响应于本地DSN值与当前DSN的值之间的差值等于或大于2,发起恢复操作;

-将与目标数据存储库上的数据的只读版本相关联的先前TSN值与从删除通知获取的TSN进行比较,以标识先前TSN值与当前TSN的值之间的差值,该删除通知从变更更新中的变更提要接收;

-响应于先前TSN与当前TSN之间的差值等于1,从目标数据存储库中删除在删除通知中的删除记录ID集中标识的记录集;

-将先前TSN的值替换为当前TSN值的值;以及

-响应于先前TSN值与当前TSN的值之间的差值等于或大于2,发起恢复操作。

虽然已经根据各种示例及其相关操作描述了本公开的各方面,但是本领域技术人员将理解,来自任何数目的不同示例的操作的组合也在本公开的方面的范围内。

示例操作环境

图10是用于实现本文中公开的方面的示例计算设备1000的框图并且通常被指定为计算设备1000。计算设备1000是合适的计算环境的示例并且不旨在暗示对本文中公开的示例的使用范围或功能的任何限制。计算设备1000也不应当被解释为具有与所示组件/模块中的任何一个或组合相关的任何依赖性或要求。本文中公开的示例可以在计算机代码或机器可用指令的一般上下文中描述,包括由计算机或其他机器(诸如个人数据助理或其他手持设备)执行的计算机可执行指令(诸如程序组件)。通常,包括例程、程序、对象、组件、数据结构等在内的程序组件是指执行特定任务或实现特定抽象数据类型的代码。所公开的示例可以在各种系统配置中实践,包括个人计算机、膝上型电脑、智能手机、移动平板电脑、手持设备、消费电子产品、专业计算设备等。当任务由通过通信网络链接的远程处理设备执行时,所公开的示例也可以在分布式计算环境中实践。

计算设备1000包括直接或间接耦合以下设备的总线1010:计算机存储存储器1012、一个或多个处理器1014、一个或多个呈现组件1016、I/O端口1018、I/O组件1020、电源1022和网络组件1024。虽然计算设备1000被描绘为看似单个设备,但多个计算设备1000可以一起工作并且共享所描绘的设备资源。例如,存储器1012可以分布在多个设备上,并且(多个)处理器1014可以与不同设备一起容纳。

总线1010表示可以是一个或多个总线(诸如地址总线、数据总线或其组合)的任何内容。虽然图10的各种块为了清楚起见而用线示出,但是描绘各种组件可以用备选表示来完成。例如,在某些示例中,诸如显示设备等表示组件是I/O组件,而处理器的某些示例具有自己的存储器。诸如“工作站”、“服务器”、“膝上型电脑”、“手持设备”等类别之间没有区别,因为所有这些类别都在图10以及本文中对“计算设备”的引用的范围内。存储器1012可以采用下面的计算机存储介质引用的形式,并且可操作地为计算设备1000提供计算机可读指令、数据结构、程序模块和其他数据的存储。在一些示例中,存储器1012存储操作系统、通用应用平台或其他程序模块和程序数据中的一种或多种。存储器1012因此能够存储和访问由处理器1014可执行并且被配置为执行本文中公开的各种操作的数据1012a和指令1012b。

在一些示例中,存储器1012包括易失性和/或非易失性存储器、可移动或不可移动存储器、虚拟环境中的数据盘或其组合形式的计算机存储介质。存储器1012可以包括与计算设备1000相关联或由计算设备1000可访问的任何数目的存储器。存储器1012可以在计算设备1000内部(如图10所示)、在计算设备1000外部(未示出)或这两者(未示出)。存储器1012的示例包括但不限于随机存取存储器(RAM);只读存储器(ROM);电可擦除可编程只读存储器(EEPROM);闪存或其他存储技术;CD-ROM、数字多功能光盘(DVD)或其他光学或全息媒体;磁盒、磁带、磁盘存储或其他磁性存储设备;连线到模拟计算设备的存储器;或用于编码期望信息并且供计算设备1000访问的任何其他介质。另外地或备选地,存储器1012可以分布在多个计算设备1000上,例如,在其中指令处理在多个计算设备1000上执行的虚拟化环境中。出于本公开的目的,“计算机存储介质”、“计算机存储存储器”、“存储器”和“存储器设备”是计算机存储存储器1012的同义词,并且这些术语均不包括载波或传播信号。

(多个)处理器1014可以包括从诸如存储器1012或I/O组件1020等各种实体读取数据的任何数量的处理单元,并且可以包括CPU和/或GPU。具体地,(多个)处理器1014被编程为执行用于实现本公开的方面的计算机可执行指令。指令可以由处理器、计算设备1000内的多个处理器、或客户端计算设备1000外部的处理器来执行。在一些示例中,(多个)处理器1014被编程为执行诸如附图所示的那些指令。此外,在一些示例中,(多个)处理器1014表示用于执行本文中描述的操作的模拟技术的实现。例如,操作可以由模拟客户端计算设备1000和/或数字客户端计算设备1000执行。(多个)呈现组件1016向用户或其他设备呈现数据指示。示例性呈现组件包括显示设备、扬声器、打印组件、振动组件等。本领域技术人员将理解和了解,计算机数据可以以多种方式呈现,诸如在图形用户界面(GUI)中在视觉上、通过扬声器在听觉上、在计算设备1000之间以无线方式、通过有线连接、或以其他方式。I/O端口1018允许计算设备1000在逻辑上耦合到包括I/O组件1020在内的其他设备,其中一些可以内置。示例I/O组件1020包括诸如但不限于麦克风、操纵杆、游戏手柄、卫星天线、扫描仪、打印机、无线设备等。

计算设备1000可以使用到一个或多个远程计算机的逻辑连接经由网络组件1024在网络环境中操作。在一些示例中,网络组件1024包括网络接口卡和/或用于操作网络接口卡的计算机可执行指令(例如,驱动程序)。计算设备1000与其他设备之间的通信可以使用任何协议或机制通过任何有线或无线连接发生。在一些示例中,网络组件1024可操作以使用传输协议在公共、私有或混合(公共和私有)之上传送数据、使用短程通信技术(例如,近场通信(NFC)、蓝牙

尽管结合示例计算设备1000进行了描述,但是本公开的示例能够利用很多其他通用或专用计算系统环境、配置或设备来实现。可以适合与本公开的各方面一起使用的众所周知的计算系统、环境和/或配置的示例包括但不限于智能电话、移动平板电脑、移动计算设备、个人计算机、服务器计算机、手持式或膝上型计算机、多处理器系统、游戏机、基于微处理器的系统、机顶盒、可编程消费电子产品、移动电话、可穿戴或便携式形式的移动计算和/或通信设备(例如,手表、眼镜、耳机或耳机)、网络PC、小型计算机、大型机、包括以上任何系统或设备的分布式计算环境、虚拟现实(VR)设备、增强现实(AR)设备、混合现实(MR)设备、全息设备等。这样的系统或设备可以通过手势输入、接近输入(诸如通过悬停)和/或语音输入以任何方式接受来自用户的输入,包括来自诸如键盘或指示设备等输入设备。

本公开的示例可以在计算机可执行指令(诸如程序模块)的一般上下文中描述,该计算机可执行指令由一个或多个计算机或其他设备以软件、固件、硬件或其组合来执行。计算机可执行指令可以组织成一个或多个计算机可执行组件或模块。通常,程序模块包括但不限于执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件和数据结构。本公开的各方面可以用任何数目和组织的这样的组件或模块来实现。例如,本公开的各方面不限于图中所示和本文中描述的特定计算机可执行指令或特定组件或模块。本公开的其他示例可以包括具有比本文中示出和描述的功能更多或更少的功能的不同的计算机可执行指令或组件。在涉及通用计算机的示例中,当被配置为执行本文所述的指令时,本公开的各方面将通用计算机转换为专用计算设备。

作为示例而非限制,计算机可读介质包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块等信息的任何方法或技术实现的易失性和非易失性的可移动和不可移动存储器。计算机存储介质是有形的并且与通信介质互斥。计算机存储介质以硬件实现,并且不包括载波和传播信号。用于本公开目的的计算机存储介质不是信号本身。示例性计算机存储介质包括硬盘、闪存驱动器、固态存储器、相变随机存取存储器(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、闪存或其他存储技术、光盘只读存储器(CD-ROM)、数字多功能磁盘(DVD)或其他光学存储、磁盒、磁带、磁盘存储或其他磁性存储设备、或可以用于存储信息以供计算设备访问的任何其他非传输介质。相反,通信介质通常在诸如载波或其他传输机制等调制数据信号中体现计算机可读指令、数据结构、程序模块等,并且包括任何信息传递介质。

本文中示出和描述的本公开的示例中的操作的执行顺序或执行顺序不是必需的,并且可以在各种示例中以不同的顺序方式执行。例如,预期在另一操作之前、同时或之后执行(execute)或执行(perform)特定操作在本公开的各方面的范围内。当介绍本公开的各方面的要素或其示例时,冠词“一个(a)”、“一个(an)”、“该(the)”和“上述(said)”旨在表示存在一个或多个要素。术语“包括(comprising)”、“包括(including)”和“具有(having)”旨在是包括性的,并且表示除所列要素外可以还有其他要素。术语“示例性”旨在表示“示例”。短语“A、B和C中的一个或多个”是指“A中的至少一个和/或B中的至少一个和/或C中的至少一个”。

已经详细描述了本公开的各方面,将很清楚的是,在不脱离如所附权利要求所限定的本公开的各方面的范围的情况下,可以进行修改和变更。由于可以在不脱离本公开的各方面的范围的情况下对以上构造、产品和方法进行各种改变,因此意图是,将以上描述中包含的以及附图中示出的所有内容解释为说明性的,而非在限制意义上解释。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号