数据流建模及其对系统性能的影响

6 建模数据流的含义及其对系统性能的影响

数据驱动决策中对数据流内容的视角

6.1 引言

动态性和适应性是一般系统理论[1]中提出的系统的两个属性,使系统能够根据上下文变化进行调整。一方面,适应性指的是系统适应其环境以持续满足其目标的能力。另一方面,动态性与系统适应上下文变化的速度相关。这两个属性在系统性能以及管理可用资源[2]的能力方面都起着至关重要的作用。

全球化往往从经济角度建立起国家间的相互依赖,这意味着(除其他外)利益相关方之间必须保持持续的通信,以适当的方式维持这种联系[3]。在这方面,通信技术发挥了至关重要的作用,如今,与世界各地的人们进行通信对任何公民来说相当简单且易于实现。

从这个意义上说,决策过程已经发生变化,以适应全球化的情景,扩展其边界并转向分布式环境。边界的扩展使得能够融入与文化和社会因素相关的新视角和观点,同时分布式环境能够在参与者之间实现风险与责任分配,避免集中化,促进平衡且广泛的参与。

全球化环境需要对信息进行合理的协调,以确保每个利益相关方都能获得可用的信息,从而支持数据驱动的决策。在某些情况下,直觉对于应对不确定性很重要。然而,当能够获取足够的信息来降低不确定性时,这始终是更好的选择,因为每个决策都基于先前的知识或经验。信息协调意味着需要一定程度的同步,以确保每个部分都有足够的最新数据用于决策。

实时决策将所需的同步水平提升到了极致,这意味着每个决策应基于从数据源直接传入的最新已知数据。说起来容易,但实际上面临诸多挑战,包括:(i) 数据收集:获取每条数据的方式;(ii) 数据质量:涉及不同数据源方面的置信度、准确度和精度;(iii) 数据传输:指数据从数据源传递到决策过程中各个相关方的方式;(iv) 数据处理:指为支持决策而对每条数据进行处理的方式,需注意新数据持续到达且处理资源有限(如内存、处理器等);以及 (v) 决策过程:关注在分布式环境[4, 5]中所采用的决策模式。

数据流包含一种能够处理异构数据源的连续数据处理范式,这些数据源提供其当前的数据。数据源是自治的;它们可以生成到达速率随时变化且事先无通知的无界数据流。该范式假设数据流引擎能够接收不同的数据源,并以不同方式对其进行处理(例如综合、连接、分组等),目标是生成新结果或响应各种查询(无论是否预先计划)。然而,与传统数据管理的一个重要差集在于,在数据流中,数据在到达时被处理,之后被丢弃。也就是说,数据在到达时是有用且有价值的,因为它们描述了某一时刻的情况,但总会有最新更新的数据到来,需要被处理和分析,以描述被监控情况的演变[6, 7]。

物联网(IoT)是一种与异质性、微型、可用且廉价的设备相关的概念,这些设备可作为数据采集器,支持广泛的应用领域。这种多功能性因异质性本身所带来的复杂性而引发挑战[8]。也就是说,不同的设备将具有不同的数据格式、精度、准确度、可靠性等方面,这些方面在同一通过网络通信构建的采集策略下共存。除了异质性之外,考虑到此类设备的广泛应用,还面临与安全[9]、雾计算[10]、大数据[11]、区块链[12]等技术整合的相关挑战。物联网设备作为数据采集器所具备的多功能性和易用性,结合数据流的实时处理能力,为数据分析或监控应用等提供了理想的场景[13]。

作为主要贡献:(i)提出了独占式与协作式数据流,以对数据源的异质性进行建模,从而从一开始就区分针对每个数据源的预期行为及其相关的处理需求;(ii)展示了独占式与协作式数据流之间的转换模式,目标是实现二者之间的互操作;(iii)概述了协作式与独占式数据流之间转换模式所关联的潜在开销分析。

本章分为九个部分。第6.2节描述了与数据流环境相关的数据组织的一些方法。第6.3节介绍了关于数据流建模的文献系统映射。第6.4节阐述了在整个测量过程中使用框架的必要性。第6.5节综合了与处理策略相关的思想。第6.6节分别介绍了独占式与协作式数据流的建模。第6.6节介绍了在独占式与协作式数据源上的一些基本操作,而第6.8节分析了与此相关的处理开销。最后,给出了一些结论和未来工作。

6.2 流媒体中数据组织的当前方法

在[14]中,作者提出了一种从存储在云上的网页数据和/或传感器数据中重建数据流的架构。他们指出,其基本思想是利用网络上可用的大量数据,但由于这些数据没有关联的API,因此无法直接查询。因此,名为Sensorizer的架构能够通过容器获取来自网络的异构数据,这些容器能够将所有数据整合到一个集成流中进行发送。

文中引入了虚拟传感器节点的概念,目标是实现多个虚拟传感器,其中每个传感器与单一的网页内容相关联。因此,每个虚拟传感器节点可以关联大量异构数据源,这些数据源将根据所监控的网页内容提供数据。

在[15]中,作者综合了与实时数据处理相关的Facebook生态系统。在此上下文中,来自用户及其活动的数据会根据性能、容错性、可扩展性、正确性和易用性进行处理和分析。在这种情况下,所有处理模式都与来自不同系统的异构数据以集成方式相关联,因此原始数据流以及由此生成的数据流可能与不同的用户数据源相关。

到目前为止,先前研究中分析的数据流对应于通过一种被理解为数据流的共同媒介传递的异构数据。一方面,在[14]中,数据流通过从网络获取的数据进行集成,具体取决于容器和定义的转换器。另一方面,在[15]中,数据流由用户活动以及相关系统信息共同生成、消费和处理。在[16]中,提出了一种面向数据流系统的负载感知丢弃算法。然而,该研究将数据流理解为“元组”的无界序列,其中元组是一组(键, 值)对,可通过组合来支持复杂数据结构。也就是说,这种情况在数据流中引入了一定程度的结构化,而此前的研究并未对此建立明确的限制。这一点特别重要,因为在目前数据流这一概念上似乎并不存在同质性,但学术界普遍认同可将数据流简明地定义为一种无界数据序列。

