什么是時間序列數據(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); }