天天看點

大資料之時序資料庫InfluxDB基本概念篇

大資料之時序資料庫InfluxDB基本概念篇

InfluxDB基本概念小結

InfluxDB作為時序資料庫,與傳統的關系型資料庫相比而言,還是有一些差別的,下面盡量以簡單明了的方式介紹下相關的術語概念

I. 基本概念

大資料之時序資料庫InfluxDB基本概念篇

1. database

資料庫,和mysql的資料庫相比,沒有太大的歧義

2. measurement

對比的是mysql中的table,從實際體驗來看,兩個之間最明顯的差別在于沒有單獨的建立measurement的方法,直接新增一條資料時,若measurement不存在,則直接建立并插入一條資料

3. Point

這個對比的是mysql中的record,在influxDB中,表示每個表中,某個時刻,滿足某個條件的filed資料(簡單來說就是 timestamp + tag + filed)的組成一個point

  • timestamp : 時間戳,ns機關,每個記錄都必然有這個屬性,沒有顯示添加時,預設給一個
  • tag: 标簽,kv結構,在database中, tag + measurement 一起建構索引
  • 參與索引建立,是以适合作為查詢的過濾條件
  • tag的資料量不要太多,最好能有典型的辨識性(和mysql的建立索引的原則差不多)
  • value為String類型
  • tag是可選的,在measurement不設定tag也是ok的
  • field:存儲資料,kv結構
  • 資料類型為: long, String, boolean, float

4. Series

Series: tag key 與tag value的唯一組合

II. 執行個體分析

上面幾個為基本的概念,單獨的看起來印象不夠深刻,下面結合執行個體進行說明:

建立一個measurement,儲存某個應用的性能狀況,包含以下名額, 每秒寫一次資料到influxDB中

  • 服務機器: host=127.0.0.1
  • 服務接口: service=app.service.index
  • qps: qps=1340
  • rt: 1313
  • cpu: 45.23
  • mem: 4154m
  • load: 1.21

1. measurement建立

上面有7個名額參數,第一步就是區分tag和field,前面說到tag會建索引,推薦用于可以區分類型,取值可以預估的字段,是以對上面進行如下區分

tag

  • host
  • servie

field

  • qps
  • rt
  • cpu
  • mem
  • load

一條實際的插入資料如

大資料之時序資料庫InfluxDB基本概念篇

a. 小結說明

  • 在insert執行語句中,tag與tag、field與field之間用都好進行分割,tag與field之間用空格分割
  • tag的value都是,String類型,不需要加雙引号
  • field的String類型資料,需要放在雙引号中,否則會報錯
  • 如果需要顯示添加時間戳,在filed後添加空格,再添加時間戳

b. 是否可以沒有field

實測不行,輸出如下

大資料之時序資料庫InfluxDB基本概念篇

c. 是否可以沒有tag

根據前面的說明已經實測,可以

大資料之時序資料庫InfluxDB基本概念篇

2. 資料分析

新插入幾條資料,目前的資料為

大資料之時序資料庫InfluxDB基本概念篇

a. series

上面四條資料,對應幾個series呢 ?

根據前面的說法,tagKey + tagValue 确定給一個series (實際上是 measurement + retention policy + tags來确定),是以上表總共有三個series

  • ​127.0.0.1 | app.service.index​

  • ​127.0.0.1 | app.service.about​

  • ​127.0.0.2 | app.service.about​

那麼這個series到底是什麼東西呢?

如果将上面的資料圖表化的方式顯示出來,我們可以怎麼辦?

  • 首先我們确定好應用及其和服務名,然後檢視這個服務在這台機器上,在時間線上的服務性能
  • 翻譯過來就是,将cpu/service作為檢索條件,以time為時間軸,将value(cpu,load,mem,qps,rt)映射到二維坐标上作為一個點(point),然後将所有的point連接配接成線,最終得到連續的圖表

是以series就是上面的檢索條件,同時point的概念也容易了解了

III. 保留政策

前面是表資料的相關基礎概念,這裡還有一個就是資料儲存的政策 retention policy, 用于決定資料儲存多久(意思是資料可以删除),儲存幾個備份,叢集的處理等

1. 基本說明

influxdb面向大資料的時序資料庫,是以資料量可以很大很大,如果全部存儲,估計硬碟的費用都不小,而且有些資料可能并不需要永久存儲,是以就有了這個rentention policy

InfluxDB本身不提供資料的删除操作,是以用來控制資料量的方式就是定義資料保留政策。

是以定義資料保留政策的目的是讓InfluxDB能夠知道可以丢棄哪些資料,進而更高效的處理資料。

2. 基本操作

a. 查詢政策

大資料之時序資料庫InfluxDB基本概念篇
  • name: 名稱
  • duration: 保留時間, 0表示永久儲存
  • shardGroupDuration: shardGroup的存儲時間,shardGroup是InfluxDB的一個基本儲存結構,應該大于這個時間的資料在查詢效率上應該有所降低。
  • replicaN: 全稱是REPLICATION,副本個數
  • default: 是否是預設政策

b. 建立政策

大資料之時序資料庫InfluxDB基本概念篇

c. 修改政策

大資料之時序資料庫InfluxDB基本概念篇

d. 删除政策

大資料之時序資料庫InfluxDB基本概念篇

删除預設政策之後,就沒有預設政策了,是否會有問題呢?

3. RP了解

設定這個政策之後,會自動删除過期的資料,那麼資料時怎麼儲存的呢?

比如預設的永久儲存政策中,有個 ​

​shardGroupDuration​

​ 參數,為7天,也就是說7天的資料放在一個Shard中,過了之後,新加一個Shard

shard包含實際的編碼和壓縮資料,并由磁盤上的TSM檔案表示。 每個shard都屬于唯一的一個shard group。多個shard可能存在于單個shard group中。每個shard包含一組特定的series。給定shard group中的給定series上的所有點将存儲在磁盤上的相同shard(TSM檔案)中。

IV. 其他

1. 一灰灰Blog: https://liuyueyi.github.io/hexblog

一灰灰的個人部落格,記錄所有學習和工作中的博文,歡迎大家前去逛逛

2. 聲明

盡信書則不如,已上内容,純屬一家之言,因個人能力有限,難免有疏漏和錯誤之處,如發現bug或者有更好的建議,歡迎批評指正,不吝感激

  • 微網誌位址: 小灰灰Blog