在[17]中,数据流被称为实时数据的无界序列,其中数据被理解为一个元组。每个元组都具有描述某些方面的属性,以及一个表示时间戳的特殊属性。换句话说,数据流应按照其时间戳进行排序。这种元组的视角意味着一种二维视角,其中属性起到列的作用,而每个具有该结构的传输记录本身代表一个元组或记录。这种数据流的视角具有一定的层次。

从关系范式的结构化角度来看,会引发不同的问题,例如,当数据是与某一属性相关的似然分布时,(值, 似然)序列是作为一个元组传递,还是通过一组元组来表示?在第一种情况下,采用何种数据模型来解释数据组织?在第二种情况下,如何建立关系以表明所有元组属于同一个似然分布?在某些情况下,业务逻辑被嵌入到流式应用中,这意味着依赖于编写的代码而非数据含义,从而将数据层与处理层混合。后者带来了风险,因为这增加了层之间的耦合,而不是促进解耦,而解耦本应使应用程序维护更加容易。

在[18]中提出了一种用于会话的在线重建的模型,将批处理环境与数据流上下文相结合。来自日志的数据通过记录的形式被纳入,该记录表示与元组相似的语义。然而,在此情况下,作者并未将记录限制为二维的数据组织,而是可以整合来自日志的包含不同元素的记录。

在[19]中,介绍了一项与地理流相关的调查,将其描述为包含时空数据的数据流。然而,数据流被定义为来自主动源的持续更新的数据源。与之前的观点相比,一个有趣的差异是“主动源”这一术语,它明确强调了与数据生成器相关的推送机制,以及源中生成的数据与进入数据流引擎后的数据之间的独立性。由此得出的推论是,来自主动源的数据不是简单的数据,也就是说,它不仅仅是一个数字。相反,它是包含时间型和空间信息的复杂数据,这类数据在地理应用中非常有用。

在[20]中引入了Spark结构化流。该新模型将实时数据流模拟为一个不断增长的二维表。因此,元组的概念与一组属性或列相关联,而表格则由一组元组构成。这种新型表格的特殊性在于它没有终点,总会有新的元组或记录被添加。这一引入是对先前流式架构的补充,旨在提供用户便利并简化应用可能性。

在[21]中,基于服务器日志提出了一种会话重建模式。其基本思想是从不同的日志中收集数据,进行集成和处理,目标是重建用户会话,用于挖掘过程模型。在这种情况下,即使原始数据源处于活动状态,数据生成也并非主要面向低延迟模式。因此,需要对日志进行连续读取、处理和调整,以持续生成数据流。此外,数据流不一定由单一值组成,也可能包含半结构化内容。

在[22]中提出了一种名为IoTPy的库,其目标是帮助更简便地开发流应用程序。在此上下文中,数据流被定义为一个无界项序列,其中流本身无法以任何方式被修改。对数据流唯一允许的操作是在数据流末尾添加一个新项。该方案最初在两个方面与先前的提案存在差集:(i)第一点是该方案引用的是项而非元组。项是从物联网传感器收集的值,这意味着数据流是来自传感器的无界值序列;(ii)第二点指出每个数据流都与来自特定传感器的数据相关,这意味着仅会将该传感器的数据入队,而不会包含其他传感器的数据。

在[23]中,引入了一种用于检测数据流中重复项的哈希表数据结构。这一视角值得考虑,因为它需要理解每个数据流元素的数据组织,以判断其是否重复。因此,作者将数据流定义为符号的无限流,这使得其语义更接近Chandy提案[22]。也就是说,热罗谈论的是符号,而Chandy指的是项。这两者似乎都与之前其他提案中提出的元组概念或半结构化内容相对立。

6.3 数据流建模:当前趋势

为了识别与数据流建模相关的主要趋势,基于“数据流建模”作为主要术语开展了 一项系统映射研究(SMS)。实施SMS的步骤和程序在[24, 25]中进行了描述。

简而言之,系统映射研究(SMS)的基本步骤围绕六个阶段展开。第一阶段确定研究目标。第二阶段描述与既定目标一致的一些研究问题。第三步是定义检索策略,指明要查询的术语。第四阶段描述数据提取过程,通过该过程获取列入结果中的文章的描述性数据,获得有助于筛选的特征。在第五阶段,围绕提取的数据进行综合分析。最后,对结果验证进行监控。

在这种情况下,目标是从结构角度确定数据流的不同建模替代方案。也就是说,我们的思路是分析与数据流结构建模相关趋势,这些趋势出现在需要实时处理异构数据源的上下文中。

从既定目标中得出的研究问题(RQ)可以归纳如下:(1)RQ1:数据流具有何种数据组织形式?(2) 研究问题2:数据组织如何影响数据处理?一方面,与第一个研究问题相关的动机集中在结构(即数据组织)如何允许或将来自异构数据源的数据在同一流中进行联合集成;另一方面,第二个研究问题侧重于分析一种或多种数据组织对数据处理本身的影响。

通过这种方式,将目标与其相关联的研究问题共同定义后,便可以编写基本的检索字符串。因此,检索字符串为“data stream modelling”,并在Scopus数据库上执行检索。所考虑的文献包括2016年至2020年间发表的文章、书籍章节和会议论文,语言为英语,且属于计算机科学领域。这一点很重要,因为其基本思路是分析当前状况以及与来年趋势相关的早期出版物。表6.1汇总了在Scopus数据库上执行的检索字符串。

