首页> 中国专利> 流媒体数据的高效进程外重组

流媒体数据的高效进程外重组

摘要

提供了用于处理数据流的方法、系统、装置和计算机程序产品。针对从多个上游分区被冲刷到数据存储库的数据建立最大时间分散度。每个与上游分区对应的多个数据冲刷器中的每个数据冲刷器可以从数据产生方获取数据项。每个数据冲刷器可以确定将数据冲刷到数据存储库是否会超过最大时间分散度。至少基于确定将数据冲刷到数据存储库不会超过最大时间分散度,可以将数据冲刷到数据存储库以供下游分区摄取,并且数据结构(例如,账本)可以被更新为指示与被冲刷到数据存储库的最近的数据项相关联的时间。

著录项

  • 公开/公告号CN113826084A

    专利类型发明专利

  • 公开/公告日2021-12-21

    原文格式PDF

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

    申请/专利号CN202080036571.4

  • 发明设计人 A·阿尔佩罗维克;陈众;B·舒尔曼;

    申请日2020-04-23

  • 分类号G06F12/0868(20060101);G06F12/0804(20060101);G06F16/27(20060101);

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

  • 代理人马明月

  • 地址 美国华盛顿州

  • 入库时间 2023-06-19 13:46:35

说明书

背景技术

在一些数据分析解决方案中,与被存储在储存库中的数据集合相对,数据流可以由用户实时或近实时地处理和消耗。例如,数据流可以包括来自各种数据产生实体(例如,传感器)的数据点,其中每个数据点具有可能随时间减弱的时间重要性,诸如制造设施中的温度和/或压力传感器。在存在大量数据产生实体或单个机器不适于处理整个数据流的情形中,通常采用若干分区来从数据产生实体中摄取数据点。然而,在许多实例中,从数据产生实体摄取数据点的数据分区(例如,上游分区)可能不包括对于数据消耗方的最佳分区。例如,数据消耗方可能希望使用不同的分区键或维度来可视化数据。

为了实现数据的这样的不同分区,经常利用技术来将数据流从上游分区的一个维度重组(reshuffle)为具有另一维度的不同分区集合,称为下游分区。由于数据点的时间重要性,下游分区需要确保数据流被适当排序(例如,将较旧事件排序在较新事件之前,而不管哪个事件首先到达下游分区)。然而,由于上游分区可能以不同的速度操作(或者分区可能已关闭),因此通常需要大型重排序缓冲器来临时持有数据点,以确保消耗方以正确的时间顺序摄取数据流。结果,现有的解决方案通常要求大量的存储器内资源,这不仅会带来稳定性和恢复方面的挑战,而且还会在事件的发生与在重组后该事件被提供给数据消耗方之间引入高时延。

发明内容

本发明内容被提供来以简化的形式引入在以下详细描述中进一步描述的概念的选择。本发明内容不旨在识别要求保护的主题的关键特征或必要特征,也不旨在被用来限制要求保护的主题的范围。

提供了用于处理数据流的方法、系统、装置和计算机程序产品。针对从多个上游分区被冲刷到数据存储库的数据建立最大时间分散度。每个与上游分区对应的多个数据冲刷器中的每个数据冲刷器可以从数据产生方获取数据项。每个数据冲刷器可以确定将数据冲刷到数据存储库是否会超过最大时间分散度。至少基于确定将数据冲刷到数据存储库不会超过最大时间分散度,数据可以被冲刷到数据存储库以供下游分区摄取,并且数据结构(例如,账本)可以被更新为指示与被冲刷到数据存储库的最近数据项相关联的时间。

下面参照附图详细描述本发明的其他特征和优点,以及各种实施例的结构和操作。需要注意的是,本发明不限于本文描述的特定实施例。这样的实施例在本文中仅出于说明的目的而被呈现。基于本文所包含的教导,其他实施例对于(多个)相关领域的技术人员将是明显的。

附图说明

并入本文并形成说明书一部分的附图图示了本申请的实施例,并且与说明书一起进一步用于解释实施例的原理并且使相关领域的技术人员能够制作和使用实施例。

图1示出了根据一个示例实施例的用于重组数据流的系统的框图。

图2示出了根据一个示例实施例的用于处理数据流的方法的流程图。

图3示出了根据一个示例实施例的用于重组数据流的系统的框图。

图4示出了根据一个示例实施例的用于限制重排序缓冲器的方法的流程图。

图5示出了根据一个示例实施例的用于将正点(punctuation)事件传输给数据存储库的方法的流程图。

图6示出了根据一个示例实施例的用于将重排序缓冲器中直到正点事件中所标识的时间戳的项重排序的方法的流程图。

图7示出了可以被用来实现示例实施例的示例计算设备的框图。

从当结合附图时下面阐述的具体实施方式本发明的特征和优点将变得更加明显,其中相同的参考标记始终标识对应的元素。在附图中,相同的附图标记通常指示相同、功能相似和/或结构相似的元素。元素第一次出现的图由对应的附图标记中最左边的(多个)数字来指示。

具体实施方式

I.简介

本说明书和附图公开了并入本发明的特征的一个或多个实施例。本发明的范围不局限于所公开的实施例。所公开的实施例仅用于举例说明本发明,并且所公开的实施例的修改版本也被本发明所涵盖。本发明的实施例由所附权利要求来限定。

说明书中对“一个实施例”、“实施例”、“示例实施例”等的引用指示所描述的实施例可以包括特定的特征、结构或特性,但是每个实施例可能不一定包括特定的特征、结构或特性。此外,这样的短语不一定指代同一实施例。此外,当结合示例实施例描述特定的特征、结构或特性时,无论是否明确描述,都认为与其他实施例结合地实现这样的特征、结构或特性在本领域技术人员的知识范围内。

在讨论中,除非另有说明,否则诸如“基本”和“大约”等形容词修饰本公开的示例实施例的一个或多个特征的条件或关系特性,应被理解为意指该条件或特性被限定在对于其预期应用的实施例的操作可接受的容差内。

多个示例性实施例被描述如下。需要注意的是,本文所提供的任何节/小节标题并非旨在进行限制。贯穿本文档描述了实施例,并且任何类型的实施例可以被包括在任何节/小节下。此外,在任何节/小节中公开的实施例可以以任何方式与在同一节/小节和/或不同节/小节中描述的任何其他实施例组合。

II.示例实现

在一些数据分析解决方案中,与被存储在储存库中的数据集合相对,数据流可以由用户实时或近实时地处理和消耗。例如,数据流可以包括来自各种数据产生实体(例如,传感器)的数据点,其中每个数据点具有可能随时间减弱的时间重要性,诸如制造设施中的温度和/或压力传感器。在存在大量数据产生实体或者单个机器不适于处理整个数据流的情形中,通常采用若干分区来从数据产生实体摄取数据点。然而,在许多实例中,从数据产生实体摄取数据点的数据分区(例如,上游分区)可能不包括对于数据消耗方的最佳分区。例如,数据消耗方可能希望使用不同的分区键或维度来可视化数据。

为了达成数据的这样的不同分区,经常利用技术来将数据流从上游分区的维度重组到具有另一维度的不同分区集合,称为下游分区。由于数据点的时间重要性,下游分区需要确保对数据流进行适当排序(例如,将较旧事件排序在较新事件之前,而不管哪个事件首先到达下游分区)。然而,由于上游分区可能以不同的速度操作(或者分区可能已关闭),因此通常需要大型重排序缓冲器来临时保存数据点,以确保消耗方以正确的时间顺序摄取数据流。因此,现有的解决方案通常需要大量的存储器内资源,这不仅会带来稳定性和恢复方面的挑战,而且还会在事件的发生与在重组后该事件被提供给数据消耗方之间引入高时延。

例如,一些现有的解决方案在执行数据流的大规模重组时利用单体的(monolithic)方法,这可能需要大量的中间数据存储装置。这样的方法的一个示例已知为“合并然后拆分”方法,其中单个合并实体可能负责合并来自所有上游分区的数据流,并且然后将数据拆分给适当的下游分区。由于在一些解决方案中,单个实体可能负责重组数据,因此单体的实体成为包含数据流的整个管道的单点故障,并且维护和管理该管道变得更加困难。

在一些其他实例中,诸如“拆分然后合并”技术,每个上游分区可以包括将数据流拆分成多个下游分区的拆分实体,其中每个下游分区可以具有负责合并(和排序)从上游分区所接收的数据的单独合并实体。然而,在这些类型的解决方案中,通常需要采用大量的网络连接(例如,连接数目是上游分区计数和下游分区计数的乘积),这在许多情况下可能不是最优的。

