InfluxDb專業術語
重復是最好的學習方式,我們再重復一些Influx的概念吧,雖然很多已經講過,甚至上一課已經講了。我發現我自己還是有點啰嗦,不過這可能是一種好的學習方法哦。
聚合函數aggregation
aggregation是一個InfluxQL的函數,InfluxQL是InfluxDb的查詢語言。aggregation可以返回一堆數據的聚合結果,可以看InfluxQL函數中現有的以及即將支持的聚合函數列表。
批數據batch
用換行符分割的數據點的集合,這批數據可以使用HTTP請求寫到數據庫中。用這種HTTP接口的方式可以大幅降低HTTP的負載。盡管不同的場景下更小或更大的batch可能有更好地性能,InfluxData建議每個batch的大小在5000~10000個數據點。
其實還是有點大,我們后面會看看5000個點,是多少字節的數據。
連續查詢continuous query(CQ)
continuous query,簡稱CQ,是一個在數據庫中自動周期運行的InfluxQL的查詢。Continuous query在select語句里需要一個函數,并且一定會包含一個GROUP BY time()的語法。
它有點像存儲過程。不過它可以自動執行。
數據庫database
對于users,retention policy,continuous query以及時序數據的一個邏輯上的集合。
其實不用解釋,數據庫就是數據庫。
duration
retention policy中的一個屬性,決定InfluxDB中數據保留多長時間。在duration之前的數據會自動從database中刪除掉。
字段field
InfluxDB數據中記錄metadata和真實數據的鍵值對。fields在InfluxDB的數據結構中是必須的且不會被索引。如果要用field做查詢條件的話,那就必須遍歷所選時間范圍里面的所有數據點,這種方式對比與tag效率會差很多。
字段鍵值field key
組成field的鍵值對里面的鍵的部分。field key是字符串且保存在metadata中。
字段集合field set
數據點上field key和field value的集合。
字段值field value
組成field的鍵值對里面的值的部分。field value才是真正的數據,可以是字符串,浮點數,整數,布爾型數據。一個field value總是和一個timestamp相關聯。
field value不會被索引,如果要對field value做過濾話,那就必須遍歷所選時間范圍里面的所有數據點,這種方式對比與tag效率會差很多。
函數function
包括InfluxQL中的聚合,查詢和轉換,可以在InfluxQL函數中查看InfluxQL中的完整函數列表。
標識符identifier
涉及continuous query的名字,database名字,field keys,measurement名字,retention policy名字,subscription 名字,tag keys以及user 名字的一個標記。
line protocol
寫入InfluxDB時的數據點的文本格式。
表measurement
InfluxDB數據結果中的一部分,描述了存在關聯field中的數據的意義,measurement是字符串。
metastore
包含了系統狀態的內部信息。metastore包含了用戶信息,database,retention policy,shard metadata,continuous query以及subscription。
node
一個獨立的influxd進程。
時間函數now()
本地服務器的當前納秒級時間戳。
point
InfluxDB數據結構的一部分由series中的的一堆field組成。 每個點由其series和timestamp唯一標識。
你不能在同一series中存儲多個具有相同timestamp的點。 相反,當你使用與該series中現有點相同的timestamp記將新point寫入同一series時,該field set將成為舊field set和新field set的并集。
查詢query
從InfluxDB里面獲取數據的一個操作
replication factor
retention policy的一個參數,決定在集群模式下數據的副本的個數。InfluxDB在N個數據節點上復制數據,其中N就是replication factor。
replication factor在單節點的實例上不起作用
retention policy(RP)
InfluxDB數據結構的一部分,描述了InfluxDB保存數據的長短(duration),數據存在集群里面的副本數(replication factor),以及shard group的時間范圍(shard group duration)。RPs在每個database里面是唯一的,連同measurement和tag set定義一個series。
當你創建一個database的時候,InfluxDB會自動創建一個叫做autogen的retention policy,其duration為永遠,replication factor為1,shard group的duration設為的七天。
數據庫模式schema
數據在InfluxDB里面怎么組織。InfluxDB的schema的基礎是database,retention policy,series,measurement,tag key,tag value以及field keys。
selector
一個InfluxQL的函數,從特定范圍的數據點中返回一個點。可以看InfluxQL函數中現有的以及即將支持的selector函數列表。
series
InfluxDB數據結構的集合,一個特定的series由measurement,tag set和retention policy組成。
注意:field set不是series的一部分
series cardinality
在InfluxDB實例上唯一database,measurement和tag set組合的數量。
例如,假設一個InfluxDB實例有一個單獨的database,一個measurement。這個measurement有兩個tag key:email和status。如果有三個不同的email,并且每個email的地址關聯兩個不同的status,那么這個measurement的series cardinality就是6(3*2=6):
status
lorr@influxdata.com
start
lorr@influxdata.com
finish
marv@influxdata.com
start
marv@influxdata.com
finish
cliff@influxdata.com
start
cliff@influxdata.com
finish
注意到,因為所依賴的tag的存在,在某些情況下,簡單地執行該乘法可能會高估series cardinality。 依賴的tag是由另一個tag限定的tag并不增加series cardinality。 如果我們將tagfirstname添加到上面的示例中,則系列基數不會是18(3 * 2 * 3 = 18)。 它將保持不變為6,因為firstname已經由email覆蓋了:
status
firstname
lorr@influxdata.com
start
lorraine
lorr@influxdata.com
finish
lorraine
marv@influxdata.com
start
marvin
marv@influxdata.com
finish
marvin
cliff@influxdata.com
start
clifford
cliff@influxdata.com
finish
clifford
在常見問題中可以看到怎么根據series cardinality來查詢InfluxDB。
server
一個運行InfluxDB的服務器,可以使虛擬機也可以是物理機。每個server上應該只有一個InfluxDB的進程。
shard
shard包含實際的編碼和壓縮數據,并由磁盤上的TSM文件表示。 每個shard都屬于唯一的一個shard group。多個shard可能存在于單個shard group中。每個shard包含一組特定的series。給定shard group中的給定series上的所有點將存儲在磁盤上的相同shard(TSM文件)中。
shard duration
shard duration決定了每個shard group跨越多少時間。具體間隔由retention policy中的SHARD DURATION決定。
例如,如果retention policy的SHARD DURATION設置為1w,則每個shard group將跨越一周,并包含時間戳在該周內的所有點。
shard group
shard group是shard的邏輯組合。shard group由時間和retention policy組織。包含數據的每個retention policy至少包含一個關聯的shard group。給定的shard group包含shard group覆蓋的間隔的數據的所有shard。每個shard group跨越的間隔是shard的持續時間。
subscription
subscription允許Kapacitor在push model中接收來自InfluxDB的數據,而不是基于查詢數據的pull model。當Kapacitor配置為使用InfluxDB時,subscription將自動將訂閱的數據庫的每個寫入從InfluxDB推送到Kapacitor。subscription可以使用TCP或UDP傳輸寫入。
tag
InfluxDB數據結構中的鍵值對,tags在InfluxDB的數據中是可選的,但是它們可用于存儲常用的metadata; tags會被索引,因此tag上的查詢是很高效的。
tag key
組成tag的鍵值對中的鍵部分,tag key是字符串,存在metadata中。
tag set
數據點上tag key和tag value的集合。
tag value
組成tag的鍵值對中的值部分,tag value是字符串,存在metadata中。
timestamp
數據點關聯的日期和時間,在InfluxDB里的所有時間都是UTC的。
transformation
一個InfluxQL的函數,返回一個值或是從特定數據點計算后的一組值。但是不是返回這些數據的聚合值。
tsm(Time Structured Merge tree)
InfluxDB的專用數據存儲格式。 TSM可以比現有的B+或LSM樹實現更大的壓縮和更高的寫入和讀取吞吐量。
user
在InfluxDB里有兩種類型的用戶:
admin用戶對所有數據庫都有讀寫權限,并且有管理查詢和管理用戶的全部權限。
非admin用戶有針對database的可讀,可寫或者二者兼有的權限。
當認證開啟之后,InfluxDB只執行使用有效的用戶名和密碼發送的HTTP請求。
values per second
對數據持續到InfluxDB的速率的度量,寫入速度通常以values per second表示。
要計算每秒速率的值,將每秒寫入的點數乘以每點存儲的值數。 例如,如果這些點各有四個field,并且每秒寫入batch是5000個點,那么values per second是每點4個fieldx每batch 5000個點x10個batch/秒=每秒200,000個值。
wal(Write Ahead Log)
最近寫的點數的臨時緩存。為了減少訪問永久存儲文件的頻率,InfluxDB將最新的數據點緩沖進WAL中,直到其總大小或時間觸發然后flush到長久的存儲空間。這樣可以有效地將寫入batch處理到TSM中。
可以查詢WAL中的點,并且系統重啟后仍然保留。在進程開始時,在系統接受新的寫入之前,WAL中的所有點都必須flushed。