因此,共获得了30篇文献,并将其元数据导出至一个Excel文件中进行分析(例如,DOI、作者、出版信息、摘要和关键词)。随后,通过对每篇摘要的人工阅读,判断其是否适用于特定主题。这一过程至关重要,因为数据库的初始检索是语法层面的,也就是说,搜索引擎仅查找指定的特定术语,而不会分析每个词在上下文中的语义。因此,对摘要或全文的人工阅读是一个关键阶段。

在应用主要筛选条件(例如时间段)后(见表6.1),筛选阶段涉及确定保留与排除标准。在此情况下,纳入标准指的是那些明确描述数据流或实时数据处理中数据组织方面的文献。然而,会议主题报告,

示意图0

邀请报告和调查不予考虑,将被拒绝。因此,从最初答案中的30篇论文中,仅保留了10篇,其元数据汇总于下页介绍的表6.2中。

示意图1

值得注意的是,在十条记录中,仅有三条对应于会议论文,而期刊所占比例最高。这表明,就该主体而言,其相关结果在出版物上已具备一定程度的成熟性。

其思路是从形态学角度分析上述每篇论文如何处理数据流概念及其对数据流处理的影响。识别2016年至2020年间数据流建模的主要趋势尤为有趣,因为可以据此了解最近关于数据流建模的观点和替代方法,而无需依赖之前的解释。

Lughofer等人[26]提出了一种面向广义演化模糊系统的架构。其基本思想在于以敏捷的方式检测数据概念漂移,而无需使用额外的参数(例如,阈值)。数据以多维向量序列的形式被接收,并立即进行分析,采用一种基于增量方式的规则分裂方法,这意味着每个向量最多只被读取一次。

Lughofer[27]介绍了在线主动学习的进展、挑战和趋势,以及其与机器学习技术及其上下文之间的相互影响。将与经典的批量离线学习相关的视角与在线主动学习进行对比,揭示了二者之间的相似性与差异。在此背景下,数据流被理解为可采用不同技术以不同方式采样的数据序列。文中概述并比较了不同的学习技术。

Georis‐Creuseveau 等人 [28] 提出了一种面向空间数据基础设施的框架。在本研究中,数据收集策略基于在线问卷和半结构化访谈的采集。

示意图2 .)

6 建模数据流的语义及其对系统性能的影响(续)

Kamburugamuve 等人 [29] 描述了与数据管理相关的视角及其对 Apache Spark、Flink 和 MPI 等平台的影响。总体而言,他们指出这些平台通过图模型的不同变体来考虑数据及其处理,而数据本身则使用被称为弹性分布式数据集(RDD)的二维且不可变的数据结构(在 Spark 中)或 Flink 中的 DataSet 来进行概念化。数据流在整个处理流程中可能会发生变化,被视为元组的二维序列,作为一组操作的输入,也可能成为另一组操作的输出。

Koek 等人 [30] 分析了在并行环境下与数据通信相关的挑战。基本上,数据流被视为一系列原子数据(例如,整数),能够实现两个或更多任务(即操作符)之间的通信。他们提出了一种模型,用于在整个数据处理过程中协调数据流,并在操作之间实现潜在的自动并发。

Dubrulle 等人 [31] 提出了一个在生产者与消费者之间带有约束的建模数据管道的方案。该方案使用图论将消费者或生产者表示为边,其角色由弧的方向决定。当弧到达一条边时,该边将作为消费者消耗数据;而当弧从一条边出发时,该边则扮演生产者角色。可以使用注释来区分不同数据源之间的行为(例如数据频率)。此外,还提出了与数据融合相关的挑战,即如何统一来自一组异构数据源所产生的数据。

Meinig 等人 [32] 研究了识别分类区域违规的挑战。为此,使用服务器日志作为输入。然而,由于每个日志相关的异质性及不同的数据格式,需要进行数据转换阶段。在这方面,作者主要描述了将每条日志中的非结构化原始数据转换为可用于生成模型的结构化数据组织所必需的操作。因此,原始数据被转换为遵循元组结构的、结构化且二维的数据序列,其中元组通过属性集进行特征化。

Masulli 等人 [33] 描述了与大数据环境相关的挑战、其随时间的演变以及模糊逻辑的作用。他们区分了两个维度:数据本身和内容。一方面,数据指的是被记录的事实,即那些需要在组织中保存以供未来使用的记录。另一方面,内容涉及数据含义、其作用以及对知识的影响。作者重点强调了开发面向数据流建模的工具的必要性,这一方面在过去一段时间中已变得尤为重要。有关更多细节,可以从作者的角度分析非平稳数据流聚类[34]和跟踪时间演化数据流[35]的有趣观点。

查德利等人 [36] 提出了不同的方法,用于处理与业务流程及其相关挑战共同出现的数据流围绕异常检测(例如,缺失值)。该工作涉及数据流中嵌入的数据项,这意味着在进程之间流动的、组织为列集合的元组序列。他们分析了使用数据流矩阵来研究这一挑战的方法,同时利用 Petri 网对进程间交换的数据流进行异常检测。

Mackie 等人 [37] 提出了一种数据流模型。他们讨论了用于表示在网络中传输的数据的令牌。该序列的基本思想与在先前确定的计算组件之间通信的数据原子序列相关联。

6.4 测量:框架的必要性

可以将测量定义为这样一个过程:需要通过一个或多个有助于表征的属性,对正在分析的对象或主体进行量化。测量包含一种量化模式,其核心思想是将获得的值与某个已知模式进行对比。例如,测量一个人的身高需要以米作为参考模式,测量一辆汽车的重量则需要了解千克的概念,依此类推。这些例子指出了两个不同的挑战:一方面,需要量化与对象、主体或概念相关的若干特征;另一方面,需要拥有可用于比较的参考模式。

这些挑战促使我们提出诸如“为什么需要进行测量?”以及“为什么需要将结果与某种模式进行比较?”之类的问题。从本能上讲,人们倾向于分析周围出现的每一种行为、现象、对象、概念和/或主体。人类的演变要求深刻理解整体上下文、各种交互形式,以及随着时间推移每个角色所发挥的作用。在我们的世界中,量化的重要性很早就被发现,它是一项与各类活动进步相关的关键资产,例如,了解冷与热、便宜与昂贵、高与低、重与轻的概念。

