65.9K
CodeProject 正在变化。 阅读更多。
Home

实时分析大数据 #1

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.92/5 (51投票s)

2014年5月15日

CPOL

5分钟阅读

viewsIcon

49564

F1 如何开始使用 StreamInsight 向您的屏幕实时广播数据分析。

系列文章“实时分析数据”的第一部分 #1, #2

引言

本文基于我与 McLaren Electronic Systems、Formula 1 Management 的谈话和咨询,以及我自己在 Microsoft StreamInsight 方面的经验和公开信息。

观看 F1 比赛时,你是否曾想过,车内的所有数据是如何传输到你的电视屏幕上的,或者车队是如何根据比赛的进展来改变策略和做出决定的?如果你的答案是肯定的,那么请继续阅读……

汉密尔顿的对手罗兹伯格正在消耗更多燃油,而他们之间的差距也在不断更新。

背景

如今,大多数电视体育转播都伴随着大量的统计数据。无论是网球比赛中的发球速度,还是足球比赛中的跑动距离和传球准确率,及时将这些数据传递给观众正变得越来越重要,因为它极大地提升了观众的观赛体验。一辆平均的 F1 赛车包含大约 80,000 个 组件,并配备多达 300 个 传感器,通过 ECU 传输遥测数据,并通过无线电波发送出去。在一场比赛中,这可以产生 15 亿个数据点,即使经过压缩,也代表着几个 GB 的数据。

这是一个需要处理和分析的海量动态数据!

如果你是一个 F1 车队,如何管理和解读这些数据,可能决定你是做出能赢得比赛的战略决策,还是做出代价数百万赞助费的失误。而对于观众来说,知道你喜欢的车手正在追赶前方的赛车(由于燃油消耗过高而不得不减速以完成比赛),只会增加比赛的刺激感和理解度。

汉密尔顿是否会驶出维修区,面对一个空旷的赛道,还是会陷入交通拥堵,导致他损失宝贵的时间?

F1 使用 McLaren Electronic Systems 开发的名为 Advanced Telemetry Linked Acquisition System (ATLAS) 的系统,将赛车信息传递到赛道旁的天线,然后再传给维修站墙上的车队和电视广播公司。

ATLAS 系统组件

客户端连接到以太网骨干网,通过 TCP 和 UDP 接收信息。但这些是原始的非结构化数据,接收它们就像盯着水龙头,而有人正在打开水龙头一样。

转速、速度、档位选择、油门百分比、DRS 和 KERS 仅仅是传输和解释的一些数据源。

那么,有什么技术可以用来从这些海量信息中提取有意义的见解呢?事实上,面对类似的情况,您可以使用什么来为您的客户提供价值呢?

介绍 Microsoft StreamInsight

本赛季,F1 的广播公司开始引入一个使用 Microsoft StreamInsight 的新系统,该系统可以过滤原始遥测数据并从中提取有用的统计数据。例如,如果一个典型的燃油传感器每秒只测量当前油量,那么如果您已经知道体积和密度,就可以计算出流量或使用量。

StreamInsight 属于一类称为复杂事件处理 (CEP) 的应用程序,是微软提供的实时数据流处理解决方案。目前已更新至 2.3 版本,StreamInsight 是最易于配置和使用的 CEP 系统。

StreamInsight 应用程序架构

对于熟悉 LINQ 和 Observables 等概念的 C# 开发人员来说,将能够轻松地迁移他们的技能。此外,只要您拥有 Microsoft SQL Server 许可证,StreamInsight 就可以免费使用和部署。

由于 StreamInsight 是免费的,微软没有动力去销售它,这可能也是它鲜为人知的原因之一。但通过定制现成的 CEP 系统,我们可以利用那些原本会被忽略的数据和数据模式。

用更少的资源跑得更快

CEP 概念

所有 CEP 系统都共享一些共同的概念,如果您以前处理过数据库,那么这些概念应该都比较熟悉。以下是您需要了解的内容,以便将思维从静态数据查询转移到过滤动态数据。

事件流

任何数据序列,无论是静态的还是动态的,都可以被视为一个流。就像 FileStream(它只是一个字节序列)一样,汽车的速度可以表示为随着时间推移而增长的数字序列。为每个数据点打上时间戳,您就得到了一个复杂事件的时间序列,也称为事件流。

查询、过滤器、源和接收器

使用 SQL 等语言,我们可以查询数据库源表,并返回一部分数据给我们(接收器)。例如:

SELECT * FROM Speedometer WHERE lap = 10 

同样,对于事件流,我们可以使用 Linq 实时过滤源流,并将结果输出到新的流中。

var sinkEventStream = from datapoint in speedometerEventStream
where datapoint.lap = 10 
select datapoint; 

在此示例中,我们创建了一个名为 sinkEventStream 的接收器,每次有新事件进入源(speedometerEventStream)时,如果其“lap”属性为 10,则它会被添加到接收器中。

连接、窗口和分区

窗口本质上是对 静态 数据(SQL)的动态视图,或者是对动态数据(CEP)的固定长度视图。在 CEP 中,窗口可以是滑动(即连续移动)的,也可以是分段的(以离散的量移动)。

例如,假设我们有两个传感器向以下 SQL 表提供数据:

燃油液位

单圈时间

您可以使用 SQL 窗口函数连接和分区数据,以跟踪单圈的平均燃油量。

SELECT l.Lap , f.Fuel, AVG(f.Fuel ) 
OVER(PARTITION BY l.Lap  ) AS "Average Fuel This Lap"  FROM 
FuelLevel f
Join LapTime l 
on  f.Time = l.Time  

同样,使用 StreamInsight,我们可以连接流、对它们进行分组,然后根据时间或任意值对它们进行分区。

CepStream<Fuel> FuelLevel;
CepStream<Lap> LapTime;

var joined = from f in FuelLevel
                    join l in LapTime
                    on f.Time equals l.Time
                    select new LapAndFuel() { FuelLevel = f.FuelLevel, Lap = l.Lap};
                 

            var AverageFuelStream = from win in 
                                  joined
                                  group win by win.Lap into eachGroup
                                  from window in eachGroup.SnapShotWindow()
                                  select  new {Average = window.Avg(), Lap = window.Lap};

因此,本质上,StreamInsight 提供了与 SQL Server 相同的许多功能,并且具有一切都在实时发生的额外优势。将其与轻松调用其他子系统的能力相结合,您就拥有了一个可以监控数据并做出智能决策的系统的雏形。

速度和智能共同赋能领先?

未来文章

这只是对 CEP 和 MS StreamInsight 的简要介绍,但在未来的文章中,我计划演示一些实际示例,并描述您在现实生活中可能使用的各种工具和部署场景。

历史

  1. 创建
  2. 图片大小
  3. 文章系列链接
© . All rights reserved.