在物联网时代,企业需要处理各种设备产生的带有时间标签的数据,即时间序列数据。时间序列数据主要由各类型实时监测、检查与分析设备所采集或产生,涉及电力行业、化工等行业。这些工业数据的典型特点是:产生频率快、严重依赖于采集时间、测点多信息量大等。普通关系型数据库无法高效地处理此类数据。
为了更好的处理时间序列数据,时序数据库(Time Series Database,下简称TSDB)应运而生。TSDB是用于管理时间序列数据的专业化数据库。区别于传统的关系型数据库,TSDB针对时间序列数据的存储、查询和展现进行了专门的优化,从而获得极高的数据压缩能力、极优的查询性能,特别适用于物联网应用场景。
可见,这种数据库特别适合我们的分布式光伏电站的时序数据存储。
比如他的写接口的描述是这样的:
写入data point
方法 | API | 说明 |
---|---|---|
POST | /v1/datapoint | 写入data point |
请求参数
参数名称 | 参数类型 | 是否必须 | 说明 |
---|---|---|---|
datapoints | List<Datapoint> | 必须 | datapoint列表,由Datapoint对象组成的数组 |
Datapoint对象
参数名称 | 参数类型 | 是否必须 | 说明 |
---|---|---|---|
metric | String | 必须 | metric的名称 |
tags | Object | 必须 | data point对应的所有tag,Object中的一对key-value表示一个tag的key-value |
timestamp | Int | 可选 | Unix时间戳,单位是毫秒,如果timestamp的位数小于等于10位,系统默认精度是秒,将自动乘以1000;timestamp+value与values两者必须二选一 |
value | Int/Double/String | 可选 | data point的值,timestamp+value与values两者必须二选一 |
values | List> | 可选 | 对于相同的metric+tags的data point,可以通过合并成一个values的List来减少payload,values是个二维数组,里面的一维必须是两个元素,第一个元素是timestamp,类型是Int,第二个元素是value,类型是Int/Double/String |
请求示例
POST /v1/datapoint HTTP/1.1
HOST: {database}.tsdb.iot.gz.baidubce.com
Authorization: {authorization}
Content-Type: application/json; charset=utf-8
x-bce-date: 2016-06-08T16:49:51Z
{
"datapoints": [{
"metric": "cpu_idle",
"tags": {
"host": "server1",
"rack": "rack1"
},
"timestamp": 1465376157007,
"value": 51
}, {
"metric": "cpu_idle",
"tags": {
"host": "server2",
"rack": "rack2"
},
"values": [
[1465376269769, 67],
[1465376325057, 60]
]
}]
}
那么对于我们来说就是, metric对应dataId,tags对应nodeType, nodeId, timestamp就对应logtime,value就对应dataValue,完美契合。
现在剩下的问题就是这个服务的价格有点贵,100万点/月要40元,这也存不了几个电站的数据。