人类最早发展的概念之一就是数字。该概念满足了对上下文中可用的每个对象进行计数的需求(例如,食物)。这便是量化最初被用于了解可用事物数量的方式。然而,比较先前值与当前值的需求逐渐成为一种必要。也就是说,在能够通过一个数字表示某个概念(例如,动物)所对应的可用事物数量之后,现在需要知道当前的数量是否比以前多。因此,量级之间的比较成为一个自然过程[38]的一部分。

因此,我们测量的目的与量化特征相关,而从每个量化值中则采用一种比较模式确定一个概念是否增加。之所以需要比较模式,是因为有必要建立一种通用且统一的参考标准,以便任何需要与某个概念进行类比的人都能使用。例如,创建公制系统等正是出于这一原始动机之一。

如今,测量作为一种过程被应用于不同领域,可以被视为一种横向且非独占的实践。事实上,从计算机科学到生命科学,测量过程可用于不同的概念,分别如处理器温度和心率。这一特点构成了一大优势,但同时也带来挑战,因为能够在不同领域部署的能力意味着必须应对异质性,而这直接影响问题的复杂性。试想在不同情况下可能使用的各种设备、相关的准确度、所需精度、方法等。这引出了每次测量过程所处的背景,即所使用的仪器、方法以及研究中的概念并非孤立于世界之外,相反,它们都嵌入在特定环境中,彼此相互影响。

到目前为止,值得指出的是,测量侧重于需要与特定模式进行比较的量化,而这种量化会受到环境的影响,并受所涉及的异质性制约。然而,看似简单的事情在实施时并不总是 trivial 的。例如,可以尝试使用体温计来测量一个人的体温,但将设备置于耳部内部区域进行测量,与从腋下区域进行测量,是两个截然不同的过程。即使在相同的环境条件下使用相同的设备,结果也可能因所采用的方法[39]而有所不同。这一点非常重要,因为测量的本质在于值的可比性。

通过这种方式,可以认识到测量以量化某个概念的意图涉及一组相关约定。换句话说,需要与描述该概念的特征共同确定与测量相关的概念。从描述性特征出发,应定义每个定量值的获取方式。此外,考虑到需要根据作为参考的模式来确定演变水平或非演变水平,制定随时间使各数值具有可比较性的策略至关重要。

当今世界及其相关经济需要尽可能敏捷的测量过程,趋向于比以往更接近实时数据处理。当前交易发生的分布式、异构、动态、不可预测且未充分探索的环境,带来了一系列额外条件,必须予以满足才能确保可比性[40]。例如,基于不同市场测量股票变动的事实可能并不可行直接可比较的,因为每个市场可能具有特定的特点(例如,波动性、法规等)。

由于测量过程的预计时间,目标是采用一种尽可能可扩展、可靠且稳定的敏捷替代方案。因此,测量过程的自动化对于政府、企业和各类组织而言至关重要,这些组织需要优化不同的预算以实现各自的目标。

在实施测量过程之前,有许多概念需要达成共识,例如度量、测量、测量法、尺度、单位、方法等概念及其相互之间的关系。这是一个重要的方面,因为如果两个人对“度量”这一概念的理解不同,则值的可比性将直接受到影响。

因此,在实施或自动化任何测量过程之前,共享并就整个过程中要使用的概念达成一致,对于确保系统的整体可靠性至关重要[41]。图6.2 概括了测量过程中所涉及概念的全局视角。

示意图3

从上图可以看出,待监控的概念(即图6.1中的实体)需要通过一组属性(例如心率)来描述。这意味着对给定实体所要分析的方面采用离散表示。此外,该实体处于一个上下文中,上下文通过上下文属性(例如环境温度)来表征。后者表示对每个待监控概念所处环境特征的离散解释。属性和上下文属性被共同研究,以分析它们之间的相互影响。

每个属性或上下文属性都通过一个度量进行量化。每个度量都有其期望值域、相关尺度、单位、用于获取定量值的方法、与该方法配合使用的设备等。从度量中获得的数值称为测量。此定义至关重要,因为它能够判断两个测量是否具有可比较性。例如,前述关于测量体温的例子会得出不可比较的测量结果,因为该度量使用了不同的方法(即腋下法与耳内法)。

然而,每个测量仅表示一个数值,但并未说明如何解释该值。为此,目标被纳入指标的概念中。指标消耗一个或多个测量,并结合基于实体状态和当前场景的必要决策标准,以在上下文中分析其量级。每种解释都会提供相应的解释,但对于应采取的行动方案则没有太多说明。

决策者根据专家的先前经验和知识对测量项目中每个指标的解释进行审查。因此,能够提供一些建议和/或应采取的行动方案。例如,它可以向实体1发送警报,指出心率与环境温度之间的关系接近危险阈值。

如前所述,先前经验在不同的活跃项目定义之间是共享的,甚至可能每个实体根据其项目定义而有所不同,并具有不同的已定义状态和场景。当目标是实现测量过程的自动化时,所有这些异质性和复杂性都需要以一种一致的方式进行定义,以便人类和机器都能解释。

这只是对与测量过程相关的概念的一种解释,很可能存在其他变体或定义。无论何种情况,关键资产在于每组定义都应是明确定义且有序的,以便任何需要使用它的人能够理解、交流和共享。这一点正是框架至关重要的地方。测量框架必须提供所有术语和概念,以及实施测量过程所必需的所有可用关系。例如,一种可行的形式化方法是通过本体来实现,使其可交流且可处理。

因此,一旦确定了框架,测量过程就可以通过自动或手动的方式有效实施,以确保过程的可重复性、可扩展性和一致性。可重复性是确保能够按照相同的测量过程定义获得新的测量结果的关键方面。可扩展性指的是在保持向后兼容性的前提下,增加新需求或更新已有需求的可能性。一致性意味着对项目定义所做的任何更改都不会对测量结果的可比性产生负面影响。

