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

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

1 时序场景写入特征

存储是数据库的核心功能之一,完成数据建模和数据库连接后,就要向表写入数据。

时序场景的写入主要有以下特征:

  • 数据规模大,对吞吐性能要求较高
  • 写入场景复杂,如:分批合并、乱序、异频等场景

1.1 数据规模大

时序场景中数据写入的典型特点即数据规模大,反应到实际场景中包括 3 个方面:

  • 实体(设备 / 顾客)规模大:设备总量达到几十万到百万量级,并会不断增长。
  • 指标数量和类型多:以车联网为例,每辆车包含的指标数可能有几千个。
  • 采集频率高:指标需要秒级别的频率采集,部分指标可能需要 10ms 采集一次。

综上,在不断增长的庞大的实体数量,以及高频的采集频率的影响下,时序场景产生的数据量巨大,对数据库的吞吐性能形成了极大挑战。

YMatrix 开发了 MatrixGate 高速写入工具,通过数据节点(Segment)并行接入数据的实现方式,最高可以达到亿级数据点/秒的写入速度。

mxgate

注意!
mxgate 实现方式,请见 YMatrix - YMatrix 如何实现单机 5000万 数据点/秒写入速度;评测报告,请见 YMatrix - 时序数据库插入性能评测:YMatrix 是 InfluxDB 的 78 倍;工作原理请见 数据写入工具

1.2 写入场景复杂

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

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

1.2.1 分批

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

对于这种场景,YMatrix 支持通过 UPSERT 功能来应对。此场景的详细介绍与 UPSERT 功能用法见 数据分批合并场景(UPSERT)

1.2.2 乱序、延迟

延迟指的是设备故障或者采集链条某个节点出现问题时,数据不能按时上报。在采集链条恢复正常时,再上报数据。譬如汽车进入无信号区后行驶数天,进入有信号区域时会恢复上报链路。这种延迟常常可以按照天来计算,甚至可以按照周来计算。

乱序则意为设备故障或者采集链条某个节点故障时,上报将延迟。故障修复后,有时需要先上报最新的数据,然后逐步补齐缺失的数据。这种情况就会发生乱序上报,即上报的数据可能是比已经上报过的数据还要旧。

因这两种场景常常无需数据库进行特别的数据合并处理,在此不再赘述。

1.2.3 异频

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

UPSERT

异频上报会导致在存储数据的时候,对于低频采集的指标值中会存在大量 NULL,而 NULL 值同样会占用一定的存储空间:对于 HEAP 表,存储开销为列数/ 8 字节;对于 MARS2 表,存储开销为 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++