時間序列數據庫概覽

背景

   目前對於時序大數據的存儲和處理每每採用關係型數據庫的方式進行處理,但因爲關係型數據庫天生的劣勢致使其沒法進行高效的存儲和數據的查詢。時序大數據解決方案經過使用特殊的存儲方式,使得時序大數據能夠高效存儲和快速處理海量時序大數據,是解決海量數據處理的一項重要技術。該技術採用特殊數據存儲方式,極大提升了時間相關數據的處理能力,相對於關係型數據庫它的存儲空間減半,查詢速度極大的提升。時間序列函數優越的查詢性能遠超過關係型數據庫,Informix TimeSeries很是適合在物聯網分析應用。

定義

  時間序列數據庫主要用於指處理帶時間標籤(按照時間的順序變化,即時間序列化)的數據,帶時間標籤的數據也稱爲時間序列數據。html

最新時序數據庫排名:數據庫

 

特色& 分類:

  • 專門優化用於處理時間序列數據
  1. 該類數據以時間排序
  2. 因爲該類數據一般量級大(所以Sharding和Scale很是重要)或邏輯複雜(大量聚合,上取,下鑽),關係數據庫一般難以處理
  • 時間序列數據按特性分爲兩類
  1. 高頻率低保留期(數據採集,實時展現)
  2. 低頻率高保留期(數據展示、分析)
  • 按頻度
  1. 規則間隔(數據採集)
  2. 不規則間隔(事件驅動)
  •  時間序列數據的幾個前提
  1. 單條數據並不重要
  2. 數據幾乎不被更新,或者刪除(只有刪除過時數據時),新增數據是按時間來講最近的數據
  3. 一樣的數據出現屢次,則認爲是同一條數據

如圖:json

 

時間序列數據庫關鍵比對

 

InfluxDB後端

ElasticSearchapi

流行(TSDB排行第一)服務器

流行(搜索引擎排行第一)架構

高可用須要收費app

集羣高可用容易實現,免費curl

單點寫入性能高數據庫設計

單點寫入性能低

查詢語法簡單,功能強

查詢語法簡單,功能強(弱於Influxdb)

後端時序數據庫設計,寫入快

設計並非時序數據庫,後端存儲採用文檔結構,寫入慢

 

 

因而可知:高頻度低保留期用Influxdb,低頻度高保留期用ES。

其餘時序數據庫介紹:

如何使用

數據的查詢與寫入:

  • 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 ~]#

介紹Telegraf&Logstash:

  • 都是數據收集和中轉的工具,架構都是插件式配置
  • Telegraf相比Logstash更加輕量
  • 都支持大量源,包括關係數據庫、NOSQL、直接收集操做系統信息(Linux、Win)、APP、服務(Docker)

    執行模式分爲兩種

  • 主動:根據配置一次性讀取被收集的數據,收集完成後關閉進程
  • 被動:做爲進程駐留內存,監聽特定端口,等待消息發送

介紹兩種時序數據庫使用的架構:

 

1.日誌採集,而後存入influxdb,最後在grafana 中進行可視化查詢。

 

2.數據庫監控,主要經過採集關係型數據庫的性能指標分析數據庫的運行狀態便於監控和管理,以下圖所示

 數據可視化展現

  數據的可視化展現有不少種選擇,好比ELK中推薦使用kibana,配合es更方便,而搭配influxdb可使用grafana。

目前grafana支持數據源

–  ES

–  Influxdb

–  Prometheus

–  Graphite

–  OpenTSDB

–  CloudWatch

安裝Grafana

Grafana的安裝很簡單,以Debian安裝爲例:

執行命令:

$ wget https://grafanarel.s3.amazonaws.com/builds/grafana_2.6.0_amd64.deb

$ sudo apt-get install -y adduser libfontconfig

$ sudo dpkg -i grafana_2.6.0_amd64.deb

啓動服務器:

$ sudo service grafana-server start

而後便可進行配置使用數據可視化了。這裏就不展開講了。下面會有獨立文章介紹grafana和kibana。

總結  

  本篇簡要概述了時序數據庫的內容,介紹了特色並以influxdb爲實例對比了與傳統數據庫的區別,以及如何使用Influxdb。最後講解了使用時序數據庫的架構,日誌和監控等,經過grafana進行可視化的數據查詢分析監控等。文章地址http://www.javashuo.com/article/p-mwppinyn-eq.html

相關文章
相關標籤/搜索