此外,在上述方法中,即使是将来自上游分区的数据简单地重组到不同的下游分区集合中也可能潜在地导致无限大的无序序列(例如,由于上游分区以不同的速度操作或者被关闭),这将要求在管道中的某个点处引入无限大的缓冲器,以正确排序可能乱序到达的数据项。

本文描述的实施例通过提供一种用于处理数据流的系统来解决这些和其他问题。在示例系统中,分散度限制器可以建立可以数据流从多个上游分区被冲刷到数据存储库的最大时间分散度。例如,最大时间分散度可以是从最慢上游分区与最快上游分区被冲刷的数据项之间的最大时间差。多个数据冲刷器(其中每个数据冲刷器可以与上游分区对应)可以从一个或多个数据产生方获取数据项并且确定将数据冲刷到数据存储库是否会超过最大时间分散度。如果确定将数据冲刷到数据存储库不会超过最大时间分散度,则数据可以被冲刷到数据存储库以供下游分区摄取,并且可以更新数据结构以指示与被冲刷的数据项相关联的时间(例如,时间戳)。

以这种方式,从上游分区到数据存储库的数据冲刷可以基于是否超过时间分散度而被执行,并且因此不需要被排序。而是,可以在下游分区中的每个下游分区的下游重排序缓冲器中执行排序。由于被冲刷到数据存储库的数据在时间上的分散不超过已建立的限制(例如,10分钟),因此下游重排序缓冲器可以类似地在时间上受到限制,从而减少整个系统的操作存储器。因此,这样的优点可以使得能够改进处理和/或重组数据流的机器的利用率。通过将不必要被排序的数据项冲刷到持久存储装置,可以在管道的稍后点处在大小受限的重排序缓冲器中执行重排序以保留正确的时间顺序,从而避免了对保持当前管道中处于易失性存储器中的所有数据的需要,并且因此保护了总体存储器内资源(以及与这样的资源相关联的成本)。此外,实现所公开系统的(多个)计算系统的资源可以对其他应用或进程可用,从而降低了执行数据重组所需的资源成本并且总体上改进了计算系统的效率。

另外,本文描述的实现提供了正点事件的传输,该正点事件包含直到所有上游分区至少已经进展到的时间戳,从而允许下游重排序缓冲器以更快的方式将数据从缓冲器中冲刷出来并且减少数据行进通过管道的总体时延。更进一步,与现有解决方案相比,由于每个分区耦合到数据存储库(或多个数据存储库),并且每个数据存储库耦合到适当的下游分区,因此可以减少节点之间的连接总数。这样的连接减少不仅可以改进可以在其上执行重组的网络的性能(例如,通过减少所利用的连接并且释放这样的资源用于其他网络实体),连接的减少还可以通过减少可能的连接失败次数而改进了总体稳定性。此外,由于每个上游分区、数据存储库和下游分区可以彼此独立地处理数据,管道中的故障点总数也被减少,从而进一步改进了系统的稳定性。更进一步,由于没有单个实体可以在给定时间持有所有数据(例如,因为可以在多台机器上以分布式的方式执行数据流的处理),由于故障导致的恢复时间和/或数据丢失的总体风险也可以降低。

下面针对用于处理数据流的系统和方法描述示例实施例。例如,图1示出了根据一个示例实施例的系统100的框图。如图1中所示,系统100包括数据处理流102、上游数据获取方104、数据存储库110A-110M、时间戳账本112、下游数据接收方114和数据消耗方120。系统100可以包括任何数目的数据产生流、上游数据获取方、数据存储库、时间戳账本、下游数据接收方和/或数据消耗方,包括图1中所图示的数目并且可选地包括一个或多个未明确说明的其他实体。如图1中所示,数据产生流102包括数据产生方122A-122P。上游数据获取方104包括上游分区106A-106N,上游分区106A-106N中的每个分区可以包括数据重组管理器108。下游数据接收方114包括下游分区116A-116M,下游分区116A-116M中的每个分区可以包括重排序缓冲器管理器118。如下文更详细描述的,上游分区106A-106N的数据重组管理器108可以被配置为从一个或多个数据产生方122A-122P获取数据项并且将数据项冲刷到一个或多个数据存储库110A-110M。下游分区116A-116M的重排序缓冲器管理器118可以从对应的数据存储库摄取数据项,将所摄取的数据项重排序,并且向数据消耗方120冲刷经重排序的数据项。系统100进一步描述如下。

数据产生流102、上游数据获取方104、数据存储库110A-110M、时间戳账本112、下游数据接收方114和/或数据消耗方120(包括其任何子组件)中的一个或多个可以经由一个或多个网络而彼此通信耦合,网络包括以下任何一项或多项:局域网(LAN)、广域网(WAN)、个域网(PAN)、诸如互联网和/或虚拟网络的通信网络的组合。在一种实现中,数据产生流102、上游数据获取方104、数据存储库110A-110M、时间戳账本112、下游数据接收方114和/或数据消耗方120(包括其任何子组件)中的任何一个或多个可以经由一个或多个应用编程接口(API)和/或根据其他接口和/或技术来通信。数据产生流102、上游数据获取方104、数据存储库110A-110M、时间戳账本112、下游数据接收方114和/或数据消耗方120可以各自包括使得能够彼此通信的至少一个网络接口。这样的有线或无线的网络接口的示例包括IEEE802.11无线LAN(WLAN)无线接口、微波接入的全球互操作性(Wi-MAX)接口、以太网接口、通用串行总线(USB)接口、蜂窝网络接口、Bluetooth

数据产生流102可以包括可以向上游数据获取方104的上游数据分区106A-106N提供数据点的任何一个或多个数据产生方122A-122P的合集。例如,数据产生方122A-122P可以包括可以监控一个或多个环境的实体,包括但不限于传感器(例如,温度传感器、压力传感器、速度传感器、加速度计、多普勒传感器、雷达传感器、高度传感器、光传感器、位置传感器等)、网络监控组件(例如,网络流量监控器、防病毒和/或反恶意软件检测器等),或者可以生成数据流(例如,持续的流)的任何其他数据产生实体。在示例中,这样的数据产生实体可以在包括但不限于工厂、办公室、移动电话、车辆(例如,自动驾驶车辆)、飞机、网络环境的环境中被实现。因此,数据产生方122A-122P可以包括任何物理机或虚拟机、计算设备、网络节点或代理、硬件和/或软件等。下面参照图7描述可以实现数据产生方122A-122P中的一个或多个数据产生方的特征的示例计算设备。在实现中,数据产生流102可以包括任何数目的数据产生方122A-122P,包括数十、数百、数千、数百万或更多。

在实现中,由数据产生方122A-122P生成的数据点还可以包括相关联的时间戳,诸如标识当数据点由相应的数据产生方生成、入队、处理和/或传输时的时间的时间戳,或者基于数据产生方的系统时间的任何其他时间的时间戳。每个数据点可以包括时间重要性,以使得当前生成的数据点可以比过去生成的数据点更重要(例如,数据点的重要性可能随着时间而减弱)。结果,在实现中通常期望以相对小的时延实时(或近实时)地处理由数据产生方122A-122P生成的数据点。

在示例中,由数据产生方122A-122P生成的数据点可以被提供给上游分区106A-106N中的一个或多个上游分区。例如,数据产生方122A-122P可以被配置有和/或被指派分区标识符(ID),该分区标识符(ID)可以标识每个相应数据产生方的数据点被传输到的上游分区106A-106N中的一个或多个中上游分区中的每个上游分区(例如,分区ID可以包括0与N-1之间的数,其中N是图1的系统中所示的管道中的上游分区的数目)。示例不局限于指派分区ID,并且可以包括在数据产生方122A-122P与上游分区106A-106N之间路由数据点的任何其他方式。因此,在实现中,数据产生方122A-122P中的每个的数据点可以通过上游分区106A-106N的任何合适的维度(例如,通过传感器类型、所监控的活动类型、位置等)而被分区。

