一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

在分布式存储中的移动窗口数据去重的制作方法

2022-11-23 11:34:13 来源:中国专利 TAG:

在分布式存储中的移动窗口数据去重
1.相关申请的交叉引用
2.本技术是在2020年8月31日提交的美国专利申请no.17/007,495的继续申请,该美国专利申请的公开通过引用并入本文。


背景技术:

3.在高通过量的流系统中,有时很难或不可能在不读取数据的情况下知道写入操作的结果。例如,通信故障、分布式系统服务器和依赖服务之间的竞争、服务器崩溃等可能会导致难以确定先写入哪些数据或确定是否在不执行读取的情况下成功写入数据。仅仅作为一个示例,服务器从异步消息传递服务中拉出消息,但在它能够确认服务中的消息之前就崩溃了。因此,写操作被认为是不成功的。当下一个服务器拉出相同的消息时,它会在存储中创建复本。作为另一个示例,如果向存储发送数据的服务器收到请求超时的消息,则服务器将重试。如果失败请求中发送的数据已经到达存储后端,则重试将导致创建复本。
4.可以使用现有的键值存储系统来执行去重,但是它们不是为去重而设计的。用于去重的键值存储必须被用作数据的临时缓冲存储器。此外,去重仅在读取时发生,这意味着缓冲存储器中需要存储所有复本的数据。此外,所有数据必须与去重键一起保存在键值存储中x分钟,导致高成本。每次从键值存储读取时都必须进行去重。另外,应当定期从缓冲存储器中将数据提取到永久位置,这需要复杂的服务,其专门用于读取缓冲存储器数据,跟踪提取了哪些数据,清除缓冲存储器等。由两个单独的过程异步地添加和提取数据的事实导致竞争,当读取器可以从临时缓冲存储器、永久存储接收数据时,两者或者没有一者是基于竞争的结果。


技术实现要素:

5.本公开描述了一种提供主要在线去重的服务。流式应用程序接口(api)可以允许将记录流式传输到具有高通过量和低延迟的存储系统中。作为此过程的一部分,api允许用户添加标识符作为用于数据去重的字段。在以前的系统中,数据被写入由数据存储系统支持的临时缓冲存储器,其中,去重在后台进行,这可能具有高成本和其他限制,其使得无法支持事务写入、写后读一致性等。相反,在此处描述的实现方式中,可以将数据直接写入文件系统。去重服务在存储器中保留标识符的移动窗口,并通过快速确定数据是否重复来执行在线去重。仅在存储器中保留去重键可降低运行服务的成本。此外,移动窗口方法的实时特性允许将去重信息与数据一起存储,并在读取时立即访问它。在这方面,支持写后读一致性,并且降低成本。
6.本公开的一个方面提供了一种用于去重的方法,包括:用一个或多个处理器接收将数据写入表的请求,该请求包括插入标识符;当在预定时间窗口内接收到请求时,利用一个或多个处理器处理针对请求的插入标识符;用一个或多个处理器确定与插入标识符对应的表数据是否重复;当数据不重复时,利用一个或多个处理器将插入标识符存储在存储器中;并更新存储器以移除在预定时间窗口之外添加的插入标识符。根据一些示例,预定时间
窗口可以是相对于当前时间的。例如,每个插入标识符可以具有相关联的时间戳,并且更新存储器以移除插入标识符可以包括移除具有不再落在预定窗口内的时间戳的插入标识符。可以标记重复数据,例如通过标记在表中的重复数据或将重复数据的指示存储在用于从表中读取数据的组件中。在一些示例中,可以从表中移除重复数据。在一些示例中,在将数据写入表之前识别重复数据,并且不写入重复数据。确定对应于插入标识符的表数据是否重复可以包括确定接收的插入标识符是否已经存储在存储器中。
7.本公开的另一方面提供了一种用于去重的系统,包括:存储一个或多个插入标识符的存储器,每个插入标识符被附加到在预定时间窗口内写入表的数据;以及,与存储器和表通信的一个或多个处理器。一个或多个处理器可以被配置为接收将数据写入表的请求,该请求包括插入标识符,当在预定时间窗口内接收到请求时处理接收到的针对请求的插入标识符,确定对应于接收到的插入标识符的表数据是否重复,在数据不重复时将接收到的插入标识符存储在存储器中,并更新存储器以去除在预定时间窗口之外添加的插入标识符。
8.本公开的又一方面提供了一种存储指令的非暂时性计算机可读介质,该指令可由一个或多个处理器执行以用于执行去重方法。这种方法包括:接收将数据写入表的请求,该请求包括插入标识符;当在预定时间窗口内接收到请求时,处理接收到的针对请求的插入标识符;确定与接收到的插入标识符对应的表数据是否为重复;当数据不重复时将接收到的插入标识符存储在存储器中;以及,更新存储器以移除在预定时间窗口之外添加的插入标识符。
附图说明
9.图1是示例系统的框图。
10.图2是根据本公开的方面的执行移动窗口去重的示例系统的图示。
11.图3是根据本公开的方面的将去重服务集成到流服务器中的示例实现方式的框图。
12.图4是根据本公开的方面的将去重服务集成到客户端库中的示例实现方式的框图。
13.图5是图示根据本公开的方面的示例方法的流程图。
具体实施方式
14.图1图示了示例分布式存储系统100的架构,在该系统中去重服务运行,支持在关系数据库160中的数据的存储。系统100包括元数据服务器140、流服务器130、客户端库125和后台服务170。客户端库可以或者在用户过程中或者在前端流服务器120上运行。后台服务170可以包括诸如复制、转换、垃圾收集等的服务。
15.关系数据库160可以是分布式计算环境。例如,多个数据中心可以通过网络通信耦合。数据中心可能彼此相距相当远地定位。例如,数据中心可能位于世界各地的各个国家。每个数据中心可以包括一个或多个计算设备,例如处理器、服务器、分片或单元等。例如,可以跨这些计算设备执行程序,使得一些操作由第一数据中心的一个或多个计算设备执行,而其他操作由第二数据中心的一个或多个计算设备执行。在一些示例中,各种数据中心中
的计算设备可能具有不同的容量。例如,不同的计算设备可能具有不同的处理速度、工作负载等。每个数据中心还可能包括多个存储设备,例如硬盘驱动器、随机存取存储器、磁盘、磁盘阵列、磁带驱动器或任何其他类型的存储设备。数据中心可以实施多种架构和技术中的任何一种,包括但不限于直接附加存储(das)、网络附加存储(nas)、存储区域网络(san)、光纤通道(fc)、在以太网上的光纤通道(fcoe)或混合架构网络等。
16.流服务器130是存储服务,其例如从外部客户端110接收用户数据。可以通过诸如双向流的高通过量信道来接收用户数据。流服务器130将接收到的用户数据保存到文件存储150中。
17.元数据服务器140是元数据服务,其处理流和小流上的操作。这样的操作包括健康流服务器的选择和分配给小流、请求路由等。元数据可以存储在关系数据库160中。
18.在流式前端120处从外部客户端110接收请求。流式前端120可以包括例如用于将数据写入文件存储150的api。该请求可以作为远程过程调用(rpc)通过网络来接收。例如,使用因特网套接字,客户端110可以通过因特网协议套件连接到在远程服务器上运行的服务。服务器可以设置可以接受用于发送和接收信息的初始连接的侦听套接字。网络和中间节点可能包括各种配置和协议,包括互联网、万维网、内联网、虚拟专用网络、广域网、局域网、使用一个或多个公司专有的通信协议的专用网络、以太网、wifi(例如,702.72、702.72b、g、n或其他此类标准)和http以及上述各项的各种组合。可以通过能够向和从其他计算机传输数据的设备来促进这种通信,该设备例如是调制解调器(例如,拨号、电缆或光纤)和无线接口。
19.来自外部客户端110的请求可以包括插入标识符。去重服务(例如api)会在预定时间窗口(例如一分钟)内跟踪表中每一行的插入标识符。使用此信息,去重服务确定表的每一行中的数据是否重复。例如,在每个时间点,去重服务正在处理表的一些插入标识符,并且可以确定这些标识符是否在一分钟的时间窗口内用于向同一个表中的其他插入。如果插入标识符的当前出现不是一分钟的时间窗口中的第一个,则服务可以确定它是重复的。
20.去重服务向系统100内的其他组件提供每行是否是时间窗口内已经存在的行的复本的信息。在一些示例中,关于复本的信息可以与数据一起存储。在其他示例中,如果确定行是复本,则可以移除整行。
21.在用于基本写入的去重工作流中,去重服务任务周期性地更新在关系数据库160中的任务负载信息。客户端库125调用元数据服务器140以创建小流。作为小流创建的一部分,将在响应中返回要使用的去重任务。元数据服务器140接收小流创建请求并且或者返回缓存的n个去重任务或者基于关系数据库160中的去重任务负载挑选n个任务来服务于这个表。客户端库125将插入标识符与数据一起批量存储,并将该批发送给流服务器130。流服务器130解析数据,并且异步调用去重服务以便获取一批插入标识符,将接收到的去重信息异步写入文件存储150中,例如在日志文件页脚中。
22.在用于基本读取的去重工作流中,流服务器130从客户端库125读取并读取去重信息。基于该去重信息,流服务器130跳过被标记为重复的记录。在客户端库125直接读取文件的情况下,客户端库125在读取文件时跳过重复记录。
23.在去重任务超载时写入的去重工作流中,去重服务任务更新其在关系数据库160中的任务负载,显示超载。因此,不会将新表分配给超载的任务。去重服务调用元数据服务
器140并接收关于哪个表应该移动到哪个去重任务副本的指示。然后,去重任务可以进入状态转移状态,在该状态下,它将针对特定表的所有请求复制到副本中。该副本根据对该表的请求从存储在关系数据库160中的所有者读取它。在一些示例中,可以启动后台复制以复制状态。该状态可以在插入标识符存储在存储器中的预定时间窗口的持续时间内得以保持。因此,如果针对该预定时间窗口原-副本对被保留,则副本将拥有所有新数据,而原本将没有。原本去重任务可能会开始拒绝针对表的请求,并重定向到副本。原本去重任务调用元数据服务器140来更新所有权并完成状态转移。
24.图2图示了去重服务290使用在数据258的输入时添加到表的插入标识符256确定表250中的数据258的行是否重复的示例。添加到表250中的每个插入标识符256可以唯一地标识数据258的对应行,例如键。如下所述,随着插入标识符256被添加到表250,它们也被存储在存储器中并且用于对表250的选定部分执行去重。
25.去重服务290可以在一个或多个机器上执行,例如数据中心内的集中控制器或计算设备。在任一情况下,该一个或多个机器可以包含处理器220、存储器230和其他组件。
26.存储器230可存储可由处理器220访问的信息,包括可由处理器220执行的指令232。存储器还可包括可由处理器220检索、操作或存储的数据234。存储器230可以是一种能够存储处理器220可访问的信息的非暂时性计算机可读介质,例如硬盘驱动器、固态驱动器、磁带驱动器、光学存储、存储器卡、rom、ram、dvd、cd-rom、可写和只读存储器。处理器220可以是众所周知的处理器或其他鲜为人知类型的处理器。或者,处理器220可以是专用控制器,例如asic。
27.指令232可以是由处理器220直接执行的指令集,例如机器代码,或间接执行的指令集,例如脚本。在这方面,术语“指令”、“步骤”和“程序”可以在此处可互换使用。指令232可以以目标代码格式存储以供处理器220直接处理,或以其他类型的计算机语言存储,包括脚本或独立源代码模块的集合,这些模块按需加以解释或预先加以编译。
28.处理器220可以根据指令232检索、存储或修改数据234。例如,尽管系统和方法不受特定数据结构的限制,但是数据234可以存储在计算机寄存器中,在关系数据库中作为具有多个不同字段和记录的表或xml文档。数据234也可以被格式化为计算机可读格式,例如但不限于二进制值、ascii或unicode。此外,数据234可以包括足以识别相关信息的信息,例如数字、描述性文本、专有代码、指针、对存储在包括其他网络位置的其他存储器中的数据的引用或者由函数用来计算相关数据的信息。
29.尽管图2在功能上将处理器220和存储器230图示为在同一块内,但是处理器220和存储器230实际上可以包括多个处理器和存储器,这些处理器和存储器可以或可以不存储在同一物理外壳内。例如,指令232和数据234中的一些可以存储在可移动cd-rom上,而其他的可以存储在只读计算机芯片内。一些或所有指令和数据可以存储在物理上远离处理器220但仍可由处理器220访问的位置。类似地,处理器220实际上可以包括处理器的集合,这些处理器可以并行操作也可以不并行操作。
30.数据234可以包括存储的插入标识符。插入标识符可以存储在例如存储器中的简单数据结构中。每个表和每个任务占用的存储器总大小可能会受到限制,并且可以实施相对严格的基于年龄的驱逐以确保窗口不大于预定时间窗口。在这方面,数据234可以随着表250的行被审查并且新的插入标识符256被添加到表250而被持续更新。例如,在预定的时间
窗口(例如几秒、一分钟、几分钟等)内添加到表250的插入标识符256可以存储在数据234中。随着新的数据258的行被添加到表250并且新的插入标识符256被添加到存储器230中的数据234,可以删除预定时间窗口之外的较旧的插入标识符。
31.指令232可以被执行以使服务在预定时间段存储附加到数据表250的插入标识符,确定与所存储的插入标识符之一相关联的每一行中的数据是否重复,并且标记来自表的重复数据或从表中移除重复数据。例如,当检测到重复时,重复信息可以或者与数据一起存储在例如流服务器130(图1)上,并且在读取时忽略。将有关重复的信息与数据一起存储可以允许恢复数据。例如,如果去重逻辑中存在导致记录被错误识别为重复的错误,则可以在垃圾收集之前进行恢复。
32.根据其他示例,当检测到重复时,可以立即将它们从表250中移除。可以发送确认以确认重复数据的成功移除。立即移除记录允许简化磁盘上较低级别的数据存储。无需更改磁盘以便能够接收有关重复的信息,等待来自去重服务的响应、针对读取的行为更改等。
33.虽然图2中图示了一个表250,但应当理解,去重服务可以在任何给定时间查看任何数量的表。
34.去重服务可以被集成到图1的系统100的各种组件中。举例来说,去重服务可以被集成到流服务器130或前端服务器120中。在任一实现方式中,可以最小化延迟,并且可以最小化被阻塞的流输入管道的变化,以避免在流式前端上积累大量请求。
35.图3图示了基于流服务器的集成的示例。在该示例中,流服务器330针对其存储的每一行与去重服务390进行对话。例如,流服务器330在数据被存储到磁盘之后与去重服务进行对话。在同一文件中的元数据块中的数据之后添加去重信息。在这一点上,对于两个同时写入,无论调用顺序如何,如果其中一个失败,则成功的那个将不会被标记为重复。例如,当在流式前端320处从外部客户端(未示出)接收到添加数据的请求时,数据和数据的插入标识符被发送到客户端库325和流服务器330。流服务器330向去重服务390提供插入标识符,其将去重信息提供回流服务器330。这种信息交换可以使用双向流来执行,例如使用rpc或双向流。流服务器330可以将去重信息和数据添加到日志380。
36.流服务器330和去重服务390之间的双向流允许维持接收请求的顺序。它还允许在保持顺序的同时异步发送和处理请求。在流服务器330和去重服务390之间保持恒定的双向流将确保最小的延迟和高通过量。可以执行批处理以进一步确保最小的延迟和高通过量。每个去重任务可以支持大量并发双向流。在这方面,单元内的多个流服务器可以连接到相同的去重任务。
37.流服务器330异步写入去重数据以便不阻塞写入。在读取时,流服务器330可以阻止带有时间戳的读取,直到所有去重信息都被接收到并且持续到所请求的时间戳为止。例如,如果流服务器330正在主动写入文件,则读取器可以等待去重信息,直到阻塞时间戳的时间过去,以确保新的去重信息不会被添加并且被读取器考虑。
38.图4图示了通过客户端库325的基于前端的集成的示例。例如,去重服务390通过客户端库325与流式前端320对话,并且通过客户端库325将去重信息传递到流服务器330。流服务器330可以从在数据本身中的客户端库325接收重复信息,并保存在磁盘上。
39.与流服务器集成相比,基于前端的集成可能导致每个去重任务的更大连接数。对于包括数百个流式前端320的单元,每个去重任务可能必须支持数千个流式连接。
40.为了避免在每个请求上阻塞和等待去重服务390,可以例如由客户端库对于预定数量的请求将去重信息批处理并且将其一次发送。在客户端已经在对流服务器330的请求进行批处理的情况下,批处理去重信息进一步将延迟减少对应于在批次中的预定数量的请求的量。
41.根据一些示例,可以与数据分开发送去重信息。此外,与数据相比,去重信息可能会延迟。在这种情况下,流服务器330应该能够将去重信息与数据分开存储。为了避免在两个前端调用相同的插入标识符时可能出现的潜在问题,可以仅在数据被持久保存在磁盘上之后调用去重服务,然后将去重数据例如与下一个请求一起或作为分开的二进制对象(blob)发送到流服务器330。
42.对于任一集成实现方式,流服务器330将关于重复的信息与数据一起保存在日志文件中。可以以考虑正常情况意味着系统中没有重复的事实的方式来格式化去重复信息。例如,可以将去重信息作为重复整数传输和存储,以用于批次中重复行的索引。就存储器开销而言,它可能会为每x条记录添加零到几个字节之间的内容。
43.流服务器330在数据被存储之后调用去重服务390并且将重复信息异步地存储在同一日志文件中。对于每个小流,流服务器330可以保留水印,例如用于存储的去重信息的最新序列号和/或时间。尝试读取超过水印的数据的读取将被阻止,直到写入线程将水印向前移动。即使去重服务390在请求超时后关闭,写入线程也会移动水印。此外,阻塞的读取可能会触发更快的水印移动。
44.根据一些示例,可以针对负载管理采取措施。表具有不同的通过量,并且该通过量随时间而变化。在某些情况下,流式传输可能会完全停止。每个去重任务每秒可以支持有限数量的行,因此如果一个表变得太大或者如果太多的小表共享相同的去重任务,它可能会变得过载。返回参考图1,元数据服务器140可以跟踪关系数据库160中每个表的分配的去重任务。它还缓存该信息。为了支持负载管理,去重任务可以估计其负载,其在关系数据库160中周期性地存储每个表。元数据服务器140可以使用该负载来将去重任务分配给表。
45.为了支持故障检测,去重任务通过心跳进入关系数据库表。元数据服务器140使用该信息来确定该任务是否已终止并代之以分配另一个任务。
46.去重任务对其支持多少负载具有硬限制,并且一旦达到该限制,它就不会接受新表跟踪并且能够将一些表数据推出存储器。它还能够强制元数据服务器140选择另一个负载较少的去重任务。新的去重任务能够接收来自之前任务的数据,以确保持续去重。元数据服务器140将去重任务分配存储到关系数据库160中,因此对于该状态不需要状态转移。
47.如果去重任务重新启动,则去重状态不应丢失。任务的状态和表所有权应在重新启动之前转移到另一个任务。针对状态转移的持续时间,为了实现适当的状态转移,图1的系统100的组件写入一个任务并从两个任务读取。这是通过将副本去重任务分配给原本来实现的。原本将所有读取和写入传递给副本,并也在本地读取。
48.在去重状态丢失的情况下,无法连接到去重任务使客户端重新创建小流。在小流创建时,元数据服务器140从去重任务中检测丢失的心跳并分配另一个去重任务。
49.为了支持大表,流服务器130或前端服务器120可能能够对它们进行分片并使用多个去重作业任务来计算重复。例如,可以为每个表分配n个去重任务。对于每个插入标识符,流服务器130或前端服务器120将其发送到n个去重任务。所有任务都返回去重信息,该信息
应该在流服务器130或前端服务器120上进行协调。因为表通过量一开始是未知的,所以元数据服务器140可以从为每个表分配一个去重任务开始。一旦去重任务超载,元数据服务器140就会检测到它并添加额外的任务。
50.异步去重可以由单独的作业执行,该作业可以接收流的列表并重写片段而不重复。
51.图5示出了去重的示例方法500。该方法可以由如上所述的去重服务来执行。虽然以特定顺序描述方法500的操作,但应理解在某些情况下可以修改顺序或可以同时执行操作。此外,可以添加或省略操作。
52.在块510中,接收将数据写入表的请求,该请求包括插入标识符。插入标识符可以作为表中数据的唯一键。
53.在块520中,去重服务处理插入标识符。例如,去重服务将接收到的插入标识符与已经在预定时间窗口内存储的其他插入标识符进行比较。预定时间窗口可以是相对于当前时间的。例如,时间窗口可以包括在当前时间之前的x秒或分钟。
54.在块530中,去重服务确定与插入标识符对应的表数据是否为重复数据。例如,如果正在处理的插入标识符已经存在于存储器中,则可以确定对应的表数据是重复的。
55.如果发现重复数据,则可以在块540中标记重复数据。标记重复数据可以包括将标识符添加到表或另一个组件,例如流服务器的日志文件,其中,标识符指示数据是重复的,并且不应被读取。在一些示例中,利用请求接收的数据不会添加到表中。例如,系统可能会跳过将重复数据添加到表中。在其他示例中,如果重复数据已经写入表,则可以从表中移除重复数据。例如,去重服务可以标记重复数据,以指示另一个服务从表中擦除整行数据。
56.在块545中,当基于插入标识符确定接收到的请求包括重复数据时,可以延长正在处理的其他插入标识符的生存期。
57.在块550中,当确定接收到的数据不重复时,处理插入标识符被存储在存储器中。在这点上,处理插入标识符可用于与后续请求进行比较以确定此类后续请求是否包括重复数据。当存储时,插入标识符可以存储在简单的数据架构中。
58.无论是否发现重复数据,都可以在块560中更新存储器以移除较旧的插入标识符。例如,在预定时间窗口之外添加到表中的任何插入标识符都可以自动从存储器中被驱逐。驱逐过程可以包括例如将与给定插入标识符相关联的时间戳与当前时间进行比较,并且如果时间戳和当前时间之间的差异大于预定时间窗口中的时间量,则驱逐插入标识符。在这点上,可以不断地添加新的插入标识符,而不会使存储器过载。
59.上述用于使用移动时间窗口去重的系统和方法的优点在于,与以前的系统相比,运行去重服务的成本降低,例如,因为只有去重键被保存在存储器中,而不是维护要写入的数据的临时缓冲存储器。此外,移动窗口方法的实时特性允许将去重信息与数据一起存储,并在读取时立即访问它。在这方面,支持写后读一致性。
60.除非另有说明,否则前述替代示例不是相互排斥的,而是可以以各种组合实施以实现独特的优势。由于可以在不背离权利要求限定的主题的情况下利用上述特征的这些和其他变化和组合,因此实施例的前述描述应当以说明的方式而非限定由权利要求限定的主题的方式来理解。此外,本文所描述的示例的提供以及措辞为“例如”和“包括”等的条款不应被解释为将权利要求的主题限制为特定示例;相反,这些示例旨在仅说明许多可能的实
施例之一。此外,不同附图中相同的附图标记可以标识相同或相似的元件。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献