6.5 选择处理策略

在整个处理链中选择数据开始被修改、汇总或以任何方式转换的节点,对整个数据收集策略具有巨大影响。也就是说,一种情况是在同一采集设备上处理数据,而另一种情况是在远离数据采集器的中央虚拟单元中处理数据。第一个差异在于每个位置(即在中心还是靠近数据源处)所需的计算能力,而第二个方面则是数据传输路径。数据距离数据源越远,数据流量以及网络资源消耗就越大。

与数据处理起始位置相关的每个决策都有其优缺点。一方面,当数据处理靠近数据源时,网络中的数据交换量会减少,但移动设备上的处理需求和存储容量会增加。此外,数据处理需要在一定程度上独立于其他数据源,也就是说,尽可能靠近传感器进行数据处理的理念意味着对不在同一处理点的其他传感器具有较低的依赖性(即耦合度)。另一方面,使用公共处理点进行数据处理意味着可以采用统一逻辑,并获得此前不可用的数据收集和处理策略的全局视角。然而,这种方法会导致网络数据流量增加,因为所有传感器都需要持续地将待处理数据发送至处理单元,从而消耗大量资源,并引入与传感器到处理单元之间数据传输时间相关的延迟。

在确定处理和存储位置的可行点时,需要在消耗的资源、处理相关性、业务需求、处理以及可用通信技术之间取得平衡。因此,根据全局数据处理策略,处理可以尽可能靠近传感器进行分布式部署,或者相反地集中在公共处理点。此外,当决定采用分布式处理时,可以将其置于传感器与主处理单元之间的某个中间点,或者 alternatively 尽可能靠近数据源。本文将讨论这些替代方案,以对比每种方案的优缺点。

6.5.1 集中式数据处理方法

这种方法包含一个中央单元,能够以集成方式处理数据,并从不同的数据源收集数据。应用程序逻辑与处理单元集成在一起,共享可用资源以实现其功能。

在这种环境中,传感器价格低廉、易于获取、可用且容量有限,由于其主要功能是收集数据本身,因此很容易被替换。乍一看这似乎是好事,但如果需要在传感器中进行某种本地处理,这实际上是一种限制。因此,设计传感器的主要用途及其在整个数据收集策略中的预期作用非常重要。由于在此架构中传感器的资源有限,它们会在获取每个值后立即传输所有数据,从而增加传输的数据量。如果网络出现问题,这类设备将由于处理和存储容量不足而丢弃数据。

每个传感器都独立于处理单元,不了解全局处理逻辑的任何方面。每个传感器仅感知其直接的采集环境,将其行为限制在本地数据收集中,甚至并不总是自治的。这意味着传感器本身并不总能通过自身介质收集数据,而需要与提供能源的另一设备连接。例如,DS18b20传感器能够测量温度,但前提是必须连接到如 Arduino One[42] 之类的处理板。

一方面,数据处理的统一提供了全局视角,使得能够将应用程序逻辑与分布在各个现场的数据语义进行关联。另一方面,由于来自异构数据传感器的所有数据都在一个单一节点被集中接收,必须进行解释、某种形式的转换以及其他与传感器类型和相关数据格式相关的处理,从而增加了复杂性。因此,这些额外的功能由中央处理单元承担,导致整体处理时间增加。

6.5.2 一种分布式数据处理方法

从这个角度来看,应用程序逻辑的全部或部分被分布到构成处理架构的所有组件中。处理单元并不位于某个固定的位置,相反,它分布在构成该架构的各个组件之间。这使得承载业务逻辑的处理能够尽可能并必要地靠近数据源。一方面,由于部分处理发生在采集设备附近,从而减少了传输的数据量;另一方面,这也增加了在数据采集策略中协调的需求,以避免出现孤立的风险。

由于每个数据采集器都需要具备一定的自主性和处理能力,因此需要配备某种本地缓冲区以及数据处理的可能性。例如,在此架构中,可以使用 Arduino Mega 开发板或树莓派连接其他传感器,并负责收集所有连接传感器的数据。也就是说,与之前的架构不同,此时集中设备负责用于通知和处理一组传感器(即 Arduino 或 树莓派)的测量集合[43]。

这种在传感器集中设备中集成存储和处理能力的可能性,使得能够在靠近数据源的位置生成部分结果,从而根据监控需求及早检测到不同的风险(例如火灾与洪水)。

该分布式环境中的一个挑战是如何在各组件之间分配和平衡应用程序逻辑,并区分每个组件所扮演的角色(例如,收集器、网关、处理器和分析器)。另一个不容忽视的方面是组件相关的异质性,这将直接影响工作负载的分担方式。需要强调的是,即使由于本地处理导致与测量相关的数据量减少,但与协调以及部分结果生成时间相关的处理开销却增加了。

示意图4

图6.3 从采集的角度综合了数据处理的总体视角。图6.3(a) 表示一种集中式采集行为,其中传感器仅提供数据,处于被动角色。通信在传感器与中央处理单元(CPU)之间直接建立,而中央处理单元最终可能通过云资源实现部分或全部虚拟化。在此场景中,用户向 CPU 发送查询以获取最新数据。

另一方面,图6.3(b) 示意了一种分布式采集行为,其中传感器通过一个收集器进行通信。收集器是一种具有一定程度存储和处理能力的组件,能够与其他收集器以协作和分布式的方式工作。因此,采集策略在全局上是分布式的,同时在每个收集器中保持一定程度的自主性。在这种情况下,传感器可以与收集器交互,表现出主动行为,并参与对用户的响应。此外,收集器可以在云中使用虚拟化资源来实现其全部或部分功能。

