发布于: Oct 14, 2022

在工业物联网应用领域中,常常会产生大量的带时间标签的数据,被称为时间序列数据。这些数据的典型特点为:产生频率快(每一个监测点一秒钟内可产生多条数据)、严重依赖于采集时间(每一条数据均要求对应唯一的时间)、测点多信息量大(实时监测系统有成千上万的监测点,监测点每秒钟都产生数据,每天轻松产生几十 GB 甚至更多的数据量)。例如,生产制造、电力、化工等行业,需要实时监测,检查并分析海量设备所采集和产生的数据;车联网以及电动汽车也会产生海量数据用于行车安全监控,车辆设备状态监控;互联网应用运行状况的监控、实时点击流数据的收集以及分析等等。

时间序列数据的这些特点,使得传统的关系型数据库无法提供高效存储、快速扩展以及快速处理的能力。时间序列数据库因此应运而生,它采用特殊的存储方式,专门针对时间序列化数据做了优化,极大提高了时间相关数据的处理能力,相对于关系型数据库,它的存储空间减半,查询速度得到显著提高。

Amazon Timestream 是一种快速、可扩展的全托管、无服务器时间序列数据库服务,借助 Timestream,您可以每天轻松存储和分析数万亿个事件。其主要优势为:

  • 高性能、低成本:相比传统关系型数据库,其速度提升了 1000 倍,而成本仅为十分之一。
  • 无服务器:自动缩放以调整容量和性能,使得您只需要专注于应用程序的构建,而无需管理底层基础设施。
  • 生命周期管理:根据您预先设置好的生命周期策略,Timestream 可以自动实现将近期数据保留在内存层,而将历史数据移动到成本优化的磁性存储层,帮助您节省管理时序数据库的时间以及成本。
  • 简单高效查询:无需在查询中显式指定数据是保存在内存中还是成本优化层中,Timestream的查询引擎可用于统一的访问和分析近期数据和历史数据。

此文将利用一个车联网行车监控上报时序数据的模型,探讨 Amazon Timestream 如何通过流式方法注入行车数据以及在不同数据量下的的扩展性以及查询性能表现。结构上分为数据模型、Amazon Timestream 端到端测试、性能表现三个部分,如果希望直接看性能评测结果,可以直接跳到性能表现当中查看结论。

场景介绍

我们选取一个车联网行车监控的典型场景,汽车实时监测数据会以时序数据的形式,流式的上传并存储到 Amazon Timestream 中,由不同的数据使用者、不同的应用程序做不同类型的 SQL 查询。

使用 Amazon Timestream,可以有效解决车联网应用的若干痛点

  1. 数据无法可靠地收集或传输,并且数据之间存在间隙或者乱序
  2. 需要对多个数据系列执行不同的分析,这些数据系列无法以相同的速率(频率)生成数据或以相同的速率生成数据但不同步
  3. 数据的时间心跳粒度可能从秒级到分钟,小时不等。
  4. 需要计算并考虑数据在不同时间段内的统计值,例如平均值,标准偏差,百分位数和排名
  5. 需要以可变的粒度级别检索数据,例如特定分析时间轴中的缩放:降采样和随机采样的要求

每辆车的每次上报,都包含时间戳,设备基本属性(ID 等信息),以及不同维度的属性值(温度,速度等)。数据 Schema 如下表所示。

data = {

 "vin": vin,  # 车架号,VIN = 'vin-' + str(rand_n(14))  

 "event_time": str(datetime.datetime.now()),   # 时间戳 timestamp

 "trip_id": trip_id,    # 行程标识 

 "PressureLevel": random.choice(['LOW', 'NORMAL', 'HIGH']),  # 压力值水平

 "Systolic": random.randint(50, 80),  # 某参数值

 "Diastolic": random.randint(30, 50),   # 某参数值

 "temp": random.randint(0, 1000),   # 温度

 "powertrainState": DOUBLE,  # 动力总成状态

 "ignition_state": DOUBLE,   # 点火状态

 "bms_soc2":DOUBLE,  # 排放值

 "odo":DOUBLE,   # 里程数

 "speed":DOUBLE, # 速度数

 "gear":DOUBLE,  # 变速器

 "engine_rpm":DOUBLE  # 发动机转速

}

相关文章