上游分区106A-106N可以包括任何一个或多个计算平台,包括但不限于计算设备、服务器、集群、处理节点、机器(例如,虚拟机、物理机等)、服务(例如,web服务)或用于获取和/或处理从数据产生实体(诸如数据产生方122A-122P)获取的数据项的其他计算平台。在示例中,上游分区106A-106N可以包括一个或多个分布式计算平台,其中每个分区可以被配置为获取和/或处理数据产生流102的数据子集(例如,获取和/或处理数据产生流102的具有对应分区ID的数据)。例如,上游分区106A-106N可以包括计算平台的合集或网络,这些计算平台可以单独和/或彼此独立地处理数据产生流102的数据。在一些示例中,上游分区106A-106N中的一个或多个可以彼此共置,或者可以位于远程(例如,在不同的物理位置、在不同的网络上等)。因此,在一些实现中,上游分区106A-106N可以被实现在不同的计算平台上。上游数据获取方104可以包括上游分区106A-106N的整个集合。

在实现中,数据重组管理器108可以被配置为将由每个上游分区(例如,基于分区ID)从数据产生流102获取的数据项冲刷到一个或多个数据存储库110A-110M。在示例中,数据重组管理器108可以根据最大时间分散度来冲刷数据项。例如,时间戳账本112可以包括指示上游分区106A-106N的每个分区将数据项冲刷到数据存储库110A-110M的最后时间的列表(例如,在诸如表格的数据结构中)。在数据重组管理器108确定将数据冲刷到数据存储库110A-110M不会超过最大时间分散度的情况下,数据可以被冲刷到数据存储库。

如下文将更详细地描述的,被冲刷到数据存储库110A-110M的数据项不需要是有序的(例如,按时间顺序),而是可以乱序地被冲刷。例如,如果一个分区操作得比另一个分区快,则较快分区仍然可以将数据项冲刷到给数据存储库110A-110M—即使该数据项具有晚于当前正在通过较慢分区被处理的数据项的相关联的时间戳。在实现中,适当的重排序可以由重排序缓冲器管理器118执行,如下所述。

数据存储库110A-110M可以包括任何类型的存储装置,包括但不限于持久存储装置(例如,硬盘驱动器、闪存驱动器、磁驱动器、光存储、集中式存储装置、分布式存储装置、基于云或网络的存储装置等)。在一些实现中,数据存储库110A-110M可以包括可以从多个数据流(例如,从每个上游分区)摄取和/或存储数据项以供多个下游分区访问的持久数据立方体(例如,数据的多维数组))。在一些实现中,可以根据下游分区(例如,M个分区)的数目来讲持久性存储装置(例如,数据立方体)分区。在另一示例中,数据存储库110A-110M可以包括数据日志(诸如仅能追加日志),其可以包括多个分区(例如,M个分区),其中每个分区与图1中所示的下游分区中的特定一个下游分区对应。应当注意并且理解,实现不局限于说明性示例,并且可以包括用于存储由多个下游分区可访问的数据项的任何其他类型的持久性存储装置。此外,虽然在一些示例中示出了以存在多个数据存储库110A-110M,但是应当理解,本文描述的技术也可以利用包括多个分区(例如,M个分区)的单一数据存储库来实现。

下游分区116A-116M可以包括一个或多个,包括任何一个或多个计算平台,包括但不限于计算设备、服务器、集群、处理节点、机器(例如,虚拟机、物理机等),服务(例如,web服务)或者用于获取和/或处理从数据存储库110A-110M获取的数据项的其他计算平台,如下文更详细描述的。在示例中,下游分区116A-116M可以被配置为以与上游分区106A-106N的维度不同的一个或多个维度讲由数据产生方122A-122P生成的数据项分区。下游数据接收方114可以包括下游分区116A-116M的整个集合。

作为说明,上游分区106A-106N可以根据存储位置(例如,五个分区,每个与不同的存储库对应)来将数据产生流102的数据分区,而下游分区116A-116M可以根据产品类型(例如,四个分区,每个分区与跨存储库销售的产品类型对应)来将数据。因此,虽然从数据产生流102获取的底层数据可能相同或相似,但是数据分区所依据的维度可以不同,或者数据可以以任何其他方式被重新组织,其中数据由N数目的上游分区中的某个键或维度分区到M数目的下游分区的另一键或维度,其中N和M可以是相同或不同的数。在一些示例中,每个下游分区还可以包括重排序缓冲器,该重排序缓冲器包括用于在从数据存储库110A-110M获取的数据项可以被(例如,根据与每个数据项相关联的时间戳)正确地重排序的同时临时持有数据点的临时存储器(例如,随机存取存储器(RAM)等)。换句话说,数据存储库110A-110M可以包括与每个下游分区相关联的数据项,这些数据项不一定是有序的,并且因此这样的数据的重排序可以由重排序缓冲器管理器118管理。