表6.3 有助于补充图6.2,建立集中式与分布式数据采集策略之间的比较视角。在集中式策略中,数据流是单向的,因为传感器仅提供测量值,不具备交互能力;而在分布式环境中,每个收集器都能与传感器进行交互(例如,查看当前状态),并能够交换自身或其他收集器的测量值(即间接传输)。如前所述,由于收集器具备资源和协作能力,数据处理和业务逻辑在分布式环境中是分布式的,而在集中式架构中则局限于唯一的位置。因此,在集中式架构中,传感器仅提供测量值;而在分布式环境中,它们还能够交换处理结果、元数据(即关于其他数据的描述)等。显然,传感器在集中式环境中的行为是被动的(即仅作为数据提供者),而在分布式上下文中则是主动的。响应查询的可能性是另一个显著差异:分布式环境能够利用收集器提供近似数据,而集中式环境只能由中央处理单元回答,但具有对数据的完全可见性。最后,由于收集器具有一定的自主性,它们负责获取和报告数据(例如,在缺失值的情况下,可以检测并纠正问题,排除校准错误或估计一个值);而在集中式上下文中,数据的唯一责任方是传感器。因此,需要指出的是,参与集中式数据采集策略的传感器比分布式环境中的传感器更便宜,因为后者需要更高的协调性和自主性,从而导致其成本增加。

示意图5

关于在数据收集策略中使用何种架构的决策将基于一组需求。在这方面,需要强调的是,并不存在适用于所有环境的理想架构,而是有不同的架构可能更适合或不适合特定上下文,具体取决于实际需求。数据收集策略的关键在于明确被监控实体是什么、被监测特征有哪些、特征之间的关系如何、测量值的获取方式,以及在给定场景和实体状态下如何解释每个值。换句话说,数据收集策略应由一个测量框架支持,并且所有组件(即传感器、收集器等)都应与之保持一致。

6.6 建模数据流的内容

一般来说,数据流可以表示为无界数据序列。然而,这一定义中的模糊之处与数据的来源和语义有关。一方面,通常假设该无界数据序列源自一个唯一的、无法控制或施加影响的数据源;另一方面,第二个假设涉及数据的语义,即数据可以是随着时间提供的某种单一类型的值及其相应的变体,或者也可以理解为一种具有特定结构(例如元组)的数据结构随时间持续提供。

数据的来源以及所提供的数据结构在任何测量过程中都具有特殊意义,因为原始数据结构直接影响可追溯性和可靠性,而所提供的数据结构则直接对内容本身及测量过程的目标产生影响。因此,就这两个方面达成共识是促进任何量化过程可重复性、可扩展性和一致性的关键资产,该量化过程需要在一组给定的决策标准下,结合指标来解释值。

这种在来源(或数据源)与无界序列相关联的数据结构之间的区分,有助于引入协作式与独占式数据流的概念,这些概念将在接下来的章节中分别进行说明,以对每种替代方案进行建模。

6.6.1 独占数据流

独占数据流被定义为具有自治的、简单的和独立数据源的领域已知原子数据的无界序列。

当定义指向一个序列时,它表示一个有序数据列表,该列表遵循代表数据生成顺序的时间戳。因此,这种顺序与生成时间本身存在关系,同时依赖于数据源和被监控事件。换句话说,与“序列”相关的基本思想是持续接收与某一事件相关的更新情况,而不是零星的数据。

与“无界”相关的指示侧重于数据量,且事先未对其设定任何限制。因此,其理念是提供关于某一事件所需的尽可能多的数据,数据生成没有固定的界限,数据速率则取决于数据源。这一点非常重要,因为无法预先确定数据的大小,甚至无法预测其到达的节奏。更进一步说,这种节奏可能完全可变,意味着数据速率会随着时间变化而改变,且没有任何预定义周期。

原子数据与在分析中的唯一概念或语义的单一值表示相关联,且该值是不可变的。因此,被监控的语义不会随时间改变,例如,如果设备测量环境温度,则仅通过此流传递该概念。原子性类似于关系模型,意味着每个时间戳只传输一个单一值。它可以对应数字、位置、字节等,但最终始终仅为一个单一值。

与每个已知单一值相关的值域事先已知且不可变。也就是说,通过定义的数据类型以及约束集合来确定正常和预期值范围。任何更改数据流相关值域(即数据类型或约束)的尝试都将意味着对其进行重新定义。

根据定义,数据源应是自治的、简单的和独立的:(1)自治是指数据源应能够独立运行,不受读取其值的主体影响,采集方法依赖于设备本身;(2)简单是指每个值都有唯一的来源,这直接影响设备的可追溯性;最后(3)独立是指它不受外部源的影响。

属性表示与需要监控的某个概念或事件相关的、待量化的概念。公式(6.1)将集合“A”定义为一组潜在属性:
$$
A = { a \mid a \text{ is an attribute} }
\quad (6.1)
$$

公式(6.2)描述了从一个属性中获取值的方式。也就是说,给定一个属性,可以通过一个函数定义一种方法,该函数能够获取一个值(例如,一个测量值)。集合“M”表示所有的值通过对给定属性应用函数而获得的结果。结果的类型将取决于所定义的函数类型和所使用的方法:
$$
M = { m \in D \mid m = f(a), \forall a \in A }
\quad (6.2)
$$

方程(6.3)形式化地定义了一个独占位置数据流,表示属性“a”上的无界值序列是基于每个获取值的到达(即“i”的某个值)顺序进行排序的,并采用公式(6.2)中定义的函数。然而,该数据流包含的是没有时间戳的单一值。顺序的概念仅限于位置,假设元素 $ m_i $ 在 $ m_{i+1} $ 之前,并以此类推依次排列。
$$
\forall a \in A, i \in \mathbb{N}: S^{ex} p = f(a)_i, f(a) {i+1}, f(a) {i+2}, \ldots = { m_i, m {i+1}, m_{i+2}, \ldots }
\quad (6.3)
$$

