關鍵概念
在深入了解TSDB For InfluxDB?前,最好先熟悉數據庫的一些關鍵概念。本文簡單地介紹了這些概念和在TSDB For InfluxDB?中的常用術語。我們在下面列出了我們將涵蓋的所有術語,但是建議您從頭到尾閱讀本文檔,以便更全面地了解TSDB For InfluxDB?。
database | field key | field set |
---|---|---|
field value | measurement | point |
retention policy | series | tag key |
tag set | tag value | timestamp |
關于更詳細的描述,請查看文檔專業術語。
示例數據
下一章節將參考下面列出來的數據。雖然這些數據是虛構的,但是在TSDB For InfluxDB?中具有代表性。這些數據展示了從2015年8月18日午夜到2015年8月18日6時12分,兩位科學家(langstroth
和perpetua
)在兩個地點(location 1
和location 2
)分別計數得出的butterflies
和honeybees
的數量。假設數據存儲在名為my_database
的數據庫中,并受到數據保留策略autogen
的約束。其中,census
是measurement;time
列中的是時間戳;butterflies
和honeybees
都是field key,butterflies
列和honeybees
列中的數據是field value,location
和scientist
都是tag key,location
列和scientist
列中的數據是tag value。
name: census
time | butterflies | honeybees | location | scientist |
---|---|---|---|---|
2015-08-18T00:00:00Z | 12 | 23 | 1 | langstroth |
2015-08-18T00:00:00Z | 1 | 30 | 1 | perpetua |
2015-08-18T00:06:00Z | 11 | 28 | 1 | langstroth |
2015-08-18T00:06:00Z | 3 | 28 | 1 | perpetua |
2015-08-18T05:54:00Z | 2 | 11 | 2 | langstroth |
2015-08-18T06:00:00Z | 1 | 10 | 2 | langstroth |
2015-08-18T06:06:00Z | 8 | 23 | 2 | perpetua |
2015-08-18T06:12:00Z | 7 | 22 | 2 | perpetua |
討論
現在您已經在TSDB For InfluxDB?中看到了一些示例數據,這一章節將詳細分析這些數據的含義。
TSDB For InfluxDB?是一個時序數據庫,因此從時間開始分析是有意義。在上面的數據中,有一列是time
,TSDB For InfluxDB?中所有的數據都有這一列。time
存儲著時間戳,并且時間戳是以RFC3339 UTC格式展示與特定數據相關聯的日期和時間。
接下來的兩列,名為butterflies
和honeybees
,稱為field。field由field key和field value組成,其中,field key(butterflies
和honeybees
)是字符串,field key butterflies
告訴我們蝴蝶的數量:從12到7,而field key honeybees
告訴我們蜜蜂的數量:從23到22。
field value是您的數據,它們可以是字符串、浮點數、整數或者布爾值。因為TSDB For InfluxDB?是一個時序數據庫,所以field value始終和時間戳相關聯。示例數據中的field value如下:
12 23
1 30
11 28
3 28
2 11
1 10
8 23
7 22
field key-value對的集合組成一個field set,上面示例數據中總共有8個field set:
* butterflies = 12 honeybees = 23
* butterflies = 1 honeybees = 30
* butterflies = 11 honeybees = 28
* butterflies = 3 honeybees = 28
* butterflies = 2 honeybees = 11
* butterflies = 1 honeybees = 10
* butterflies = 8 honeybees = 23
* butterflies = 7 honeybees = 22
field是TSDB For InfluxDB?數據結構中必要部分之一,在TSDB For InfluxDB?中不能沒有field。同樣需要注意的是,field是沒有索引的。如果使用field value作為過濾條件來進行查詢,那么必須掃描完所有數據,才能找到與查詢中的其它條件也都匹配的所有結果。因此,相對于用tag作為過濾條件的查詢來說,那些用field value作為過濾條件的查詢性能會低很多(下文會有更多關于tag的介紹)。一般來說,field不應該包含經常被查詢的元數據(metadata)。
示例數據中的最后兩列location
和scientist
,就是tag。tag由tag key和tag value組成。tag key和tag value都是字符串,并記錄元數據。示例數據中的tag key是location
和scientist
,其中,location
有兩個tag value:1
和2
,scientist
也有兩個tag value:langstroth
和perpetua
。
在上面的數據中,tag set是所有tag key-value對的不同組合。示例數據中有4個tag set:
* location = 1, scientist = langstroth
* location = 2, scientist = langstroth
* location = 1, scientist = perpetua
* location = 2, scientist = perpetua
在TSDB For InfluxDB?中,tag不是必須要有的字段,您不需要一定在數據結構中添加tag。但是,使用tag通常大有裨益。因為不像field,tag是被索引的,這意味著以tag作為過濾條件的查詢會更快,所以tag非常適合存儲經常被查詢的元數據。
為什么索引很重要:Schema案例研究
假設您的大多數查詢都是以field key butterflies
和honeybees
的值作為過濾條件:SELECT FROM “census” WHERE “butterflies” = 1SELECT FROM “census” WHERE “honeybees” = 23
因為沒有在field上建索引,TSDB For InfluxDB?會在第一個查詢中掃描butterflies
的每個值,并在第二個查詢中掃描honeybees
的每個值,然后才能返回查詢結果。這種方式會大大拉長查詢響應時間,特別是當查詢規模變得更大的時候。為了優化查詢性能,可以重新調整數據的schema結構,使原來的field(butterflies
和honeybees
)變為tag,tag(location
和scientist
)變為field:
name: census
time | location | scientist | butterflies | honeybees |
---|---|---|---|---|
2015-08-18T00:00:00Z | 1 | langstroth | 12 | 23 |
2015-08-18T00:00:00Z | 1 | perpetua | 1 | 30 |
2015-08-18T00:06:00Z | 1 | langstroth | 11 | 28 |
2015-08-18T00:06:00Z | 1 | perpetua | 3 | 28 |
2015-08-18T05:54:00Z | 2 | langstroth | 2 | 11 |
2015-08-18T06:00:00Z | 2 | langstroth | 1 | 10 |
2015-08-18T06:06:00Z | 2 | perpetua | 8 | 23 |
2015-08-18T06:12:00Z | 2 | perpetua | 7 | 22 |
注意到現在butterflies
和honeybees
是tag,當再執行上面的查詢時,TSDB For InfluxDB?不需要在掃描它們的每一個值后才能返回結果了。
measurement作為tag,field和time
列的容器,measurement的名字對存儲在相關field中數據的描述。measurement的名字是字符串,對于SQL用戶來說,measurement在概念上類似于table(表格)。示例數據中只有一個measurement,就是census
。census
告訴我們field value記錄了butterflies
和honeybees
的數量,而不是它們的大小、方向或某種幸福指數。
一個measurement可以有不同的保留策略(retention policies)。一個保留策略描述了TSDB For InfluxDB?保存數據的時間(DURATION
)以及存儲在集群中數據的副本數量(REPLICATION
)。
復制系數(replication factors)不適用于單節點實例。
在示例數據中,census
中的所有數據屬于保留策略autogen
。TSDB For InfluxDB?自動創建autogen
這個保留策略,它具有無限的存儲時間并且復制系數設為1。
現在您已經熟悉了measurement,tag set和保留策略,是時候討論序列(series)了。在TSDB For InfluxDB?中,序列是有共同的保留策略、measurement和tag set的數據的集合。以上示例數據中的共有4個序列:
Arbitrary series number | Retention policy | Measurement | Tag set |
---|---|---|---|
series 1 | autogen | census | location = 1, scientist = langstroth |
series 2 | autogen | census | location = 2, scientist = langstroth |
series 3 | autogen | census | location = 1, scientist = perpetua |
series 4 | autogen | census | location = 2, scientist = perpetua |
在設計數據的schema和在TSDB For InfluxDB?中處理數據時,理解序列的概念是很有必要的。
最后,數據點(point)就是在相同序列里,具有相同時間戳的field set。例如,這就是一個數據點:
name: census
-----------------
time butterflies honeybees location scientist
2015-08-18T00:00:00Z 1 30 1 perpetua
上面例子中的序列,其保留策略為autogen
,measurement為census
,tag set為location = 1, scientist = perpetua
。該數據點的時間戳是2015-08-18T00:00:00Z
。
我們剛剛介紹的所有內容都存儲在數據庫(database)中——示例數據存在數據庫my_database
。TSDB For InfluxDB?數據庫與傳統數據庫類似,并且作為用戶、保留策略、連續查詢和時序數據的邏輯容器。
數據庫可以有多個用戶、連續查詢、保留策略和measurement。TSDB For InfluxDB?是一個schemaless(無模式)數據庫,意味著隨時可以輕松地添加新的measurement、tag和field。TSDB For InfluxDB?的設計宗旨就是能夠很好地處理時序數據。
恭喜您,您已經完整地閱讀完本文檔了。通過本文檔,您已經知道了TSDB For InfluxDB?中的基本概念和術語。如果您是初學者,我們建議您瀏覽文檔入門指南、通過HTTP API寫入數據和通過HTTP API查詢數據。希望我們的時序數據庫能夠很好地為您服務。
InfluxDB? is a trademark registered by InfluxData, which is not affiliated with, and does not endorse, TSDB for InfluxDB?.