
InfluxDB基本概念小結
InfluxDB作為時序資料庫,與傳統的關系型資料庫相比而言,還是有一些差別的,下面盡量以簡單明了的方式介紹下相關的術語概念
I. 基本概念
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
一條實際的插入資料如
a. 小結說明
- 在insert執行語句中,tag與tag、field與field之間用都好進行分割,tag與field之間用空格分割
- tag的value都是,String類型,不需要加雙引号
- field的String類型資料,需要放在雙引号中,否則會報錯
- 如果需要顯示添加時間戳,在filed後添加空格,再添加時間戳
b. 是否可以沒有field
實測不行,輸出如下
c. 是否可以沒有tag
根據前面的說明已經實測,可以
2. 資料分析
新插入幾條資料,目前的資料為
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. 查詢政策
- name: 名稱
- duration: 保留時間, 0表示永久儲存
- shardGroupDuration: shardGroup的存儲時間,shardGroup是InfluxDB的一個基本儲存結構,應該大于這個時間的資料在查詢效率上應該有所降低。
- replicaN: 全稱是REPLICATION,副本個數
- default: 是否是預設政策
b. 建立政策
c. 修改政策
d. 删除政策
删除預設政策之後,就沒有預設政策了,是否會有問題呢?
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