当下,随着物流供应链的不断发展,冷链物流正变得越来越重要。通过数字化、平台化和生态化的智慧冷链监管平台,企业可以更好地掌握运输车辆的位置,及时发现并处理异常事件,有效提升客户满意度和信任度,同时也有助于降低冷链运输成本,提高企业市场竞争力。在这一背景下,某冷链项目利用追溯技术和监控预警功能,可以实现对冷链运输各个环节的高效监管,提高运输安全性和产品质量,为冷链运输行业带来极大的赋能作用。
异常事件预警
在具体业务中,轨迹数据的传输形式主要有两种,正常情况下设备会实时向服务端推送数据,但当设备无信号时就会出现离线数据,车辆联网后会将离线数据再次进行推送。利用这些推送数据,我们需要计算运输车辆超时停车预警。
这一需求实现的难点在于实时数据计算停车停留时间后,离线数据上传,离线数据可能存在实时数据的中间,所以停留时间需要重新计算,数据量大,计算量大,复杂度也高,准确性低。
我们的解决方案是:
- 对于实时数据,可以直接计算每个轨迹点的停留时间,并根据预设的超时阈值进行判断,是否需要发出超时停车预警。同时使用 Redis 内存数据库或者是使用分布式缓存系统进行缓存优化,将计算结果进行缓存,避免重复计算;
- 对于离线数据,可以在车辆重新联网后,将离线数据与实时数据进行合并,并根据时间戳进行排序,从而保证数据顺序的正确性。然后根据新的轨迹点数据重新计算超时停车预警,避免离线数据对预警结果造成影响。
在原有方案中,我们通过对已接收的数据进行实时计算,以此确定每个轨迹点是离线还是在线状态。但这一方案存在两点缺陷:
- 由于计算数据量较大,导致接收数据存在延时问题
- 因有离线数据,需要考虑离线数据与实时数据结合,可能有超时停车的情况出现,导致计算量复杂程度倍增
后面经过数据库选型,我们选择了时序数据库(Time Series Database) TDengine 存储车辆轨迹数据,它能够很好地实时分析并记录车辆的位置、速度和行驶方向等信息,为 B 端客户提供实时车辆运输位置跟踪。
TDengine 流式计算
时序数据通常都是实时产生的,需要实时存储和分析,TDengine 作为一款面向时序数据的高性能数据库,对时序数据的处理正是它的强项。相比于传统的关系型数据库,TDengine 采用了列式存储和压缩算法等技术来提高数据存储和查询的效率,从而可以更好地满足高频率、高容量、高并发的数据处理需求。在了解 TDengine 的过程中,我发现它除了高性能的时序数据库功能外,还支持了流式计算和数据订阅等功能。
使用 TDengine 的流式计算功能进行数据处理和分析时,用户可以按照当前流入的数据进行实时计算,而且当离线数据到达后,也可以重新计算,从而满足统计超时停车数据的需求。具体到我们的业务来说,可以通过在 TDengine 中建立超时停车数据模型,定义超时停车的规则和阈值,并将实时收集的轨迹数据与之进行对比,从而实现实时预警和统计。
使用如下代码创建存储车辆轨迹信息表:
为了满足统计车辆超时停车业务展示的相关需求,我们可以从轨迹开始时间、轨迹结束时间、时长、最新位置、运行状态和轨迹点数等方面对数据进行统计和展示:
- 轨迹开始时间:记录车辆行驶轨迹开始的时间,精确到秒级别。这个时间可以用于计算车辆是否存在超时停车的情况。
- 轨迹结束时间:记录车辆行驶轨迹结束的时间,同样精确到秒级别,用于计算车辆行驶时长。
- 时长:通过轨迹开始时间和结束时间的计算,可以得到车辆行驶轨迹的时长,以秒为单位,对于B端客户非常有用。
- 最新位置:记录车辆最新的位置,可以实现实时跟踪车辆位置和行驶状态。这个信息可以在地图上进行展示,帮助客户更好地了解车辆的行驶情况。
- 运行状态:根据流式计算技术实时处理的结果,可以确定车辆的运行状态,例如停车或行驶等。这个信息也可以以图标或颜色等方式在地图上进行展示,方便客户快速了解车辆的运行情况。
- 轨迹点数:通过统计轨迹经过的点数,可以判断车辆的行驶轨迹是否正常。如果轨迹点数明显增多,则可能是因为车辆发生了异常情况,例如线路拥堵等。
实时数据分析
创建流:
插入数据(实时):
插入实时数据,观察流式计算结果select * from overtime_parking_output_stb;
,如下:
通过应用 TDengine 流式计算功能,我们可以将行驶和超时停车的数据分别存储,并记录对应轨迹和时长,方便查找和分析正常行驶和超时停车的情况。
在车辆行驶过程中,TDengine 流式计算引擎能够实时判断车辆的运行状态,区分出行驶和停车的状态,并将这些数据实时处理并存储到不同的数据库表或者数据流中。在数据存储的过程中,也会记录对应轨迹和时长等信息,为后续的数据分析提供依据。
对于超时停车的情况,通过 TDengine 流式计算可以实时监控车辆的运行状态和位置信息,如果发现车辆停留时间过长,就可以将其标记为超时停车,并及时进行预警和管控。同时,利用这一功能,我们也可以通过对行驶和停车数据进行分析,进一步优化路线规划和运营管理,提升运输效率和安全性。
离线数据分析
插入离线数据(实时数据的中间部分,观察流式计算结果):
插入离线数据,观察流式计算结果select * from overtime_parking_output_stb;
,如下:
在离线数据上传后,TDengine 流式计算引擎会将这些数据在对应的时间点上进行数据计算处理,按照数据的时间顺序进行处理,并且完全满足轨迹按时间排序计算的正常顺序,确保不会出现漏洞或者混乱的情况。这样一来,离线数据与实时数据就不会再出现错误计算的问题,我们也能够为 B 端客户提供更准确、实时、有效的运营数据和报表。
总之,TDengine 流式计算功能不仅帮助我们实现了车辆行驶数据的实时处理和分类,也很好地实现了运输车辆超时停车预警,减轻了服务端的计算压力,满足业务需求的同时帮助我们极大节省了数据处理成本,提高了车辆的运输效率和安全性。
写在最后
在运行 TDengine 过程中,涛思数据团队始终以客户需求为导向,为我们提供高效、可靠的数据处理和分析服务,满足了不断升级的业务需求,我们也非常感谢他们。未来我们还有计划将 TDengine 引入到其他业务中进行时序数据的处理,在实践中推进时序数据库技术的发展,实现共赢。