1.背景

  目前对于时序大数据的存储和处理往往采用关系型数据库的方式进行处理,但由于关系型数据库天生的劣势导致其无法进行高效的存储和数据的查询。时序大数据解决方案通过使用特殊的存储方式,使得时序大数据可以高效存储和快速处理海量时序大数据,是解决海量数据处理的一项重要技术。该技术采用特殊数据存储方式,极大提高了时间相关数据的处理能力,相对于关系型数据库它的存储空间减半,查询速度极大的提高。时间序列函数优越的查询性能远超过关系型数据库,Informix TimeSeries非常适合在物联网分析应用。
  

2.定义

  时间序列数据库主要用于指处理带时间标签(按照时间的顺序变化,即时间序列化)的数据,带时间标签的数据也称为时间序列数据。

最新时序数据库排名:

grafana 时间序列 sql怎么写 时间序列数据库的秘密_时间序列

3.特点& 分类:

专门优化用于处理时间序列数据
该类数据以时间排序
由于该类数据通常量级大(因此Sharding和Scale非常重要)或逻辑复杂(大量聚合,上取,下钻),关系数据库通常难以处理

时间序列数据按特性分为两类

  • 高频率低保留期(数据采集,实时展示)
  • 低频率高保留期(数据展现、分析)

按频度

  • 规则间隔(数据采集)
  • 不规则间隔(事件驱动)

时间序列数据的几个前提

  • 单条数据并不重要
  • 数据几乎不被更新,或者删除(只有删除过期数据时),新增数据是按时间来说最近的数据
  • 同样的数据出现多次,则认为是同一条数据

如图:

grafana 时间序列 sql怎么写 时间序列数据库的秘密_HTTP_02

4.时间序列数据库关键比对

grafana 时间序列 sql怎么写 时间序列数据库的秘密_时间序列_03


由此可见:高频度低保留期用Influxdb,低频度高保留期用ES。其他时序数据库介绍:

grafana 时间序列 sql怎么写 时间序列数据库的秘密_grafana 时间序列 sql怎么写_04

5.如何使用

5.1数据的查询与写入

  • Influxdb与ES都是REST API风格接口
  • 通过HTTP Post写入数据,通过HTTP Get获取数据,ES还有HTTP Put和Delete等
  • 写入数据可以是JSON格式,Influxdb支持Line Protocol
  • JSON格式徒增解析成本,录入数据格式越简单越好
  • 通常ES搭配Logstash使用,Influxdb搭配telegraf使用

以Influxdb为例,看一些如何插入和查询数据:

Influxdb的HTTP API
创建DB

[root@host31 ~]# curl -i -XPOST http://192.168.32.31:8086/query --data-urlencode "q=CREATE DATABASE mydb"
HTTP/1.1 200 OK
Connection: close
Content-Type: application/json
Request-Id: 42a1f30c-5900-11e6-8003-000000000000
X-Influxdb-Version: 0.13.0
Date: Tue, 02 Aug 2016 22:27:13 GMT
Content-Length: 16

{"results":[{}]}[root@host31 ~]#

写入数据

[root@host31 ~]# curl -i -XPOST http://192.168.32.31:8086/query --data-urlencode "q=CREATE DATABASE mydb"
HTTP/1.1 200 OK
Connection: close
Content-Type: application/json
Request-Id: 42a1f30c-5900-11e6-8003-000000000000
X-Influxdb-Version: 0.13.0
Date: Tue, 02 Aug 2016 22:27:13 GMT
Content-Length: 16

{"results":[{}]}[root@host31 ~]#

查询写入的数据

[root@host31 ~]# curl -GET 'http://192.168.32.31:8086/query?pretty=true' --data-urlencode "db=mydb" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-west'"
{
    "results": [
        {
            "series": [
                {
                    "name": "cpu_load_short",
                    "columns": [
                        "time",
                        "value"
                    ],
                    "values": [
                        [
                            "2015-06-11T20:46:02Z",
                            0.64
                        ]
                    ]
                }
            ]
        }
    ]
}[root@host31 ~]#