根据公式(6.2)中定义的值域“D”,可以处理数值型、类别型或序数型数据流。独占数值位置数据流仅包含数值。独占类别位置数据流包含作为文本的类别值。最后,独占有序位置数据流包含序数值。序数值可以用数值集合表示,其中数值代表某种顺序,而不一定是大小;或者也可以用文本表示。

例如,假设所选属性是人的体温,并通过某种设备获取一个值,即一个独占数值位置数据流,如不等式(6.4)所示:
$$
S^{ex}_p(\text{Corporal Temperature}) = { 36.0, 36.1, 36.1, 36.08, 36.07, 36.06, \ldots }
\quad (6.4)
$$

略有不同的是与颜色感知相关的独占类别位置数据流,其以文本形式表示,如方程 (6.5)所示:
$$
S^{ex}_p(\text{colour}) = { \text{Red}, \text{Blue}, \text{Yellow}, \text{Red}, \text{Green}, \text{Pink}, \ldots }
\quad (6.5)
$$

根据分析,独占序数位置数据流可以通过文本(见方程(6.6))或数字(见方程 (6.7))来表示。例如,假设温度的值由一个指标连续地解释为以下值之一:1. 低温,2. 正常,3. 发烧,4. 高烧:
$$
S^{ex}_p(\text{体温}) = { \text{正常}, \text{发烧}, \text{发烧}, \text{发烧}, \text{高烧}, \ldots }
\quad (6.6)
$$
$$
S^{ex}_p(\text{corporal temperature}) = { 3, 4, 4, 4, 5, \ldots }
\quad (6.7)
$$

方程(6.8)定义了一个独占时间数据流,该数据流基于属性“a”以及时间戳“t”,描述了一个无界的数据值序列。该值和时间戳均与监测属性相对应,也就是说,属性“a”的值 $ m_i $ 在时间 $ t_i $ 被获取,它们需要被视为一个有序对或向量。这类数据流的一个重要特征是时间戳的强制存在,即对于有序对 $ (m_i, t_i) $,$ m_i $ 的值可能缺失,但时间戳必须始终存在,否则该有序对将不被考虑,因为这将直接影响如下公式所示的顺序原则:
$$
\forall a \in A, t \in T, i \in \mathbb{N}: S^{ex} t = (f(a)_i, t_i), (f(a) {i+1}, t_{i+1}), (f(a) {i+2}, t {i+2}), \ldots = { (m_i, t_i), (m_{i+1}, t_{i+1}), (m_{i+2}, t_{i+2}), \ldots }
\quad (6.8)
$$

类似地,根据公式(6.2)中集合“D”内的定义类型,排他的时间型数据流可以衍生为数值型、有序或分类数据流。

特别是,在测量项目中,顺序构成一个重要方面,因为每个值到达的顺序可能根据所进行的分析类型而具有决定性作用,例如,用于确定一个人是否发烧。如果某些项目不需要指定顺序,则可以将定义顺序的组件(无论是位置还是时间戳)提取出来,从而统一公式(6.8)和(6.3)。因此,独占数据流是在属性“a”上的一个无界序列的单一值,以连续方式使用公式(6.2)中定义的函数(在公式(6.9)中通过累加撇号字符表示),但并不一定意味着处理时需要遵循特定顺序。
$$
\forall a \in A: S^{ex} = f(a), f(a)’, f(a)’‘, \ldots = { m_i, m’_i, m’‘_i, \ldots }
\quad (6.9)
$$

在其他类型的数据模型中,例如关系型或列式数据模型,集合的范围是有限的,这意味着每个集合可能大到必要程度,但最终都有确定的大小。这些集合可以通过不同的操作符进行处理,这些操作符可大致分为非阻塞型或阻塞型。非阻塞操作(如关系代数中的投影)允许在不引入延迟的情况下继续数据处理。然而,阻塞操作(如SQL中的“排序”)在操作完成之前不会提供结果。换句话说,直到阻塞操作的结果可用并能作为执行计划中下一个操作的输入时,数据处理才会继续。

到目前为止,已引入了位置独占数据流和时间独占数据流。每种类型中,根据所定义的域,可能存在与数值型、有序或分类值相关的变异。

已知处理数据流中数据子集的一种方法是通过窗口[44, 45]。窗口表示通过对无界数据流施加限制而生成的有限数据子集。

由于位置数据流没有与时间相关的概念,我们将到达时间定义为数据到达处理单元的瞬间,且该时间与数据的生成时间无关。到达时间(即公式(6.10)中的“at”)取决于处理单元首次接触到该数据的时间,且它与监测属性或接收到的值的类型无关:
$$
\forall s \in S^{ex}_p \land i \in \mathbb{N}: t = at(s_i) \land t \leq RTS
\quad (6.10)
$$

基本上,给定一组位置独占流以及属于该集合的流“s”,可以通过 $ at(s_i) $ 获知元素“i”到达处理单元的到达时间,从而获得一个等于或小于本地时钟参考时间戳 (RTS)的时间戳。在此需要指出的是,该时间戳与数据生成时间无关,而是与元素到达处理单元的时间相关。

因此,物理窗口是基于时间的,其针对独占数据流的定义在公式(6.11)和 (6.12)中进行了综合:
$$
\forall s \in S^{ex}_p \Rightarrow \exists w_T \subseteq s = w_T: RTS - \text{wishedTime} \leq at(s_i) \leq RTS
\quad (6.11)
$$
$$
\forall s \in S^{ex}_t \Rightarrow \exists w_T \subseteq s = w_T: RTS - \text{wishedTime} \leq t_i \leq RTS
\quad (6.12)
$$

公式 (6.11) 表明,时间窗口“wT”(“s”的一个子集)将包含在RTS与 RTS-wishedTime之间到达处理单元的数据值,其中“wishedTime”是一个相对的时间型量值(例如,1分钟)。相反,公式 (6.12) 定义了窗口“wT”将包含其生成时间戳落在区间[CTS-wishedTime; CTS]内的数据值。

