时序场景下的数据写入特征

本文档介绍了时序场景下的数据写入特征,以及 YMatrix 在时序特征下的数据写入架构。

1 时序场景写入特征

数据库是存储数据的地方,完成数据表建模和存储选型,下面就要向表写入数据。 时序数据写入有以下特征:

  • 数据量大,对吞吐量要求高
  • 写入场景复杂,如:乱序、异频等场景

1.1 数据量大

时序数据最大的特点就是数据量大,反应到实际场景中包括 3 个方面:

  • 设备数量大:设备总量达到几十万到百万量级,并且会增长
  • 采集频率高:指标需要秒级别的频率采集,部分指标可能需要 10ms 采集一次
  • 采集指标多:以车辆网为例,每辆车包含的指标数可能有几千个

综上,在庞大的设备数量、采集指标又高频的采集密度下,产生的数据量巨大,对数据库的吞吐量是个极大的挑战。 YMatrix 开发了 MatrixGate 高速写入工具,通过数据节点(Segment)并行接入数据的实现方式,可以达到 5000万 数据点/秒的写入速度。

mxgate

实现方式,请参考 YMatrix - YMatrix 如何实现单机 5000万 数据点/秒写入速度

评测报告,请参考 YMatrix - 时序数据库插入性能评测:YMatrix 是 InfluxDB 的 78 倍

1.2 写入场景复杂

在实际场景中,数据写入面临的问题不仅仅是数据量大、来源形式多样化,还包括一些复杂的异常情况,如:

  • 分批上报自动合并
  • 乱序、延迟上报
  • 异频上报

1.2.1 分批上报自动合并

在某些场景中,设备在某个时刻的采集指标不会一次性的全部发送回来,而是分批次回传。多次回传的数据需要合并到一起,而不是分多条记录存放。 upsert

对于这种场景,YMatrix 提供了 UPSERT 语义,基于唯一约束做数据的合并。具体使用方法请参考:YMatrix - YMatrix 4.2 新特性解读之 UPSERT

1.2.2 乱序、延迟上报

乱序、延迟上报同样是通过 UPSERT 支持。

1.2.3 异频上报

所谓的异频上报,是指设备的不同指标分别按照不同的频率来采集,比如,有的是 1s 采集一次,有的是 2s 采集一次。如下图所示:

UPSERT

异频上报会导致在存储数据的时候,对于低频采集的指标值中会存在大量 NULL。只要存在 NULL 列,则在 YMatrix 存储中也会占用存储空间,对于 HEAP 表,存储开销为列数/ 8 字节;对于 MARS 表,存储开销为 RowGroup 行数/ 8 字节。所以要根据 NULL 的情况综合考虑解决方案。

2 YMatrix 数据写入全景图

YMatrix 可以将多个来源,不同形式的数据接入到自己的系统中,下图包含了常见的接入数据来源和存储形式。

注意!
直接点击对应的图标即可跳转到相应文档。

MatrixGate YMatrix COPY FDW EMQ PXF S3 Hive HBase HDFS Oracle SQL Server MySQL PostgreSQL MongoDB Kafka 文件 Greenplum MatrixDB RESTful API stdin Apache NiFi JDBC/ODBC/libpq Java Python Golang C/C++