用于数据库变化流的缓存技术的制作方法

专利检索2022-05-11  1


用于数据库变化流的缓存技术


背景技术:
技术领域
1.公开文本总体上涉及数据库系统,并且更具体地,涉及处理数据库表的变化流(change stream)。
2.相关技术描述
3.一些数据库系统生成指示数据库表的变化的一个变化记录流。变化流可以由多个不同的应用程序处理,并且在处理变化记录方面可能存在定时限制。随着对变化流的访问次数的增加,在传统的实现中性能可能会下降。
附图说明
4.图1是示出根据一些实施方案的包括缓存的示例数据库变化流进程(stream process)系统的框图。
5.图2是示出根据一些实施方案的处理变化流的流进程的示例处理层的框图。
6.图3是示出根据一些实施方案的网络进程与流进程之间的示例交互的框图。
7.图4是示出根据一些实施方案的示例缓存实现的框图。
8.图5是示出根据一些实施方案的当检索变化记录时对缓存条目的示例添加的框图。
9.图6是示出根据一些实施方案的用于对变化流使用缓存的示例方法的流程图。
10.图7是示出根据一些实施方案的用于基于来自多个租户的检查点生成组合变化流检查点的技术的框图。
11.图8是示出根据一些实施方案的用于使用缓存处理数据库表的变化流的方法的流程图。
12.图9是示出根据一些实施方案的示例计算设备的框图。
13.公开文本包括对“一个实施方案”或“实施方案”的引用。短语“在一个实施方案中”或“在实施方案中”的出现不需要指示相同的实施方案。特定特征、结构或特性可以以符合公开文本的任何适当方式组合。
14.在公开文本中,不同实体(其可以不同地被称为“单元”、“电路”、其他组件等)可以被描述或声称为“被配置”为执行一个或多个任务或操作。此表述——被配置为[执行一个或多个任务]的[实体]——在此用于指代结构(即物理的东西,如电子电路)。更具体地说具体地,该公式表述用于指示该结构被安排为在操作期间执行一个或多个任务。可以说,一个结构被“配置为”执行某些任务,即使该结构当前没有被操作。“被配置为缓存变化流记录的缓存模块”旨在覆盖例如具有例如处理器、网络接口、具有程序指令的存储器等以在操作期间执行该功能的计算机系统,即使该计算机系统当前没有被使用(例如,没有将其连接到电源)。因此,被描述或叙述为“被配置为”执行某些任务的实体指的是物理的东西,例如存储可执行以实现该任务的程序指令的设备、电路、存储器等。在此,该短语不用于指无形的东
西。
[0015]
术语“被配置为”并不意味着“可被配置为”。例如,未编程的fpga不会被认为“被配置为”执行某些特定功能,尽管它可以“可配置为”执行该功能,并且可以“被配置为”在编程后执行该功能。
[0016]
在所附权利要求中叙述结构被“被配置为”执行一项或多项任务,明确意在不援引35 u.s.c.
§
112(f)用于该权利要求要素。因此,所提交的本技术中的任何权利要求均不应被解释为具有装置加功能元件。如果申请人希望在调用期间援引第112(f)条,它将使用“手段”[执行功能]结构来陈述权利要求要素。
[0017]
如本文所用,术语“第一”、“第二”等被用作它们前面的名词的标签,并且除非特别说明,否则不暗示任何类型的顺序(例如,空间、时间、逻辑等),除非特别说明。例如,在具有多个用户账户的计算系统中,术语“第一”用户账户和“第二”用户账户可用于指代任何用户。换句话说,例如,“第一个”用户账户和“第二个”用户账户不限于最初创建的两个用户账户。当在此使用时,术语“或”被用作包含或而不是排除“或”。例如,短语“x、y或z中的至少一个”指x、y和z中的任何一个以及它们的任何组合(例如,x和y,但而不是z或x、y和z)。
[0018]
如本文所用,术语“基于”用于描述影响确定的一个或多个因素。这一术语并不排除其他因素可能影响决定的可能性。也就是说,确定可以仅仅基于指定的因素,或者基于指定的因素以及其他未指定的因素。考虑短语“基于b确定a”。该短语指定b是用于确定a或影响a的确定的因素。该短语并不排除a的确定也可以基于某些其他因素,例如c。该短语还意在涵盖其中仅基于b确定a的实施方案。如本文所使用的,短语“基于”因此与短语“至少部分基于”同义。
具体实施方式
[0019]
在各种大容量数据库应用程序中,多个进程可能可以访问同一个数据库表。在一些实施方案中,变化流反映数据库表的改变的序列,并且可以由一个或多个变化处理器模块访问以基于对数据库表的更新执行各种任务。作为一个示例,系统可以实现访问数据库系统的网络集群和流集群(例如,每个可以包括一个或多个java进程)。网络进程可能可以处理来自用户的外部变化请求,而流进程可能可以处理内部更新。外部变化请求的一个示例是用户在他们的在线购物车中放置一个项目,而内部变化的一个示例是根据放置在用户购物车中的项目更新库存详细信息。
[0020]
在大量应用中,性能和成本可能是重要的设计考虑因素。在一些实施方案中,实现变化流缓存以缓存来自变化流的与特定过程相关联的变化记录。例如,可以对变化流进行分片,并且可以分配进程来仅处理变化流中包括的部分碎片(shard)。这可以有利地提高访问变化记录的性能并减少对变化流的访问次数。缓存可将变化流记录分组至阈值缓存条目大小(可被称为段大小),并以条目粒度执行缓存操作。例如,对于变化记录组,数据可以在每次输入的基础上被缓存、驱逐、命中/遗漏等。
[0021]
不同的流进程可以实现不同的变化流缓存,并且给定流进程内的一个或多个变化处理器模块可以共享该进程的缓存。变化处理器模块可提供位置指示符以访问变化流,并且这些位置指示符可用于检测缓存命中和未命中。网络进程可以将位置指示符转发给流进程,流进程可以使用其来检索变化流记录。在一些实施方案中,尽管底层数据库系统可能不
知道多租户实现,但一个或多个处理层实现多租户,使得数据库表存储多租户的条目。
[0022]
流进程可以为变化流执行检查点,其中,检查点可以在系统崩溃时提供恢复位置。检查点可以是位置指示符,它指定在系统崩溃后变化流中开始处理记录的位置。检查点可以由在每个租户的基础上实现多租户的一个或多个处理层执行,并且基于单个租户检查点,系统可以为变化流生成整体检查点。
[0023]
变化处理系统的概述
[0024]
图1是示出根据一些实施方案的包括缓存的示例数据库变化流进程系统的框图。在所示实施方案中,计算机系统110包括变化处理器模块112和缓存模块120,它们被配置为处理数据库表132的变化流134。
[0025]
在所示实施方案中,数据库表132向变化流134提供变化信息。在一些实施方案中,变化信息包括指示对数据库表132所做的改变的一个或多个变化记录。在一些实施方案中,尽管数据库系统可能不知道多租户,但计算机系统110使用数据库表132来存储多个不同租户的数据。在一些实施方案中,数据库表132可以包括在nosql数据库系统(例如或google的云计算)中,并且可以水平地将数据分割成存储在各种不同服务器上的碎片。在一些实施方案中,计算机系统110被配置成独立地缩放nosql数据库的碎片。在一些实施方案中,例如,缩放基于租户的数量或每个租户的数据量。
[0026]
在所示实施方案中,变化流134存储计算机系统110可访问的变化流记录。在一些实施方案中,多个不同的变化流向计算机系统110提供变化记录。例如,多个数据库表可以为多个不同的变化流生成变化信息,并且计算机系统可以处理多个不同的变化流。在一些实施方案中,变化流包括指定对数据库表进行的改变的序列的信息。在一些实施方案中,每个变化记录具有对应的序列号,其在变化流中可以是唯一的。在一些实施方案中,变化记录指示给定改变之前和之后的数据状态。变化流可以由各种数据库服务提供,该各种数据库服务还可以提供轮询机制,以便在它们生成时从变化流中检索变化。在一些实施方案中,变化流被分片,并且不同进程处理变化流碎片的不同集合(不同集合可以重叠,也可以不重叠)。在一些实施方案中,基于为一个或多个租户做的改变或要为给定变化流记录处理的改变类型来缩放变化流碎片。例如,网络进程可以从给定租户接收高负载的外部请求,并且可以增加该租户的变化流碎片的大小,或者可以根据请求将变化流碎片拆分为多个碎片。
[0027]
在所示实施方案中,缓存模块120将位置指示符发送到变化流134以请求与该位置指示符相对应的变化记录。在一些实施方案中,包括在计算机系统110中的轮询模块使用位置指示符从变化流134迭代地检索记录,并将这些记录传递给缓存模块120。在所示实施方案中,缓存模块120接收变化流记录并将变化记录存储在变化流缓存122中。注意,例如,当轮询变化流时,对变化流134的访问还可以生成更新的位置指示符(可以指示变化流中的当前最新记录)。在一些实施方案中,变化流缓存122在缓存条目(每一个都包括高达阈值组大小的成组的变化记录)中存储对成组的一个或多个碎片的改变。下面参照图4和图5详细讨论这些组。
[0028]
如本文所使用的,术语“位置指示符”指的是指定变化流内的位置的信息。在一些实施方案中,位置指示符是识别变化流的碎片内的位置的序列号,其中,序列号在变化流中的每个碎片内是唯一的。在一些实施方案中,位置指示符包括碎片标识符(id)和碎片内记录的序列号。请注意,碎片标识符和序列号的组合可以唯一地识别记录在变化流中的位置。
在一些实施方案中,位置指示符是包含一个或多个碎片id(具有包含在增量链接的增量令牌中的变化流的序列号)的增量链接。下面是用于开始查询变化流的增量链接的示例,其中,示例查询是http get请求:
[0029]
http://...delta?startoffset=shardb shardc shardd
[0030]
该示例查询请求碎片b、c和d的序列号。下面是第二个查询的非限制性示例,该查询使用增量链接获得对指定序列号(例如,碎片b的序列号2)之后的变化流的变化:
[0031]
http://...&$deltatoken=shardb:2 shardc:15 shardd:8
[0032]
该示例查询包括碎片b的序列号“2”、碎片c的序列号“15”和碎片d的序列号“8”,其中,序列号指示每个碎片中开始检索变化记录的位置。例如,序列号指定的每个碎片中的位置之前的记录可能已经被处理过。在一些实施方案中,位置指示符指定处理记录:在序列号之后、在序列号处、在给定时间戳处、最近添加到变化流等,因此,可以使用各种不同的格式进行编码。位置指示符可以有利地减少或移除维护或持久化变化流的状态的需要。
[0033]
在所示实施方案中,变化处理器模块112接收位置指示符并将该指示符发送到请求变化记录的缓存模块120。缓存模块120从与提供的位置指示符匹配的变化流缓存122的缓存条目向变化处理器模块112返回变化记录(或者如果存在缓存未命中,则访问变化流134)。下面参考图4详细讨论用于变化流缓存122的实现细节。在一些实施方案中,实现变化流缓存可以有利地支持跨多个租户的扇出。例如,多个租户可能会并行请求相同或相似的变化流记录。在本例中,缓存可以减少请求的数量或消除访问变化流的需要。此外,缓存可以提供改进的性能(例如,减少请求变化流记录和接收所请求的记录之间的时间)。
[0034]
在一些实施方案中,计算机系统110实现用于处理存储多个不同租户的数据的数据库表(例如,数据库表132)的变化流的多个内部层。例如,计算机系统110可以包括一个或多个多租户适配器,其将租户特定的数据库操作(例如,改变操作)转换为租户不可知的形式。例如,与租户无关的数据库操作可能与用于存储多个租户信息但不支持多租户的数据库兼容。
[0035]
如本文所用,术语“多租户数据库系统”指的是数据库系统的各种硬件和软件元素由一个或多个客户共享的那些系统。例如,计算机系统可以同时处理大量客户的请求,且数据库表可以存储潜在大量客户的行。在各种实施方案中,可以安全地存储用于不同租户的数据,使得在没有许可的情况下,其他租户不能访问该数据。
[0036]
流进程概述
[0037]
图2是示出根据一些实施方案的处理变化流的流进程的示例处理层的框图。在一些实施方案中,流进程210处理数据库模块230内的数据库表的内部更新。在一些实施方案中,流进程210从网络进程250接收指示要检索的特定变化(例如,如客户端经由网络进程250请求的)的位置指示符。在一些实施方案中,使用流进程210处理这些请求可以有利地允许使用变化流缓存122,如下面进一步详细讨论的。
[0038]
在所示实施方案中,流进程210包括:多租户适配器/路由器212、变化处理器模块214、多租户适配器216、数据库翻译模块218、缓存模块120和轮询模块240。流进程210是可由图1所示的计算机系统110实现的处理的一个示例。
[0039]
在所示实施方案中,轮询模块240和缓存模块120可以从数据库模块230检索和缓存变化流记录,使得变化处理器模块214对变化流的访问命中所缓存的数据,这可以减少对
数据库模块230的访问。其余的层可以转换请求,例如,支持多租户和底层数据库实现。
[0040]
在所示实施方案中,轮询模块240向数据库翻译模块218发送用于流进程210的域名服务器(dns)地址和用于变化流的组合检查点。当变化流记录被成功处理时,流进程210可以更新组合检查点并将组合检查点存储在租约表中(下面参考图3详细讨论)。在一些实施方案中,当承载流进程210的服务器系统从崩溃中恢复时,轮询模块240(经由数据库翻译模块218)从数据库模块230检索组合检查点。例如,基于由检索的检查点指示的序列号,轮询模块240可以在由该序列号指示的位置之后开始处理变化流记录。dns地址可由其他进程访问和使用,例如,以将位置指示符转发到流进程210。
[0041]
在一些实施方案中,轮询模块240使用增量链接轮询变化流记录(例如,来自变化流134),其中,增量链接是具有一个或多个变化流碎片的序列号的位置指示符。在一些实施方案中,轮询模块240向请求一个或多个碎片的序列号的变化流发送初始查询。对于每个连续的查询,将返回一个更新的位置指示符,并为每个带有新记录的变化流碎片返回新的序列号。在一些实施方案中,如下文进一步详细讨论的,由轮询模块240检索的所有或部分变化流记录存储在变化流缓存122中。
[0042]
在一些实施方案中,流进程210实例化变化处理器模块214,并将一个或多个变化流碎片分配给每个变化处理器模块。注意,流进程210可将变化流碎片分配给先前实例化的变化处理器模块214。在一些实施方案中,对于每个要由流进程210处理的变化流碎片,实例化至少一个变化处理器模块214。
[0043]
如本文所使用的,术语“进程”旨在根据其已理解的含义来解释,其包括程序代码和计算机程序实例的执行状态。在一些实施方案中,进程是诸如容器的应用容器。在一些实施方案中,可基于处理要求来调整用于流进程的容器的大小和数量。如上所述,可以使用不同类型的进程(例如,网络或流)来处理数据库系统的不同类型的变化。进程的非限制性示例包括:容器、和java进程。
[0044]
在所示实施方案中,多租户适配器/路由器212将从变化处理器模块214接收到的单个租户检查点接收租户不可知的形式,并基于该单个检查点生成组合检查点,如下面参考图7详细讨论的那样。如在此所使用的,术语“检查点”旨在根据其包括恢复点的良好理解的含义来解释。因此,检查点可能暗示先前的活动已经成功处理,使得在系统故障或其他错误情况之后不需要重新处理。因此,检查点可以为变化流提供状态信息,允许系统在遇到故障时返回到该状态。在一些实施方案中,基于单个租户检查点为变化流生成总体或累积检查点。变化处理器模块214可以为一个或多个分配的碎片生成一个或多个单独租户检查点。
[0045]
在一些实施方案中,缓存模块120从多租户适配器216接收包括位置指示符(例如,增量链接)的变化流请求(其中,变化流请求可以来自变化处理器模块214或轮询模块240)。响应于接收到变化流请求,缓存模块120确定相应的变化流记录是否被缓存在变化流缓存122中,如果是,则提供来自缓存122的记录。如果记录未被缓存,则缓存模块120可将变化流请求转发到数据库翻译模块218,以从变化流中检索记录(并且可在返回记录后缓存记录)。
[0046]
在所示实施方案中,数据库翻译模块218将数据库请求(例如,数据库操作或变化流请求)转换为数据库模块230识别的格式。在一些实施方案中,数据库翻译模块218实现为与数据库模块230相关联的应用程序编程接口(api)。在一些实施方案中,数据库翻译模块
218与被配置为与数据库模块230通信的软件开发工具包(sdk)相关联。
[0047]
在所示实施方案中,变化处理器模块214被配置为发送与数据库表相关联的请求和对数据库模块230的变化流的请求。对于数据库表操作,变化处理器模块214经由多租户适配器216和数据库翻译模块218向数据库模块230发送对一个或多个每个租户操作的请求。对于变化流请求,变化处理器模块214向多租户适配器216发送请求,并且从变化流缓存122或数据库模块230检索变化记录。
[0048]
在所示实施方案中,变化处理器模块214从网络进程250接收一个或多个位置指示符。在一些实施方案中,网络进程250发送基于流进程210的dns地址的位置指示符(例如,通过轮询模块240检索存储在数据库模块230中的dns地址)。在所示实施方案中,变化处理器模块214经由多租户适配器216和数据库翻译模块218向数据库模块230发送对一个或多个每个租户操作的请求。流进程210可以将检索到的变化记录返回到网络进程250。在一些实施方案中,变化处理器模块214基于一个或多个检索到的变化记录向数据库表发送每租户操作。例如,变化处理器模块214可基于接收到指示用户已请求将项目添加到购物车的变化记录来访问数据库以更新特定租户的用户的购物车信息。
[0049]
在所示实施方案中,多租户适配器216将每个租户操作转换为数据库模块230支持的数据库操作(例如,租户不可知crud操作)。多租户适配器216还将请求从轮询模块240转发到缓存模块120(注意,适配器216可能实际上不对这些请求执行任何操作)。在一些实施方案中,多租户适配器216被配置为将基于租户的寻址信息转换为数据库表132中的位置。
[0050]
在所示实施方案中,数据库翻译模块218处理来自流进程210内的各种其他模块和适配器的数据,并以数据库模块230支持的形式传送该信息。具体地,在所示实施方案中,数据库翻译模块218向数据库模块230发送数据库操作和变化流请求,并接收变化流响应。在所示实施方案中,数据库翻译模块218还发送dns和组合检查点(例如,将该信息存储在租约表中)。
[0051]
在一些实施方案中,数据库模块230基于crud操作使用数据库表执行操作,并基于从数据库翻译模块218接收的信息将dns地址和检查点存储在租约表中。在所示实施方案中,数据库模块230还例如将从基于提供的增量链接的变化流中检索的变化流记录发送到模块218。
[0052]
示例变化处理系统
[0053]
图3是示出根据一些实施方案的网络进程与流进程之间的示例交互的框图。在所示实施方案中,一个或多个网络进程250处理执行一个或多个数据库操作的外部请求,并且一个或多个流进程210处理一个或多个数据库操作。在所示实施方案中,数据库模块230包括数据库表132、变化流134和租约表336。
[0054]
在一些实施方案中,网络进程250从一个或多个计算设备接收一个或多个外部请求(例如,经由诸如因特网的网络)。在一些实施方案中,外部请求导致数据库表132的改变。例如,用户可以将项目添加到他们的在线购物车中,并且托管用户设备的服务器可以向网络进程250发送超文本传输协议(http)post请求。在所示实施方案中,小服务程序352接收外部请求,翻译该请求,并将翻译后的请求发送到变化处理器模块354。例如,小服务程序可以是将http请求转换为java数据的java小服务程序。在所示实施方案中,变化处理器模块354为数据库表132生成一个或多个每个租户操作,并将这些操作发送到多租户适配器356
(将它们转换为数据库模块230支持的数据库操作)。在一些实施方案中,给定网络进程包括一个或多个变化处理器。例如,变化处理器的数量可以基于外部请求的数量来确定。多租户适配器356将数据库操作发送到数据库翻译模块358,该模块为数据库表132生成一个或多个crud操作。例如,数据库翻译模块358可以与被配置为与数据库模块230通信的软件开发工具包(sdk)相关联。
[0055]
在所示实施方案中,数据库模块230接收从包括在一个网络进程250的数据库翻译模块358转发的crud操作,并实现对数据库表132的一个或多个改变。在所示实施方案中,对数据库表132的改变由变化流134指示。在一些实施方案中,变化流134被分片,其中,每个碎片包括一个或多个变化记录。在一些实施方案中,外部请求包括增量链接,网络进程250将其转发给流进程210,如果可用,则从缓存122检索相应的变化记录,并用所请求的变化记录响应网络进程250(其又可以将记录提供给请求客户端)。
[0056]
在所示实施方案中,租约表336存储一个或多个流进程210的一个或多个dns地址以及dns地址到成组的一个或多个变化流碎片的映射。网络进程250从租约表336检索dns地址以确定将位置指示符转发到的流进程(例如,哪个流进程负责处理哪个变化流碎片)。然后,网络进程250使用dns地址将特定改变的位置指示符转发到适当的流进程210。在一些实施方案中,租约表336存储变化流的一个或多个碎片的状态信息,例如,租约表的每一行可以表示正在由给定流进程处理的碎片,其中,该行包括碎片标识符、检查点和租约id。租赁信息可由不同流进程的轮询模块使用,例如,以执行进程之间的负载平衡。每个碎片的检查点可以是标识该碎片最近处理的记录的序列号。
[0057]
在所示实施方案中,流进程210从网络进程250接收转发的位置指示符,并将位置指示符提供给与由该位置指示符指定的一个或多个碎片相关联的一个或多个变化处理器模块214。例如,位置指示符可以是包括一个或多个变化流碎片的序列号的增量链接,其中,变化处理器模块214先前被分配来处理这些碎片。注意,流进程210的内部层(例如212、214、218、120和240)可以执行类似于上面参考图2详细描述的那些操作。在一些实施方案中,例如,如果轮询模块240已经检索到相应的变化记录使得缓存记录,则所转发的位置指示符可以促进缓存122的使用。在一些实施方案中,流进程210将所请求的变化记录返回给网络进程250,然后网络进程250将记录发送给发送外部改变请求的计算设备。在各种实施方案中,使用流进程210处理对网络进程250的变化流请求可以有利地允许使用缓存122。
[0058]
在所示实施方案中,数据库翻译模块218向数据库模块230发送对数据库表132的crud操作。在一些实施方案中,基于数据库表132的一个或多个内部更新(例如,库存计数更新)来发送crud操作。数据库翻译模块218将检查点和dns地址从流进程210发送到数据库模块230(其将该信息存储在租约表336中)。在一些实施方案中,例如,模块218在从系统崩溃恢复之后检索最近的检查点。
[0059]
作为一个示例,图3中所示的系统可以处理来自给定租户的用户的请求,以将物品添加到他们的在线购物车中。在此示例中,网络进程250接收来自用户的请求,并为数据库表132生成crud操作,以将购物车信息添加到用户的数据库表中。此外,在该示例中,添加到数据库表132的购物车信息可以反映在变化流134中。数据库模块230可以将来自租约表336的dns地址发送给给定的流进程210和并且将来自变化流134的位置指示符发送到网络进程250,其中,位置指示符在变化流的碎片a中指定一个序列号,用于反映添加到数据库表132
中的购物车信息的变化记录。在该示例中,网络进程250基于来自租约表336的dns地址将位置指示符转发给给定流进程210。
[0060]
继续该示例,被配置为处理碎片a的流进程210的变化处理器模块214使用所转发的位置指示符向缓存模块120发送对碎片a的变化记录的请求,并从与位置指示符匹配的缓存条目接收碎片a的变化记录。最后,在该示例中,基于接收的变化记录,变化处理器模块214向数据库模块230发送命令,其中,该命令包括用于更新库存计数和生成新用户界面的指令,该新用户界面被配置为基于用户在其在线购物车中放置物品来显示用户的在线购物车。
[0061]
缓存实现示例
[0062]
图4是示出根据一些实施方案的示例缓存实现的框图。在所示实施方案中,缓存包括用于不同条目数据420的标签410。
[0063]
在所示实施方案中,每个缓存条目包括标签410,其为存储在该条目中的变化记录指定碎片标识符和相应的序列号。在所示实施方案中,用于第一条目的标签410包括用于碎片b的序列号5-7。类似地,用于第二缓存条目的标签410指定第二缓存条目包括对应于碎片d的序列号120-150的变化记录。在所示实施方案中,最终缓存条目具有标签410,其指定对应于碎片a的序列号1-6的记录存储在缓存条目中。在一些实施方案中,缓存可以存储来自多个流的记录,并因此,每个缓存条目的标签410除了碎片标识符和序列号之外还包括流标识符。
[0064]
在一些实施方案中,变化处理模块214提供位置指示符,并且缓存模块120检测缓存命中或缓存未命中,并且如果存在缓存命中,则提供与位置指示符匹配的变化记录。如果存在缓存未命中,则缓存模块120可以从变化流134检索记录。在一些实施方案中,如下面参考图5详细讨论的,缓存模块120将检索到的变化记录添加到缓存条目,直到满足阈值条目大小。考虑位置指示符示例,其指定碎片b和序列号6。在该示例中,位置指示符产生第一缓存条目的缓存命中,并且缓存返回序列号6之后的一个或多个变化记录(在一些实施方案中,缓存返回在提供的位置指示符之后的条目中的所有序列号)。
[0065]
在一些实施方案中,缓存在组级(例如,段级)上执行缓存操作,并继续将变化记录添加到条目中的成组的变化记录,直到条目满为止。因此,缓存模块120可以检测命中和未命中,并对充满或部分充满变化记录的条目执行驱逐。缓存122可以使用各种类型的缓存技术中的任何一种来实现,并且可以使用各种控制技术(例如,诸如例如最近最少使用(lru)或先进先出(fifo))来执行驱逐。在一些实施方案中,缓存122是软件缓存。
[0066]
图5是示出根据一些实施方案的当检索变化记录时对缓存条目的示例添加的框图。在所示实施方案中,在点a-点c 542-546处示出缓存条目550的内容,其中,在不同点处将具有不同序列号的不同变化流记录512-538添加到缓存条目550。
[0067]
在点a 542处,在所示的示例中,进程从变化流(例如,变化流134)中检索序列号为4的变化记录512,并将其添加到新分配的缓存条目550。在一些实施方案中,基于来自轮询模块240或变化处理器模块214的具有增量链接的请求,从变化流中检索变化记录。注意,在此检索之后,数据库系统可以向请求者提供一个更新的增量链接,该链接指定序列号4和缓存条目550的碎片标识符。在一些实施方案中,变化记录512被添加到新的缓存条目,因为先前聚合记录的缓存条目已满。
[0068]
在点b 544处,在所示的示例中,进程从变化流中检索序列号为5和8的记录524和526,并将它们添加到缓存条目550(已经包含记录522)。注意,在检索记录512之后,例如,当通过轮询变化流检索时,记录524和526可能已经被添加到变化流中。在一些实施方案中,数据库系统返回具有序列号8和碎片标识符的更新的增量链接。在点c 546处,在所示的示例中,缓存从变化流中检索序列号为10的变化记录538,并将其添加到已经包含记录532-536的缓存条目550。在一些实施方案中,数据库系统然后发送具有序列号10和碎片标识符的更新的增量链接。此进程可以继续,直到达到阈值条目大小。例如,阈值条目大小可以是50、200、1000或5000条记录或任何其他适当的大小。在一些实施方案中,一旦达到阈值条目大小,缓存模块120就分配新条目以用于缓存从变化流中检索的记录。
[0069]
图6是示出根据一些实施方案的用于对变化流使用缓存的示例方法的流程图。图6中所示的方法可以结合在此公开的计算机电路、系统、设备、元件以及组件中的任何一个以及其他设备使用。在各种实施方案中,所示的方法元素中的一些可以以不同于所示的顺序同时执行,或者可以省略。还可以根据需要执行附加的方法元素。
[0070]
在610处,在所示实施方案中,缓存接收来自变化处理器模块的对变化记录的请求,其中,该请求包括位置指示符。在一些实施方案中,缓存从不同的变化处理器模块并行地接收多个请求。在一些实施方案中,两个不同的变化处理器模块提交请求,其中请求的位置指示符相似(指示缓存中的相似位置)。在一些实施方案中,为了受益于缓存局部性,缓存可以将变化处理器模块与条目边界对齐以允许不同的模块随着时间的推移在锁定步骤中从缓存中检索记录。
[0071]
在620处,缓存确定提供的位置指示符是否产生缓存命中。例如,缓存可以尝试定位与包含在位置指示符中的碎片id和序列号相对应的条目。在一些实施方案中,如上面参考图4详细讨论的那样,条目包括具有碎片id和该碎片id的一个或多个序列号的标签。如果在元素620处有缓存命中,则流程前进到元素640。如果缓存未命中,流程将继续到元素630。
[0072]
在630处,缓存模块从变化流返回记录。缓存模块可以将返回的记录缓存在可用缓存条目中,以用于未来的请求。缓存模块还可以基于返回的变化记录转发更新的位置指示符。
[0073]
在640处,缓存模块基于缓存命中向变化处理器模块返回遵循位置指示符的序列号的缓存的变化记录和基于返回的变化记录的更新的位置指示符。缓存模块可以在缓存命中的情况下生成更新的位置指示符,而不是从数据库系统接收缓存未命中的更新的位置指示符。作为一个示例,更新的位置指示符可以包括一个或多个与原始位置指示符相同但序列号针对一个或多个碎片不同的碎片id。在本例中,序列号可以是返回给变化处理器模块的每个碎片中最后一条记录的序列号。
[0074]
图7是示出根据一些实施方案的用于基于多个租户的检查点生成组合变化流检查点的技术的框图。在所示示例中,流进程210基于单个租户检查点726和728为变化流710创建组合检查点736。
[0075]
在所示实施方案中,变化流710包括多个不同租户的变化记录。在一些实施方案中,与变化记录相关联的数字是序列号(序列号1-6)。在所示实施方案中,变化流710包括基于单个租户检查点726和728生成的组合检查点736。
[0076]
图7的右侧部分示出了表示根据租户分组的变化流710的信息720。在一些实施方
案中,变化处理器模块214是租户感知的,并且按租户对来自变化流的记录进行分组。信息720包括用于租户a、b和c的三个不同的记录组。在所示实施方案中,分别为租户a和b示出检查点726和728。注意,在给定租户的每组记录内,变化处理器模块214可维持记录的原始顺序。在一些实施方案中,一个或多个变化处理器模块214生成各个租户检查点。注意,租户c的记录组不包括检查点。例如,租户c的序列号为5的记录可能尚未处理。
[0077]
在所示实施方案中,在变化流710中序列号为3的变化记录之后示出组合检查点736。在一些实施方案中,组合检查点表示在此之前所有记录都已被成功处理的点。虽然组合检查点736之后的一些序列号可能已经被成功地处理(例如,租户a的序列号6的记录),但组合检查点736不会前进,因为其他租户还没有成功地处理较早的序列号(例如,租户b还没有处理序列号4的记录,租户c还没有处理序列号5的记录)。
[0078]
在一些实施方案中,流进程210跟踪针对每个租户观察到的序列号的范围以及针对每个租户的单个检查点(尽管请注意,在某些情况下,租户的范围或检查点可能为空)。在图7的示例中,流进程210可以为租户a存储序列号范围[2,6]并指示序列号6的检查点。类似地,流进程210可以为租户b存储范围[1,4]和序列号1处的检查点,以及为租户c存储范围[5]和空检查点。
[0079]
在一些实施方案中,流进程210基于不存在检查点的范围的下限来确定共享检查点的第一阈值序列号。例如,在图7的示例中,组合检查点的第一阈值序列号是序列号4,因为租户c(它没有检查点)的下限是5。
[0080]
在一些实施方案中,流进程210还基于现有租户检查点确定第二阈值序列号。例如,在图7的示例中,组合检查点的第二个阈值序列号是序列号3,因为它是刚好位于最低租户检查点之前的序列号(租户b的检查点位于序列号4之前)。在一些实施方案中,流进程210选择第一阈值和第二阈值中的较小者作为共享检查点,例如,图7的示例中的序列号3。
[0081]
在一些实施方案中,流进程210还可以支持与租户无关的检查点模式。在一些实施方案中,参考图7讨论的技术允许在多租户场景中精确的检查点,即使当底层数据库不知道多租户时也是如此。
[0082]
示例方法
[0083]
图8是示出根据一些实施方案的用于使用缓存处理数据库表的变化流的方法的流程图。图8中所示的方法可以结合在此公开的计算机电路、系统、设备、元件或组件中的任何一个以及其他设备使用。在各种实施方案中,所示的方法元素中的一些可以以不同于所示的顺序同时执行,或者可以省略。还可以根据需要执行附加的方法元素。
[0084]
在810处,在所示实施方案中,计算机系统的缓存模块从变化流接收变化记录,其中,变化流包括用于指示对数据库表的变化的多个碎片的多个记录,并且可通过提供针对为多个碎片中的一个或多个的提供一个或多个位置指示符来访问该变化流,以请求一个或多个变化记录和更新的位置指示符来访问。
[0085]
在一些实施方案中,多租户适配器从变化处理器模块接收基于租户的请求,并且将基于租户的请求转换为由维护数据库表的数据库系统支持的请求,其中,多租户适配器模块使用数据库表来存储多个不同租户的字段。在一些实施方案中,计算机系统基于针对多个租户的变化记录的处理来确定多个租户检查点。在一些实施方案中,计算机系统基于多个租户检查点来确定组合检查点并且存储组合检查点。
[0086]
在820处,针对缓存模块被配置用于其的成组的一个或多个碎片的改变,由缓存模块存储一个或多个缓存条目,每个缓存条目包括多达阈值组大小的成组的变化记录。
[0087]
在830处,计算机系统的变化处理器模块请求变化流的一部分,包括提供接收的位置指示符。
[0088]
在一些实施方案中,缓存模块和变化处理器模块包括在流进程中,并且该方法还包括使用由计算机系统执行的多个不同的流进程访问变化流。
[0089]
在840处,变化处理器模块从缓存模块接收来自与提供的位置指示符匹配的缓存条目的缓存的一个或多个变化记录。在一些实施方案中,缓存条目与提供的位置指示符之间的匹配基于包括在位置指示符中的碎片标识符和序列号,其中,缓存条目包括具有一个或多个碎片标识符和与该一个或多个碎片标识符相对应的一个或多个序列号的标签值。
[0090]
在一些实施方案中,计算机系统将变化处理器模块的地址与变化处理器模块处理的变化流的一个或多个碎片相关联地存储在数据库系统的租约表中,其中,数据库系统维护数据库表和变化流。在一些实施方案中,用于变化处理器模块的地址可以是包括变化处理器模块的进程的dns地址。在一些实施方案中,接收的位置指示符由另一个模块基于存储的地址转发。
[0091]
在一些实施方案中,计算机系统的轮询模块使用位置指示符轮询变化流,其中,位置指示符包括变化流中一个或多个碎片的碎片标识符和每个碎片的序列号。在一些实施方案中,响应于轮询,轮询模块接收一个或多个新的变化记录和更新后的位置指示符。在一些实施方案中,缓存模块将一个或多个新的变化记录存储在一个或多个缓存条目中。
[0092]
示例计算设备
[0093]
现在转向图9,根据一些实施方案,描绘了计算设备(也可被称为计算系统)910的框图。计算设备910可用于实现公开文本的各个部分。计算设备910是可用作移动设备、服务器计算机系统、客户端计算机系统或实现公开文本部分的任何其他计算系统的设备的一个示例。
[0094]
计算设备910可以是任何合适类型的设备,包括但不限于个人计算机系统、台式计算机、膝上型或笔记本计算机、移动电话、大型机计算机系统、网络服务器、工作站或网络计算机。如所示出的,计算设备910包括处理单元950、存储装置子系统912和经由互连960(例如,系统总线)耦接的输入/输出(i/o)接口930。i/o接口930可以耦接到一个或多个i/o设备940。计算设备910还包括网络接口932,该网络接口932可以耦接到网络920,用于与例如其他计算设备通信。
[0095]
处理单元950包括一个或多个处理器,并且在一些实施方案中,包括一个或多个协处理器单元。在一些实施方案中,处理单元950的多个实例可以耦接到互连960。处理单元950(或处理单元950内的每个处理器)可包含缓存或其它形式的板上存储器。在一些实施方案中,处理单元950可以实现为通用处理单元,而在其他实施方案中,处理单元950可以实现为专用处理单元(例如,asic)。通常,计算设备910不限于任何特定类型的处理单元或处理器子系统。
[0096]
如本文所用,术语“处理单元”或“处理元件”指的是被配置为执行操作的电路。因此,可以将处理单元实现为以各种方式实现的硬件电路。硬件电路可以包括,例如,定制的超大规模集成(vlsi)电路或门阵列,现成的半导体,如逻辑芯片、晶体管或其他分立元件。
处理单元也可以在诸如现场可编程门阵列、可编程阵列逻辑、可编程逻辑器件等的可编程硬件设备中实现。
[0097]
如本文所使用的,术语“模块”指的是被配置为执行指定操作的电路或物理非短暂计算机可读介质,其存储指示其它电路(例如,处理器)执行指定操作的信息(例如,程序指令)。模块可以以多种方式实现,包括作为硬连线电路或作为其中存储有可由一个或多个处理器执行以执行操作的程序指令的存储器。硬件电路可以包括,例如,定制的超大规模集成(vlsi)电路或门阵列、现成的半导体,例如逻辑芯片、晶体管或其他分立元件。模块也可以在诸如现场可编程门阵列、可编程阵列逻辑、可编程逻辑器件等可编程硬件设备中实现。模块也可以是存储可执行以执行指定操作的程序指令的任何适当形式的非短暂计算机可读介质。
[0098]
存储装置子系统912可由处理单元950使用(例如,用于存储可由处理单元950执行的指令和由处理单元950使用的数据)。存储装置子系统912可以由任何合适类型的物理存储介质来实现,包括硬盘存储器、软盘存储器、可移动盘存储器、闪存、随机存取存储器(ram-sram、edo ram、sdram、ddr sdram、rdram等)、rom(prom、eeprom等)等。在一些实施方案中,存储装置子系统912可以仅由易失性存储器组成。存储装置子系统912可以存储可由计算设备910使用处理单元950执行的程序指令,包括可执行以使计算设备910实现本文公开的各种技术的程序指令。
[0099]
根据各种实施方案,i/o接口930可以表示一个或多个接口,并且可以是被配置为耦接到其他设备并与其他设备通信的各种类型的接口中的任何一个。在一些实施方案中,i/o接口930是从前端到一个或多个后端总线的桥接芯片。i/o接口930可以经由一个或多个对应总线或其他接口耦接到一个或多个i/o设备940。i/o设备的示例包括存储设备(硬盘、光驱、可移动闪存驱动器、存储阵列、san或相关联的控制器)、网络接口设备、用户接口设备或其他设备(例如,图形、声音等)。
[0100]
注意,图9的计算设备是用于演示所公开的概念的一个实施方案。在其他实施方案中,计算设备的各个方面可以是不同的。例如,在一些实施方案中,可包括附加组件或所示组件的多个实例。
[0101]
尽管上面已经描述了特定实施方案,但是这些实施方案并不旨在限制公开文本的范围,即使关于特定特征仅描述了单个实施方案。除非另有说明,否则公开文本中提供的特征的示例旨在说明性而非限制性。以上描述旨在涵盖对受益于公开文本的本领域技术人员而言显而易见的这些替代、修改和等同物。
[0102]
公开文本的范围包括本文公开的任何特征或特征的组合(明确地或隐含地)或其任何概括,无论其是否减轻了本文所解决的任何或所有问题。因此,在本技术(或要求其优先权的申请)的审查期间,可以针对任何这样的特征组合提出新的权利要求。特别地,参考所附权利要求,从属权利要求的特征可以与独立权利要求的特征组合,并且各个独立权利要求的特征可以以任何适当的方式组合,而不仅仅是所附权利要求中列举的特定组合。
转载请注明原文地址:https://win.8miu.com/read-950273.html

最新回复(0)