背景
定義
時間序列數據庫主要用於指處理帶時間標籤(按照時間的順序變化,即時間序列化)的數據,帶時間標籤的數據也稱爲時間序列數據。html
最新時序數據庫排名:數據庫
特色& 分類:
- 專門優化用於處理時間序列數據
- 該類數據以時間排序
- 因爲該類數據一般量級大(所以Sharding和Scale很是重要)或邏輯複雜(大量聚合,上取,下鑽),關係數據庫一般難以處理
- 時間序列數據按特性分爲兩類
- 高頻率低保留期(數據採集,實時展現)
- 低頻率高保留期(數據展示、分析)
- 按頻度
- 規則間隔(數據採集)
- 不規則間隔(事件驅動)
- 時間序列數據的幾個前提
- 單條數據並不重要
- 數據幾乎不被更新,或者刪除(只有刪除過時數據時),新增數據是按時間來講最近的數據
- 一樣的數據出現屢次,則認爲是同一條數據
如圖:json
時間序列數據庫關鍵比對
InfluxDB後端 |
ElasticSearch服務器 |
流行(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進行可視化的數據查詢分析監控等。文章地址https://www.cnblogs.com/wenBlog/p/8297100.html