逻辑窗口基于数据量,这意味着根据阈值(例如1000)保留一定数量的元素。窗口内元素的数量用基数表示(例如 |w|)。从公式(6.13)和(6.14)可以看出,定义上没有结构差异,尽管每个集合中的元素不同(位置型单一值与基于时间的有序对):
$$
\forall s \in S^{ex}_p \Rightarrow \exists w_L \subseteq s = w_L: |w_L| \leq \text{Threshold}
\quad (6.13)
$$
$$
\forall s \in S^{ex}_t \Rightarrow \exists w_L \subseteq s = w_L: |w_L| \leq \text{Threshold}
\quad (6.14)
$$

正如所介绍的,物理窗口基于时间,而逻辑窗口则受限于数据量。然而,可以更新滑动窗口和里程碑窗口的定义,这些定义涉及每个窗口更新其内容的方式。滑动窗口保持既定的限制,但会更新其边界,以用新元素替换旧元素。对于物理窗口而言,它可以指示窗口需要包含最近5分钟的数据。使用当前时间戳(CTS)更新公式 (6.11)和(6.12),则滑动窗口定义如公式(6.15)和(6.16)所示:
$$
\forall s \in S^{ex}_p \Rightarrow \exists w_T \subseteq s = w_T: CTS - \text{wishedTime} \leq at(s_i) \leq CTS
\quad (6.15)
$$
$$
\forall s \in S^{ex}_t \Rightarrow \exists w_T \subseteq s = w_T: CTS - \text{wishedTime} \leq t_i \leq CTS
\quad (6.16)
$$

与公式(6.11)和(6.12)不同的是,上下端点是可变的,因为它们会随着当前时间戳不断更新。根据定义,数据可能在某一时刻存在于窗口中,但只有随着时间的推移才会被丢弃。当然,公式(6.15)和(6.16)之间的保留准则仍然不同,这是因为位置数据流使用数据到达时间,而时态数据流使用数据生成时间。

对于逻辑窗口,可以定义类似“最后1000条”的内容。因此,窗口大小保持不变,但每次有新数据到达时,会添加新数据并丢弃最旧数据,以保持其内容的更新。

或者,可以定义类似这样的里程碑窗口:通过事件的发生来更新定义窗口的一个端点(即初始点或结束点),而窗口的内容所关联的数据量则是可变的。例如,事件可以是工厂事故(即里程碑),每次发生事故时,窗口内容都可以重新开始,如公式(6.17)和(6.18)中所述:
$$
\forall s \in S^{ex}_p \Rightarrow \exists w_T \subseteq s = w_T: \text{milestone} \leq at(s_i) \leq CTS
\quad (6.17)
$$
$$
\forall s \in S^{ex}_t \Rightarrow \exists w_T \subseteq s = w_T: \text{milestone} \leq t_i \leq CTS
\quad (6.18)
$$

示意图6

图6.4 以图形方式描述了此前通过公式(6.1)到(6.18)引入的独占数据流的主要视角。位置数据流对应于按其到达顺序组织的单一值,并最终从其处理单元给出的到达时间获得时间概念。也就是说,每个位置数据流中的时间戳对应于数据处理单元读取该数据的时刻。而时态数据流则可以被视为一个有序对,其中每一对由与某个概念相关的测量值或数值以及该值或测量从数据源获取的时间戳组成。这在数据可追溯性方面是一个关键差异,因为时态数据流能够建立数据与其生成时刻之间的关系,相反,位置数据流的时间戳是根据其处理顺序推导出的人工时间戳。

数据流子集的概念通过窗口这一概念进行建模。窗口可以是物理的或逻辑的,以滑动或里程碑式的方式更新其内容。无论如何,数据可能在某个时间段内属于特定窗口;但这些数据很快将被丢弃,并由新数据取代。这正是数据流的核心特征之一:保持内容尽可能更新,以便处理或分析当前或最新已知数据,从而支持决策。

数据连接或匹配操作可以通过数据值、其位置或给定的时间戳来执行。甚至可以同时处理时间型和位置型数据流,只需确定数据将如何交叉即可。根据所选操作的结果,将生成一个新的数据流;然而,结果不一定严格具有时间性。也就是说,如果处理单元基于位置对图6.4中描述的数据流进行匹配,则第一个结果将是 (36.0; (36.0; to))。“to”的值表示最后一个36的生成时间,而不是第一个36的传递性生成时间。该时间戳是相关数据项独占的,并且与其他数据之间不具有传递性。因此,在此示例中,新的数据流将包含部分来自数据源的数据生成时间戳,同时能够为位置型数据引入到达处理单元的时间(即((36.0; at0);(36.0; t0)))。

6.6.2 协作数据流

与协作一词相关的基本概念是使用一个共同的载体来同时传输不同的概念,以优化资源利用并减少空闲时间。对于数据通道而言,理想的情况是使其尽可能接近100%的容量运行,但要避免溢出。溢出是指数据产生速率超过了数据传输的通道容量,从而导致数据源中的数据丢失。

协作数据流被定义为与一个或多个自治的、简单的和独立的数据源相关联的、在收集器概念下聚合的、具有给定不可变的已知数据结构的无界组合数据序列。

收集器的图示表示一个组件,其中一组数据源通过该组件作为中介与处理端点进行充分通信。数据源持续向收集器提供值,而收集器则定义数据传输策略,综合表达所有数据源的共同需求。换句话说,在数据源和收集器之间存在两种不同的角色。一方面,数据源负责提供数据(例如,测量值、图像和音频);另一方面,收集器负责本地存储接收到的数据,按照目标数据格式融合数据并保持其语义不可变,向处理端点提供传输服务,并基于本地数据为用户提供近似答案(例如,边缘设备)。
$$
\forall a \in A, j \in \mathbb{N}: \tilde{a} = { a_1, a_2, \ldots, a_j }
\quad (6.19)
$$

公式(6.1

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值