在将数据项重排序后,下游分区116A-116M中的每个下游分区可以向另一存储设备或资源(例如,本地存储装置或存储器、基于云的存储装置、任何其他持久性存储、web服务等)冲刷数据。例如,经重排序的数据可以被冲刷(例如,保持)到可以由数据消耗方120可访问的存储设备。在示例中,数据消耗方120可以包括一个或多个用户(例如,个人用户、家庭用户、企业用户、政府用户等)的计算设备,其可以包括可以在其中或者通过网络经由一个或多个其他计算设备而被执行、被托管和/或被存储的一个或多个应用、操作系统、虚拟机、存储器设备等。在一些示例中,数据消耗方120可以访问由下游数据接收方114重排序的数据,如本文所述。数据消耗方120可以是任何类型的固定或移动计算设备,包括移动计算机或移动计算设备(例如,

在实现中,数据消耗方120可以包括用于实时或近实时地收集、聚合、分析和/或可视化来自数据产生流102的数据项的任何计算设备,包括但不限于由用户操作的计算设备和/或服务、自主和/或半自主设备(例如,车辆、网络警报服务、机器人设备、制造组件等)、数据分析包、防病毒或反恶意软件解决方案等。示例不受限制,并且可以包括被配置为实时或近实时地处理来自数据产生流102(例如,包括多个个体数据产生方122A-122P)的数据的任何其他数据消耗设备。

应当注意并且理解,实现不限于图1中所示的说明性布置。而是,系统100可以包括可以以任何方式实现本文描述的特征的任何数目的计算设备和/或服务器。此外,虽然图1中所图示的组件或子组件中的任何一个或多个组件或自组件可以共置,彼此远离,但是也可以被实现在单个计算设备或虚拟机上,或者可以被实现在图1中未明确图示出的一个或多个附加计算设备或虚拟机上或者跨一个或多个附加计算设备或虚拟机分布。

注意,变量“M”、“N”和“P”被附加到所图示的组件的各种附图标记以指示这样的组件的数目是可变的,具有2和更大的任何值。取决于特定实现,任何特定组件/附图标记的“M”、“N”和“P”的值可以是小于10、数十、数百、数千或者甚至更大。

如所描述的,数据重组管理器108、数据存储库110A-110M、时间戳账本112和/或重排序缓冲器管理器118可以以各种方式实现数据的实时(或近实时)重组。例如,系统100的数据重组管理器108、数据存储库110A-110M、时间戳账本112和/或重排序缓冲器管理器118可以根据图2操作。图2示出了根据一个示例实施例的用于处理数据流的方法的流程图200。出于说明的目的,流程图200和系统100关于图3描述如下。

图3示出了根据一个示例实施例的用于重组数据流的系统300的框图。如图3中所示,系统300包括上游数据获取方104、数据存储库110A-110M、时间戳账本112和下游数据接收方114的示例实现。上游数据获取方包括上游数据分区106A-106N。上游分区106A-106N中的每个上游分区包括数据重组管理器108。数据重组管理器108包括分散度限制器304、数据冲刷器308、账本更新器310和正点生成器312。分散度限制器304包括最大时间分散度306。如图3中所示,数据冲刷器308包括数据冲刷器308A-308M。数据重组管理器108可以接收数据项302(例如,来自数据产生方122A-122P中的一个数据产生方的数据项)。在图3中所示的示例中,数据存储库110A可以被配置为获取数据项302和正点事件320。下游数据接收方114包括下游分区116A-116M。下游数据分区116A-116M中的每个下游分区包括重排序缓冲器管理器118,重排序缓冲器管理器118可以包括重排序缓冲器318合缓冲器冲刷器316,该重排序缓冲器318包括水印更新器314。流程图200和系统300进一步详细描述如下。

图2的流程图200开始于步骤202。在步骤202中,建立数据流被冲刷到数据存储库的最大时间分散度。例如,参考图3,分散度限制器304可以被配置为建立被冲刷到数据存储库110A-110M的数据流(例如,从数据产生流102所获取的数据项的流)的最大时间分散度306。在示例中,数据冲刷器308A-308M可以被配置为基于最大时间分散度306将数据流冲刷322到数据存储库110A-110M中的适当的一个数据存储库。

最大时间分散度306可以包括与可以被存储在数据存储库110A-110M中的任何数据存储库中的数据的最大允许时间分散度相关的任何时间限制,或者最快的上游分区可以相对于最慢的上游分区(在时间上)提前多远。例如,最大时间分散度306可以表示任何两个上游分区在将数据项冲刷到数据存储库110A-110M时可以分开的时间上限。例如,最大时间分散度306可以包括十分钟的限制(尽管这个限制只是说明性的,并且可以包括以秒、分、小时、天等为单位的任何其他时间)。在这样的示例中,数据冲刷器308A-308M中的任何数据冲刷器可以冲刷来自数据产生流102的数据项,其中与数据项相关联的时间戳不比数据冲刷器308中的任何其他数据冲刷器所冲刷的最近数据项提前多于十分钟。结果,最大时间分散度306可以限制可以被冲刷到数据存储库110A-110M的数据量,以使得数据冲刷器308中最慢的一个数据冲刷器和数据冲刷器308中最快的一个数据重画其之间的差量不超过最大时间分散度。

在实现中,分散度限制器304可以是可配置的,以用各种方式建立最大时间分散度306,各种方式包括经由合适的用户接口、分散度限制器304的预编程(例如,经由配置文件等)或者自动地(例如,基于数据产生流102的体量和/或频率)。

在步骤204中,从数据产生方获取数据项。例如,参考图3,数据冲刷器308中的数据冲刷器可以从数据产生流102获取数据项。如图3的说明性示例中所示,上游分区106A的数据冲刷器308A可以获取数据项302。数据项302可以包括由数据产生方122A-122P中的一个数据产生方生成的任何数据项(例如,数据点)。数据项302可以包括例如传感器信息、网络信息、位置信息等(其示例在本文中被描述)、以及可以指示数据项302何时被生成的相关联的时间戳。在示例中,时间戳可以标识与数据项302的生成相关联的年、日、月、小时、分、秒和/或毫秒等。如前所述,数据项302可以基于标识符(诸如所指派的分区ID)而被路由或以其他方式被提供给上游分区中的特定一个上游分区(例如,图3中所示示例中的上游分区106A)。

数据冲刷器308A可以获取数据项302以用于向适当的数据存储库(在该图示中为数据存储库110A)冲刷。在实现中,数据冲刷器308A-308M可以各自与下游分区116A-116M中的不同一个下游分区对应。例如,数据冲刷器308A可以将针对下游分区116A的数据项冲刷到数据存储库110A,下游分区116A可以从该数据存储库110A获取数据项;数据冲刷器308A可以将针对下游分区116B的数据项冲刷到数据存储库110B,下游分区116B可以从该数据存储库110B获取数据项,以此类推。换言之,诸如通过将数据从根据上游分区的第一维度重新分区为根据下游分区的第二维度,可以对上游分区中的每个上游分区执行从数据产生流102获取的数据项的初始重组。

图3中仅为了说明目的而将数据冲刷器308A-308M图示为单独的实体。在实现中,每个上游分区可以包括单个数据冲刷器,其可以将数据冲刷到数据存储库110A-110M或单个数据存储库(例如,其中单个数据存储库可以包括多个分区,其中每个分区与下游分区对应),或者可以包括多个数据冲刷器308A-308M,其中每个数据冲刷器将数据冲刷到用于由适当的下游分区摄取的数据存储库。

还应当注意并且理解,出于说明的目的,数据项302可以表示从数据产生流102获取的数据项(例如,特定数据点)的单个实例。在实现中,数据产生流102可以经由网络或任何其他通信耦合而向上游分区106A-106N提供连续或持续的数据项的流。虽然参考单个示例数据项描述了流程图200,但是应当理解,所描述的技术可以类似地应用于从数据产生流获取的任何其他数据项,而不管该数据项最初接收数据的上游分区以及在重组操作后可以接收数据的下游分区如何。

在步骤206中,确定将数据冲刷到数据存储库是否会超过最大时间分散度。例如,参考图3,数据冲刷器308A-308M中的每个数据冲刷器可以被配置为确定将数据项302冲刷到数据存储库110A-110M中的适当的一个数据集存储库(例如,取决于根据重组过程哪个下游分区应当接收数据项302)是否会超过最大时间分散度306。

在示例中,数据冲刷器308A-308M可以通过访问和/或获取330时间戳账本112来确定将数据冲刷到适当的数据存储库是否会违反最大时间分散度306。时间戳账本112可以包括数据结构,诸如可以指示每个上游分区106A-106N的数据冲刷器将数据项冲刷到数据存储库110A-110M中的任何数据存储库的最近时间(例如,基于时间戳)的表、电子表格、数据库、日志文件等。在实现中,时间戳账本112可以以集中化的方式被存储,以使得每个上游分区106A-106N的数据冲刷器308可以访问时间戳账本112。在示例中,以可以被共享给每个上游分区的集中化方式(例如,在服务器等上),时间戳账本112可以被存储在存储器内和/或持久存储装置中。每个上游分区106A-106N的每个数据冲刷器308可以以周期性(例如,每秒、每分钟等)或持续的方式获取时间戳账本112,并且存储账本的存储器内版本,将账本存储在高速缓存中、和/或将表存储在对分区可以是本地的持久存储装置中。以这种方式,可以使得每个上游分区的每个数据冲刷器能够访问时间戳账本112的现在的版本,以便确定将数据冲刷到数据存储库是否会违反最大时间分散度306。虽然在图3中描绘了时间戳账本112的单个实例,但是注意,为了冗余,时间戳账本112也可以跨多个机器、分区、服务器等分布。

如所描述的,针对上游分区106A-106N中的每个上游分区,时间戳账本112可以包括标识该分区将数据冲刷到数据存储库110A-110M中的任何数据存储库的最近时间的指示。在仅出于说明目的而被提供的示例中,时间戳账本112可以针对五个上游分区中的每个上游分区指示分区和时间戳之间的以下映射:

分区00:01:00

分区01:01:01

分区02:01:01

分区03:01:01

分区04:01:01

在这样的示例中,时间戳中的每个时间戳(以HH:MM格式来表达,但是可以包括任何其他时间格式,包括年、日、月、秒、毫秒等)可以指示分区的数据冲刷器将数据冲刷到数据存储库中的任何数据存储库的最近时间(例如,针对每个上游分区的最后输出时间)。例如,如上所示,由分区00冲刷的数据项的最近时间戳是01:00,由分区01冲刷的数据项的最近时间戳是01:01,以此类推。每当上游分区将新数据项冲刷到数据存储库110A-110M中的任何数据存储库时,就可以用针对该分区的新时间戳来更新时间戳账本112。

使用以上示例,(在该图示中为分区00的)数据冲刷器308A可以使用时间戳账本112来确定将数据项302冲刷到数据存储库110A是否会违反最大时间分散度306。例如,如果最大时间分散度306被配置为十分钟,则数据冲刷器308A可以比较与数据项302相关联的时间戳,以确定数据项的时间戳是否比时间戳账本112中所指示时间戳中的任何时间戳提前多于十分钟。例如,如果数据项302包括01:09的时间戳,则数据冲刷器308A可以确定将数据项302冲刷到数据存储库110A不会违反最大时间分散度306,因为要被冲刷的数据项的时间戳在所配置的十分钟限制内。另一方面,如果数据项302包括01:12的时间戳,则数据冲刷器308A会确定将数据项冲刷到数据存储库或超过(例如,违反)最大时间分散度306,并且因此尚不会冲刷该实例中的数据项。以这种方式,数据冲刷器308A-308M可以确保上游分区106A-106N之中的没有分区显著比另一分区(例如,被关闭或从故障恢复的分区)提前,因此限制了可以被每个下游重排序缓冲器摄取的数据量。

在步骤208中,至少基于确定将数据冲刷到数据存储库不会超过最大时间分散度,数据项被冲刷给数据存储库。例如,参考图3,数据冲刷器308A-308N可以被配置为至少基于确定冲刷数据项不会超过最大时间分散度306而数据存储库110A-110M中的适当的一个数据存储库冲刷数据项(例如,数据项302)。例如,在图3中所示的说明性布置中,数据冲刷器308A可以将数据项302冲刷到数据存储库110A以供下游分区116A摄取。

如前所述,数据存储库110A(或任何其他数据存储库)可以包括诸如持久数据立方体的持久存储装置,用于存储由上游分区106A-106N接收并且冲刷到数据存储库的每个数据项。在示例中,数据冲刷器308可以通过在合适的通信链路(诸如网络连接)之上传输数据项来将数据项冲刷到适当的数据存储库。

在实现中,当将数据项冲刷到数据存储库110A-110M中的适当的一个数据存储库时,上游分区106A-106N中的每个上游分区可以独立地操作,诸如以分布式或并行的方式。虽然每个上游分区可以按时间顺序处理来自数据产生流102的数据项(即,通过流所接收的数据点可以顺序地被冲刷),但是被冲刷到数据存储库110A-110M的数据项不需要按上游分区中的所有上游分区上的时间顺序被冲刷。例如,上游分区106A可以在上游分区106B冲刷包括01:05的较早时间戳的数据项之后冲刷包括01:09的时间戳的数据项。结果,(从上游分区106A-106N中的任何上游分区接收到的)在数据存储库110A-110M上被存储的数据项可以以不一定是有序的非顺序方式被冲刷。以这种方式,由于不需要由上游分区106A-106N或数据存储库110A-110M中的任何一个执行排序,所以数据项可以更快地被冲刷到适当的数据存储库,并且资源(例如,用来临时持有数据事件的存储器缓冲器或高速缓存)可以在上游分区处被保留。

在数据冲刷器确定将数据项冲刷到数据存储库110A-110M中的适当的一个数据存储库会超过最大时间分散度306的实例中,数据冲刷器可以不向数据存储库冲刷数据。例如,这样的实例可能发生在一个或多个上游分区已关闭(例如,由于软件和/或硬件故障)或者显著落后于其他分区的情况下。在这样的实例中,数据冲刷器可以将项标识为处于“未决”状态和/或将数据项保持在队列(例如,缓冲器等)中,以使得在分区已关闭或显著落后时,数据项可以不会通过管道被处理。数据冲刷器可以稍后通过以连续或周期性的方式轮询时间戳账本112来重试冲刷该数据项,直到冲刷数据项不会超过最大时间分散度306为止,此时该数据项可以被冲刷(并且时间戳账本112可以被更新)。通过基于最大时间分散度306将数据冲刷到数据存储库110A-110M,数据存储库的大小可以由此受到限制,使得跨数据存储库被冲刷的数据点不会超过时间限制。如稍后将描述的,这样的限制还可以使得下游分区中的每个下游分区中的重排序缓冲器能够包括减小的大小,从而在管道的各个阶段节省了存储器内资源。

在步骤210中,数据结构被更新以指示与数据项相关联的时间。例如,至少基于数据冲刷器确定将数据冲刷到适当的数据存储库不会违反最大时间分散度306,账本更新器310可以被配置为用最后被冲刷到数据存储库110A-110M中的一个数据存储库的数据项的时间戳来更新时间戳账本112。例如,继续图3的说明性示例,账本更新器310可以更新330时间戳账本112,以利用时间戳指示分区106A最近冲刷到数据存储库110A的数据项302(例如,通过将时间戳值从01:00更新到01:09)。

账本更新器310可以以各种方式来实现。例如,虽然账本更新器310在图3中被图示为被实现在上游分区106A-106N中的每一个上游分区中,但是也设想到了其他布置,诸如在单个上游分区中实现账本更新器310。在其他示例实施例中,账本更新器310可以在分区106A-106N之外被实现,诸如在可以存储时间戳账本112的一个或多个服务器中和/或一个或多个数据存储库110A-110M中。例如,时间戳账本112可以被配置为检测数据存储库110A-110M中的任何数据存储库何时从上游分区106A-106N中的任何上游分区接收到新的数据项,并且自动更新时间戳账本112以反映针对传输分区的已更新的时间戳。这些示例并非旨在进行限制,并且实现可以包括相关领域技术人员了解的用于更新时间戳账本112的任何其他合适的方式。当针对特定分区的已更新的时间戳被存储在时间戳账本112中后,可以将更新值通知上游分区中的每个上游分区(例如,通过提供时间戳账本112作为整理,或者提供已更新的值)。

如上所述,分散度限制器304可以限制下游重排序缓冲器的大小。例如,图4示出了根据一个示例实施例的用于限制下游重排序缓冲器的方法的流程图400。在一个实现中,流程图400的方法可以由分散度限制器304和/或重排序缓冲器318实现。继续参考图3来描述图4。基于以下关于流程图400和图3的系统300的讨论,其他结构和操作实现对于(多个)相关领域的技术人员来说将是明显的。

流程图400开始于步骤402。在步骤402中,针对多个重排序缓冲器建立时间分散度限制。例如,参考图3,重排序缓冲器318可以包括时间分散度限制,该时间分散度限制用于在将多个数据项重排序时临时持有这些数据项的缓冲器(例如,诸如高速缓存等的临时存储器等)的大小。在示例中,特定分区的重排序缓冲器318可以被配置为在数据项被冲刷到数据存储库后从对应的数据存储库中摄取324针对(例如,被指派给)该分区的数据项。例如,下游分区116A的重排序缓冲器318可以从数据存储库110A摄取数据项,下游分区116B的重排序缓冲器可以从数据存储库110B摄取数据项,以此类推。重排序缓冲器318可以通过合适的通信耦合(诸如网络链路等)实时或近实时地获取数据项。在一些实现中,在重排序缓冲器318从对应的数据存储库获取数据项后,可以从数据存储库中移除(例如,删除、标记为删除等)该数据项。

如前所述,由于数据存储库110A-110M不可以包含在时间上分散超过最大时间分散度306(例如,十分钟)的数据项,所以分散度限制器304可以被配置为有效地建立对重排序缓冲器318的大小的时间分散度限制。例如,分散度限制器304可以被配置为建立最大时间分散度306以限制数据冲刷器308可以冲刷到数据存储库110A-110M中的任何一个数据存储库的数据的时间分散度。由于数据冲刷器308可以冲刷数据的时间戳不会超过最大时间分散度306的数据项,因此在数据存储库110A-110M上被冲刷的数据可以包括最大时间分散度306内的数据项(例如,数据存储库可以仅包括十分钟时间段内的数据项)。以这种方式,可以针对重排序缓冲器318建立时间分散度限制,其减小了缓冲器的大小,这从而可以降低对下游分区114中的每个下游分区的存储器需求并且增强了稳定性。换句话说,通过基于最大时间分散度协调由上游分区106A-106N向数据存储库110A-110M的数据项冲刷,重排序缓冲器的大小可以由此减小。

如前所述,由于可以以任何顺序(例如,不一定以时间顺序)将数据项冲刷到数据存储库110A-110M,因此重排序缓冲器318可以摄取针对特定分区的类似地无序的数据项。换句话说,虽然来自特定上游分区(例如,上游分区106A)的数据项按时间顺序被处理并且被冲刷到数据存储库,但是不同的上游分区可能以不同的速度执行,这可能导致另一分区(例如,上游分区106B)在上游分区106A冲刷具有后续时间戳的数据项之后处理具有较早时间戳的数据项并且将该具有较早时间戳的数据项冲刷到数据存储库110A-110M。结果,重排序缓冲器318可能需要对这样的数据项执行重排序过程以在将数据项冲刷到数据消耗方之前以正确的时间顺序呈现这些项。

在示例实施例中,重排序缓冲器318可以实现用于重排序数据项的水印技术,直到水印的数据项可以被重排序并冲刷到数据消耗方。用于特定重排序缓冲器的水印可以表示与在上游分区106A-106N中的每个上游分区上接收到的数据项相关联的最近时间戳之中的最旧值(在一个示例中,其可以是与最慢的上游分区相关联的时间戳)。例如,如果重排序缓冲器318被配置为接收来自五个上游分区的数据项,则重排序缓冲器318可以在表或其他数据结构中存储从上游分区中的每个上游分区所摄取的最近数据项的时间戳。基于时间戳的合集(在这个特定示例中总共五个时间戳),最旧的时间戳可以表示“水印”,这是数据项可以被视为重排序至并且被冲刷到数据消耗方的点。换句话说,由于每个上游分区按顺序处理数据项,所以重排序缓冲器318可以推断:一旦从特定分区接收到数据项,后续就不会从该特定分区接收到时间早于接收到的数据项的数据项。因此,跨上游分区中的所有上游分区,重排序缓冲器318中的数据项可以被视为重排序直至水印并且包括水印,并且后续地被冲刷到数据消耗方120。

注意,尽管本文描述了下游重排序缓冲器可以基于重排序缓冲器的时间限制将数据冲刷给数据消耗方,但是考虑到在一些其他实例中可以实现较不严格的方法,诸如即使水印没有被赶上,也通过启用下游重排序缓冲器中的一个或多个下游重排序缓冲器来基于任何其他因素将数据冲刷给数据消耗方(例如,可以针对某些分区和/或数据产生方而被定义的条件,即使上游分区已关闭或正在恢复等,也允许分区继续进行)。在一些另外的实现中,还可以实现一个或多个可配置控件来控制数据项通过管道的流动,诸如阻止和/或解除阻止某些数据产生方或上游分区的控件。

在一些实例中,诸如在上游分区106A-106N中的每个上游分区是健康的(例如,及时处理数据,没有分区被关闭)的情况下,实现可以进一步减少将数据冲刷到数据消耗方的时延。例如,由于与先前描述的特定下游分区相关联的水印通常在该下游分区接收到旨在用于其的数据时移动,所以可能存在上游分区仍然健康并且传输数据项以供不同下游分区摄取的实例。在这样的情形中,针对未接收任何数据项的特定下游分区的水印可能不会及时移动,从而导致流经该下游分区的数据项的端到端时延。

本文描述的实现可以使得能够减少这样的时延。例如,图5示出了根据一个示例实施例的用于将正点事件传输给数据存储库的方法的流程图。在一个实现中,流程图500的方法可以由正点生成器312和/或数据冲刷器308实现。继续参考图3来描述图5。基于以下关于图3的系统300和流程图500的讨论,其他结构和操作实现对于(多个)相关领域的技术人员将是明显的。

流程图500开始于步骤502。在步骤502中,指示分区将数据冲刷到数据存储库的最旧时间的最旧时间戳被标识。例如,参考图3,正点生成器312可以被配置为参考时间戳账本112(被存储在存储器中或高速缓存中,和/或被远程存储)以标识上游分区106A-106N中的任何上游分区将数据冲刷到数据存储库110A-110M中的任何数据存储库的最旧时间。换句话说,正点生成器312可以基于分区的最近数据冲刷来标识表示最慢执行的分区的时间戳。作为说明性示例,时间戳账本112可以针对五个上游分区中的每个上游分区指示如下时间戳:

分区00:01:08

分区01:01:10

分区02:01:07

分区03:01:01

分区04:01:09

在这样的示例中,正点生成器312可以将对应于分区03的时间戳01:01标识为时间戳账本112中的最旧时间戳。在一些示例实施例中,正点生成器312可以以预定时间间隔(例如,周期性地每秒、每十秒、每分等)标识最旧时间戳。

还应当注意并理解,正点生成器312不需要在如图3中所图示的上游分区106A-106N中的每个上游分区实现。而是,在一些示例实施例中,正点生成器312可以在上游分区中的子集或一个单个分区(例如,上游分区106A或主分区)中实现。例如,上游分区中的任何一个分区可以包括正点生成器312,该正点生成器312被配置为查询时间戳账本112以检索本文所述的最旧时间戳。在一些另外的实现中,这样的上游分区可以被配置为检索除当前分区之外的所有上游分区的最旧时间戳(因为该分区知道它自己的水印)。在又一些其他实现中,诸如在上游分区与下游分区之间存在1:1关系的情况下(例如,在完全并行作业的情况下),每个上游分区可以被配置为生成和传输与其自己时间戳对应的正点事件,而不是查询时间戳账本112。因此,实现不限于生成和传输正点事件的任何特定方法或方式,并且可以包括相关领域的技术人员将了解的任何合适的技术。

在步骤504中,包括最旧时间戳的正点事件被传输给数据存储库。例如,参考图3,正点生成器312可以生成正点事件320,正点事件320包括在时间戳账本112中所标识的最旧时间戳。在实现中,数据冲刷器308A-308M可以以关于步骤502所描述的相同预定时间间隔向数据存储库110A-110M中的每个数据存储库传输326(例如,广播)正点事件以供下游分区116A-116M中的适当的一个下游分区摄取。如下文将更详细解释的,水印更新器314可以被配置为基于正点事件320来移动重排序缓冲器318的水印,从而进一步减少将重排序的数据项冲刷到数据消耗方的时延。

在示例中,数据冲刷器308A-308M可以以与传输数据项302(或从数据产生流102接收到的任何其他数据项)相同或相似的方式传输正点事件320。换言之,数据冲刷器308A-308M可以被配置为通过与被冲刷到数据存储库110A-110M的任何其他数据项相同的一个或多个通信链路来传输正点事件320。尽管可以利用相同或相似的通信链路,但是注意,正点事件320不需要包括来自数据产生流102的数据项。而是,正点事件320可以包括从时间戳账本112所标识的适当值(例如,没有来自数据生成流102的任何其他数据)。可以利用相同或相似的(多个)通信链路来确保下游分区116A-116M以适当的时间顺序摄取正点事件。例如,如果正点事件320被直接传输给下游分区而不是通过适当的数据存储库,则下游分区可以接收指示最旧时间戳值的正点事件,该时间戳值可以在时间上迟于在当前正在通过管道工作的数据项(例如,在数据存储库110A-110M中的一个数据存储库)。因此,在这样的场景中,下游分区可能无法准确地重排序从适当的数据存储库所摄取的数据项。由于正点事件320通过与其他数据项的链路相同的链路被传输,因此可以确保正点事件(包含与特定的被冲刷数据项相关联的时间戳)按事件顺序在特定冲刷数据项被适当的下游分区摄取之后被摄取。

如前所述,正点事件320可以使得下游重排序缓冲器能够减少将数据冲刷到数据消耗方的时延。例如,图6示出了根据一个示例实施例的用于将下游重排序缓冲器中直到正点事件中所标识的时间戳的项重排序的方法的流程图。在一个实现中,流程图600的方法可以通过重排序缓冲器318、水印更新器314和/或缓冲器冲刷器316来实现。继续参考图3来描述图6。基于以下关于图3的系统300和流程图600的讨论,其他结构和操作实现对于(多个)相关领域的技术人员将是明显的。

流程图600开始于步骤602。在步骤602中,从数据存储库获取正点事件。例如,参考图3,重排序缓冲器318可以被配置为从数据存储库(例如,数据存储库110A)获取328正点事件320。如早先所述,正点事件320可以包括标识上游分区106A-106N中的任何上游分区将数据冲刷到数据存储库110A-110M中的任何数据存储库的最旧时间的最旧时间戳。重排序缓冲器318可以以上面关于重排序缓冲器318从数据存储库获取数据项302所描述的类似方式获取正点事件320。例如,重排序缓冲器318可以在数据冲刷器308中的一个数据冲刷器将正点事件320冲刷到数据存储库后立即从数据存储库110A获取正点事件320(例如,实时或近实时地)。

在步骤604中,重排序缓冲器中直到正点事件中所标识的最旧时间戳的数据项被重排序。例如,参考图3,水印更新器314可以被配置为基于正点事件320中所标识的最旧时间戳来更新重排序缓冲器318中的水印。使用正点事件320中所标识的时间戳更新水印可以使得重排序缓冲器318能够将水印移动到已知在所指示的时间戳之前没有数据项将被接收的时间点。换言之,因为分区106A-106N中的每个分区以时间顺序(例如,以单调递增的方式)处理来自数据产生流102的数据项,并且正点事件320可以表示最慢执行的上游分区的最近输出的时间戳(不管最慢移动的分区最近可能将数据项冲刷到了哪个数据存储库110A-110M),因此可以推断:所有数据产生方122A-122P至少已经进展到这一点,并且没有上游分区(包括最慢的分区和任何其他上游分区)可能后续地冲刷时间戳早于正点事件320中所指示的时间戳的数据项。

结果,正点事件320可以向下游分区116A-116M中的每个下游分区指示时间点,每个重排序缓冲器中的项集合直到该时间点可以被认为是完整的。因此,重排序缓冲器318可以将缓冲器中直到并包括已更新的水印(例如,正点事件中的时间戳)的数据项重排序。

作为说明性示例,下游分区116A的重排序缓冲器中的水印可以指示基于从特定上游分区(例如,给定时间点的最慢上游分区)接收到的数据的最后实例的时间戳。如果特定上游分区仍然健康并且正在处理冲刷数据项以供下游分区116B-116M中的一个或多个下游分区摄取,则下游分区116A的重排序缓冲器中的水印可能不会移动,因为下游分区116A没有摄取上游分区所处理的更新近的数据项。然而,由于下游分区116A可以接收正点事件320,该正点事件320指示上游分区将数据冲刷到任何数据存储库110A-110M的最后时间,因此下游分区116A中的水印更新器314可以推断上游分区至少已经进展到了时间戳,并且因此对应地移动水印。

在步骤606中,重排序缓冲器中的经重排序的数据项被冲刷给数据消耗方。例如,参考图3,缓冲器冲刷器316可以被配置为将重排序缓冲器中直到已更新的水印的数据项冲刷给数据消耗方120。缓冲器冲刷器316可以如相关领域的技术人员所了解的以各种方式冲刷数据,诸如通过将经重排序的直到已更新的水印的数据项传输和/或存储在由数据消耗方120可访问的持久存储装置中,包括但不限于远程或基于云的存储器设备、数据消耗方120本地的存储器设备(例如,与消耗方在相同的计算设备上)、光盘或其他物理介质,或者任何其他持久性或非易失性存储装置。还考虑到了缓冲器冲刷器316可以将经重排序的数据项传输给其他形式的存储装置,包括非持久性或易失性存储装置(例如,随机存取存储器设备、数据高速缓存等)。

以这种方式,当上游分区106A-106N是健康的(例如,连续正确地处理数据项和/或没有由于故障等关闭)时,水印更新器314可以被配置为更接近实时或近实时地移动重排序缓冲器318的水印,而不是等到重排序缓冲器318的时间分散度限制(例如,十分钟)为止。换言之,排序缓冲器中的数据项可以以如下方式被冲刷到所指示的时间戳:缓冲器中剩余的数据项的时间分散度(例如,缓冲器中剩余的最旧项与最新项之间的时间差)小于时间分散度限制。在许多实例中,与可能大得多的时间分散度限制相比,缓冲器中剩余的数据项的时间分散度可能显著小几个量(例如,秒)。结果,不仅可以减小缓冲器大小和存储器内需求以节省系统资源,而且可以进一步减少重排序和冲刷数据项的时延。

如上所述,数据重组管理器108、数据存储库108A-108M、时间戳账本112和重组缓冲器管理器118可以被配置为以确保数据项被正确排序的方式重组来自数据产生流102的数据流,同时不会在将数据冲刷给消耗实体时引入显著的附加时延。然而,应注意,虽然一些实现可以包括所有上述组件,但是一些其他实现可以包括其子集或仅本文描述的某些子组件。例如,正点生成和传输实体在一些实现中可以作为独立于本文描述的其他特征的单独实体而被提供。因为上游分区和下游分区的组件之间不需要运行时依赖性(除了在许多实例中可以是静态的下游重排序缓冲器的时间限制),所以上游分区和下游分区中的每个分区都可以独立地被维护(例如,开始、停止、升级等)独立,而不会影响其他分区。

III.示例移动和固定设备实施例

数据产生流102、数据产生方122A-122P、上游数据获取方104、上游分区106A-106N、数据重组管理器108、时间戳账本112、数据存储库110A-110M、下游数据接收方114、下游分区116A-116M、重排序缓冲器管理器118、数据消耗方120、分散度限制器304、数据冲刷器308A-308M、账本更新器310、正点生成器312、重排序缓冲器318、水印更新器314、缓冲器冲刷器316、流程图200、流程图400、流程图500和/或流程图600可以以硬件、或者与软件和/或固件结合的硬件来实现,诸如被实现为被存储在基于物理/硬件的计算机可读存储介质中并且被配置为在一个或多个处理器中被执行的计算机程序代码/指令,或者被实现为硬件逻辑/电路(例如,由晶体管、逻辑门、运算放大器、一个或多个专用集成电路(ASIC)、一个或多个现场可编程门阵列(FPGA)的组成的电路)。例如,数据产生流102、数据产生方122A-122P、上游数据获取方104、上游分区106A-106N、数据重组管理器108、时间戳账本112、数据存储库110A-110M、下游数据接收方114、下游分区116A-116M、重排序缓冲器管理器118、数据消耗方120、分散度限制器304、数据冲刷器308A-308M、账本更新器310、正点生成器312、重排序缓冲器318、水印更新器314、缓冲器冲刷器316、流程图200、流程图400、流程图500和/或流程图600中的一项或多项可以在SoC中单独或一起被实现。SoC可以包括集成电路芯片,该集成电路芯片包括处理器(例如,中央处理单元(CPU)、微控制器、微处理器、数字信号处理器(DSP)等)、存储器、一个或多个通信接口、和/或其他电路中的一项或多项,并且可以可选地执行接收到的程序代码和/或包括用于执行功能的嵌入式固件。

图7描绘了在其中可以实现示例实施例的计算设备700的示例性实现。例如,数据产生流102、数据产生方122A-122P、上游数据获取方104、上游分区106A-106N、数据重组管理器108、时间戳账本112、数据存储库110A-110M、下游数据接收方114、下游分区116A-116M、重排序缓冲器管理器118、数据消耗方120、分散度限制器304、数据冲刷器308A-308M、账本更新器310、正点生成器312、重排序缓冲器318、水印更新器314和/或缓冲器冲刷器316中的任何一项可以在类似于固定或移动计算机实施例中的计算设备700的一个或多个计算设备中实现,包括计算设备700的一个或多个特征和/或备选特征。本文提供的计算设备700的描述是为了说明的目的而被提供,并非旨在进行限制。示例实施例可以在如(多个)相关领域的技术人员已知的其他类型的计算机系统中实现。

如图7中所示,计算设备700包括称为处理器电路702一个或多个处理器、系统存储器704和将包括系统存储器704的各种系统组件耦合到处理器电路702的总线706。处理器电路702是电子和/或光学电路,其在一个或多个物理硬件电路设备元件和/或集成电路设备(半导体材料芯片或管芯)中被实现为中央处理单元(CPU)、微控制器、微处理器和/或其他物理硬件处理器电路。处理器电路702可以执行被存储在计算机可读介质中的程序代码,诸如操作系统730、应用程序732、其他程序734等的程序代码。总线706表示若干类型的总线结构中的任何一种或多种总线结构,包括存储器总线或存储器控制器、外围总线、加速图形端口以及使用各种总线架构中的任何一种总线架构的处理器或本地总线。系统存储器704包括只读存储器(ROM)708和随机存取存储器(RAM)710。基本输入/输出系统712(BIOS)被存储在ROM 708中。

计算设备700还具有以下驱动器中的一种或多种驱动器:用于从硬盘读取和向硬盘写入的硬盘驱动器714、用于从可移除磁盘718读取或向可移除磁盘718写入的磁盘驱动器716、以及用于从诸如CD ROM、DVD ROM或其他光学介质的可移除光盘722读取或向可移除光盘722写入的光盘驱动器720。硬盘驱动器714、磁盘驱动器716和光盘驱动器720分别通过硬盘驱动器接口724、磁盘驱动器接口726和光驱接口728连接到总线706。驱动器及其相关联的计算机可读介质为计算机提供计算机可读指令、数据结构、程序模块和其他数据的非易失性存储装置。虽然描述了硬盘、可移除磁盘和可移除光盘,但是也可以使用其他类型的基于硬件的计算机可读存储介质来存储数据,诸如闪存卡、数字视频磁盘、RAM、ROM和其他硬件存储介质。

多个程序模块可以被存储在硬盘、磁盘、光盘、ROM或RAM上。这些程序包括操作系统730、一个或多个应用程序732、其他程序734和程序数据736。应用程序732或其他程序734可以包括例如计算机程序逻辑(例如,计算机程序代码和指令),以用于实现数据产生流102、数据产生方122A-122P、上游数据获取方104、上游分区106A-106N、数据重组管理器108、时间戳账本112、数据存储库110A-110M、下游数据接收方114、下游分区116A-116M、重排序缓冲器管理器118、数据消耗方120、分散度限制器304、数据冲刷器308A-308M、账本更新器310、正点生成器312、重排序缓冲器318、水印更新器314、缓冲器冲刷器316、流程图200、流程图400、流程图500和/或流程图600(包括流程图200、400、500或600的任何合适的步骤)和/或本文描述的其他示例实施例。

用户可以通过诸如键盘738和指点设备740的输入设备将命令和信息录入到计算设备700中。其他输入设备(未示出)可以包括麦克风、操纵杆、游戏手柄、卫星天线、扫描仪、触摸屏和/或触摸板、接收语音输入的语音识别系统、接收手势输入的手势识别系统等。这些和其他输入设备常常通过耦合到总线706的串行端口接口742而被连接到处理器电路702,但是也可以通过其他接口连接,诸如并行端口、游戏端口或通用串行总线(USB)。

显示屏744也经由接口(诸如视频适配器746)连接到总线706。显示屏744可以在计算设备700的外部,或者被并入计算设备700中。显示屏744可以显示信息,以及是用于接收用户命令和/或其他信息(例如,通过触摸、手指手势、虚拟键盘等)的用户接口。除了显示屏744之外,计算设备700可以包括其他外围输出设备(未示出),诸如扬声器和打印机。

计算设备700通过适配器或网络接口750、调制解调器752或用于在网络上建立通信的其他部件而被连接到网络748(例如,互联网)。调制解调器752可以是内部的或外部的,可以经由串行端口接口742而被连接到总线706,如图7中所示,或者可以使用包括并行接口在内的另一种接口类型连接到总线706。

如本文中所使用的,术语“计算机程序介质”、“计算机可读介质”和“计算机可读存储介质”被用来指代物理硬件介质,诸如与硬盘驱动器714相关联的硬盘、可移除磁盘718、可移除光盘722、其他物理硬件介质诸如RAM、ROM、闪存卡、数字视频磁盘、zip盘、MEM、基于纳米技术的存储器设备,以及其他类型的物理/有形硬件存储介质。这种计算机可读存储介质与通信介质不同且不重叠(不包括通信介质)。通信介质在诸如载波之类的调制数据信号中包含计算机可读指令、数据结构、程序模块或其他数据。术语“调制数据信号”是指一种信号,其具有以将信息编码在信号中的方式来设置或改变的一个或多个特性。作为示例而非限制,通信媒体包括无线介质,诸如声学、RF、红外线和其他无线介质,以及有线介质。示例实施例还涉及与涉及计算机可读存储介质的实施例分开且不重叠的这种通信介质。

如上面所指出,计算机程序和模块(包括应用程序732和其他程序734)可以被存储在硬盘、磁盘、光盘、ROM、RAM或其他硬件存储介质上。这样的计算机程序也可以经由网络接口750、串行端口接口742或任何其他接口类型而被接收。这样的计算机程序在由应用执行或加载时,使得计算设备700能够实现本文描述的示例实施例的特征。因此,这样的计算机程序表示计算设备700的控制器。

示例实施例还涉及包括被存储在任何计算机可读介质上的计算机代码或指令的计算机程序产品。这样的计算机程序产品包括硬盘驱动器、光盘驱动器、存储器设备包、便携式记忆棒、存储卡和其他类型的物理存储硬件。

IV.示例实施例

本文公开了一种用于处理数据流的系统。该系统包括:一个或多个处理器;以及一个或多个存储器设备,该一个或多个存储器设备存储被配置为由一个或多个处理器执行的程序代码,该程序代码包括:分散度限制器,该分散度限制器被配置为建立数据流从多个上游分区被冲刷到数据存储库的最大时间分散度;多个数据冲刷器,每个数据冲刷器与多个上游分区中的一个上游分区对应,每个数据冲刷器被配置为:从一个或多个数据产生方获取数据项;确定将数据冲刷到数据存储库是否会超过最大时间分散度;以及至少基于确定将数据冲刷到数据存储库不会超过最大时间分散度,将数据冲刷到数据存储库以供下游分区摄取,并且更新数据结构以指示与数据项相关联的时间。

在前述系统的一种实现中,数据存储库包括持久数据立方体。

在前述系统的另一种实现中,被冲刷到数据存储库的数据项不一定是有序的。

在前述系统的另一种实现中,数据结构包括由多个上游分区中的每个上游分区可访问的表。

在前述系统的另一种实现中,分散度限制器还被配置为:建立多个重排序缓冲器的时间分散度限制,每个重排序缓冲器与一个下游分区对应。

在前述系统的另一种实现中,该系统还包括:正点生成器,该正点生成器被配置为以预定时间间隔:标识数据结构中的最旧时间戳,该最旧时间戳指示多个上游分区之中的分区将数据冲刷到数据存储库的最旧时间;并且将包括最旧时间戳的正点事件传输给数据存储库以供多个下游分区摄取。

在前述系统的另一种实现中,每个下游分区包括重排序缓冲器,该重排序缓冲器被配置为:从数据存储库获取正点事件,并且将重排序缓冲器中直到正点事件中的最旧时间戳的数据项重排序;该系统还包括缓冲器冲刷器,该缓冲器冲刷器被配置为将重排序缓冲器中的经重排序的数据项冲刷到数据消耗方,其中重排序缓冲器中的剩余数据项的时间分散度小于重排序缓冲器的时间分散度限制。

本文公开了一种用于处理数据流的方法。该方法包括:建立数据流从多个上游分区被冲刷到数据存储库的最大时间分散度;在多个数据冲刷器中的每个数据冲刷器中,从一个或多个数据产生方获取数据项,每个数据冲刷器与多个上游分区中的一个上游分区对应;确定将数据冲刷到数据存储库是否会超过最大时间分散度;至少基于确定将数据冲刷到数据存储库不会超过最大时间分散度:将数据冲刷到数据存储库以供下游分区摄取,并且更新数据结构以指示与数据项相关联的时间。

在前述方法的一种实现中,数据存储库包括持久数据立方体。

在前述方法的另一种实现中,被冲刷到数据存储库的数据项不一定是有序的。

在前述方法的另一种实现中,数据结构包括由多个上游分区中的每个上游分区可访问的表。

在前述方法的另一种实现中,该方法还包括:建立多个重排序缓冲器的时间分散度限制,每个重排序缓冲器与一个下游分区对应。

在前述方法的另一种实现中,该方法还包括:以预定时间间隔标识数据结构中的最旧时间戳,该最旧时间戳指示多个上游分区中的分区将数据冲刷到数据存储库的最旧时间;以及以预定时间间隔将包括最旧时间戳的正点事件传输给数据存储库以供多个下游分区摄取。

在前述方法的另一种实现中,该方法还包括:从数据存储库获取正点事件;重排序与下游分区对应的重排序缓冲器中直到正点事件中的最旧时间戳的数据项;将重排序缓冲器中的经重排序的数据项冲刷给数据消耗方,其中重排序缓冲器中的剩余数据项的时间分散度小于重排序缓冲器的时间分散度限制。

本文公开了一种计算机可读存储器。该计算机可读存储器具有被记录在其上的计算机程序代码,该计算机程序代码当由至少一个处理器执行时使该至少一个处理器执行一种方法,该方法包括:建立数据流从多个上游分区被冲刷到数据存储库的最大时间分散度;在多个数据冲刷器中的每个数据冲刷器中,从一个或多个数据产生方获取数据项,每个数据冲刷器对应于多个上游分区中的一个上游分区;确定将数据冲刷到数据存储库是否超过最大时间分散度;至少基于确定将数据冲刷到数据存储库没有超过最大时间分散度:将数据冲刷到数据存储库以供下游分区摄取,并更新数据结构以指示与数据项相关联的时间。

在前述计算机可读存储器的一种实现中,被冲刷到数据存储库的数据项不一定是有序的。

在前述计算机可读存储器的另一种实现中,数据结构包括由多个上游分区中的每个上游分区可访问的表。

在前述计算机可读存储器的另一种实现中,该方法还包括:建立多个重排序缓冲器的时间分散度限制,每个重排序缓冲器与一个下游分区对应。

在前述计算机可读存储器的另一种实现中,该方法还包括:以预定时间间隔标识数据结构中的最旧时间戳,该最旧时间戳指示多个上游分区中的分区将数据冲刷到数据存储库的最旧时间;以及以预定时间间隔将包括最旧时间戳的正点事件传输给数据存储库以供多个下游分区摄取。

在前述计算机可读存储器的另一种实现中,该方法还包括:从数据存储库获取正点事件;标识正点事件中的最旧时间戳;重排序与下游分区对应的重排序缓冲器中直到正点事件中的最旧时间戳的数据项;将重排序缓冲器中的经重排序的数据项冲刷给数据消耗方,其中重排序缓冲器中的剩余数据项的时间分散度小于重排序缓冲器的时间分散度限制。

V.结论

虽然上面已经描述了本发明的各种实施例,但是应当理解,它们仅通过示例而非限制的方式被呈现。(多个)相关领域的技术人员将理解,在不背离如所附权利要求所限定的本发明的精神和范围的情况下,可以在形式和细节上进行各种改变。因此,本发明的广度和范围不应受上述示例性实施例中的任何示例实施例限制,而应仅根据所附权利要求及其等同物来限定。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号