什么是时间序列数据(Time Series Data,TSD,以下简称时序)就是一串按时间维度索引的数据。
用描述性的语言来解释什么是时序数据,简单的说,就是这类数据描述了某个被测量的主体在一个时间范围内的每个时间点上的测量值。
包含三个重要部分,分别是:主体,时间点和测量值。
下图为一段时序数据,记录了一段时间内的某个集群里各机器上各端口的出入流量,每半小时记录一个观测值。这里以图中的数据为例,介绍下时序数据的数学模型
measurement: 度量的数据集,类似于关系型数据库中的 table;
point: 一个数据点,类似于关系型数据库中的 row;
timestamp: 时间戳,表征采集到数据的时间点;
tag: 维度列,代表数据的归属、属性,表明是哪个设备/模块产生的,一般不随着时间变化,供查询使用;
field: 指标列,代表数据的测量值,随时间平滑波动,不需要查询。
时序数据库 如何选用呢?
InfluxDB有windows版, 个人版免费.Kdb+是金融行业用的多, 个人版2个小时就要重启一次.
TimescaleDB 基于PostgreSQL, 国产DolphinDb号称速度最快, 但下载下来文档界面不太友好.
涛思TDengine只有Linux版. 我这边都是windows上的小应用
2.0的版本已经把零散的工具整合在localhost:8086 的web界面. 只要启动influxd就可以了
net的客户端在nuget上可以安装
Install-Package InfluxDB.Client
要求.net standard2.0以上( 也就是.net framework 4.61以上)
// You can generate a Token from the "Tokens Tab" in the UI const string token = "rjWC3CEwHwPxmYQ4SQkZb_9zBW24aEchFP5uIG7pDh0DFOQ4F_xWw7bCjnTBmhRinbV1ndF0eKuToBgjsFnwAg=="; const string bucket = "kdBucket"; const string org = "kd"; var client = InfluxDBClientFactory.Create("http://localhost:8086", token.ToCharArray()); //Option 1: Use InfluxDB Line Protocol to write data const string data = "mem,host=host1 used_percent=23.43234543"; using (var writeApi = client.GetWriteApi()) { writeApi.WriteRecord(bucket, org, WritePrecision.Ns, data); } //Option 2: Use a Data Point to write data var point = PointData .Measurement("mem") .Tag("host", "host1") .Field("used_percent", 23.43234543) .Timestamp(DateTime.UtcNow, WritePrecision.Ns); using (var writeApi = client.GetWriteApi()) { writeApi.WritePoint(bucket, org, point); }