據(jù)IDC預(yù)測,全球數(shù)據(jù)將從2018年的33ZB(澤字節(jié))增長到2025年的175ZB,年均復(fù)合增長率為23%。到2025年,全球聯(lián)網(wǎng)設(shè)備會有1500億臺,其中大多數(shù)設(shè)備將產(chǎn)生實(shí)時數(shù)據(jù)。屆時,實(shí)時數(shù)據(jù)將超過其他類型的數(shù)據(jù),成為全球第一大數(shù)據(jù)。
智能制造2025、工業(yè)互聯(lián)網(wǎng)、工業(yè)4.0等政策推動了時序數(shù)據(jù)庫的發(fā)展,全球?qū)I(yè)品的需求逐年上升。中國作為工業(yè)大國,2020年開始大力發(fā)展新基建,時序數(shù)據(jù)庫作為智能制造的基礎(chǔ)軟件,其發(fā)展也同步受到關(guān)注。
和操作系統(tǒng)一樣,數(shù)據(jù)庫屬于基礎(chǔ)軟件,更新迭代慢,一旦使用,可以在生產(chǎn)環(huán)境運(yùn)行十幾年,替換成本高,且企業(yè)替換意愿不強(qiáng)。企業(yè)初期選擇數(shù)據(jù)庫會非常慎重,使用后無論是管理層、執(zhí)行層,還是技術(shù)人員都很難主動提出替換建議。
替換成本高、周期長、風(fēng)險高造成了企業(yè)只相信頭部數(shù)據(jù)庫產(chǎn)品。毫無疑問,目前使用最多、技術(shù)生態(tài)最完善的時序數(shù)據(jù)庫之一就是InfluxDB。InfluxDB是一個開源的、高性能的時序數(shù)據(jù)庫,在時序數(shù)據(jù)庫榜單DB-Engines Ranking上排名第一。正因?yàn)槿绱耍炀氄莆誌nfluxDB已成為相關(guān)開發(fā)者非常重要的一項(xiàng)技能。本書將帶領(lǐng)大家從InfluxDB的基礎(chǔ)開始,一步一步理解InfluxDB,相信這些內(nèi)容會對大家有幫助。
如何閱讀本書
本書既是教程,又是參考指南,同時也適合作為高校相關(guān)專業(yè)教材。如果讀者剛剛接觸時序數(shù)據(jù)庫開發(fā),按照本書的章節(jié)順序?qū)W習(xí)定會有所收獲。
本書共14章,每章的內(nèi)容簡單介紹如下:
第1章主要介紹了什么是時序數(shù)據(jù)、InfluxDB是什么,以及InfluxDB的發(fā)展歷史。
第2章主要介紹了InfluxDB的安裝及配置。
第3章主要介紹了InfluxDB的可視化UI工具。
第4章主要介紹了InfluxDB的基本寫入、查詢操作。
第5章主要介紹了InfluxDB的常用函數(shù)和運(yùn)算。
第6章主要介紹了InfluxDB的連續(xù)查詢。
第7章主要介紹了InfluxDB的數(shù)據(jù)保留策略。
第8章主要介紹了InfluxDB的數(shù)據(jù)安全策略。
第9章主要介紹了InfluxDB的性能評估。
第10章主要介紹了InfluxDB集群相關(guān)內(nèi)容。
第11章主要介紹了InfluxDB的數(shù)據(jù)備份與恢復(fù)。
第12章主要介紹了InfluxDB與程序設(shè)計(jì)。
第13章主要介紹了InfluxDB數(shù)據(jù)處理語言FLux。
第14章主要介紹了InfluxDB存儲引擎知識。
讀者對象
在本書的編寫過程中,盡可能做到通俗易懂、由淺入深,不僅適用于初學(xué)者學(xué)習(xí),也適用于專業(yè)人員學(xué)習(xí)。
本書可作為高校相關(guān)專業(yè)教材,也適合軟件工程師、軟件架構(gòu)師、數(shù)據(jù)庫工程師等從業(yè)人員閱讀。
讀者交流與圖書反饋
本書的讀者還可以訪問InfluxDB專欄補(bǔ)充學(xué)習(xí)。該專欄搭建了一個供開發(fā)者交流學(xué)習(xí)的在線平臺,閱讀過程中如有疑問,也可以在網(wǎng)站上向作者提問,期待能夠得到你們的真摯反饋。
由于作者水平有限,編寫時間倉促,書中難免會出現(xiàn)一些錯誤或表達(dá)不準(zhǔn)確的地方,懇請讀者批評指正。我們也會將書中的勘誤發(fā)布在專欄中,供大家參考。
編寫說明
本書編寫團(tuán)隊(duì)由業(yè)界一線研發(fā)人員組成,其中鄭強(qiáng)負(fù)責(zé)全書的框架搭建及第1~9章的撰寫,字?jǐn)?shù)約28萬字;張偉負(fù)責(zé)第10~13章的撰寫,字?jǐn)?shù)約6萬字;劉爽負(fù)責(zé)第14章的撰寫,字?jǐn)?shù)約2萬字。
致謝
感謝清華大學(xué)出版社的編輯,因?yàn)槟銈兊膸椭,這本書才得以問世。最后要感謝的就是你,我親愛的讀者,感謝你拿起這本書,你的認(rèn)可是我們最大的快樂。
作者
第1章 時序數(shù)據(jù)庫InfluxDB簡介
1.1 數(shù)據(jù)簡史 2
1.1.1 什么是時序數(shù)據(jù) 3
1.1.2 時序數(shù)據(jù)庫的歷史 3
1.2 InfluxDB簡介 4
1.2.1 什么是InfluxDB 4
1.2.2 InfluxDB的歷史 5
1.2.3 InfluxDB現(xiàn)狀及未來 6
1.3 InfluxDB的基本概念 7
1.4 InfluxDB的設(shè)計(jì)理念 7
1.5 InfluxDB的核心特性 8
1.5.1 內(nèi)置REST接口 8
1.5.2 數(shù)據(jù)Tag標(biāo)記 8
1.5.3 類SQL的查詢語句 9
1.5.4 高性能 9
1.5.5 開源 10
1.6 時序數(shù)據(jù)庫的應(yīng)用場景 10
1.6.1 在工業(yè)環(huán)境監(jiān)控中的應(yīng)用 10
1.6.2 在物聯(lián)網(wǎng)IoT設(shè)備采集存儲中的應(yīng)用 11
1.6.3 互聯(lián)網(wǎng)業(yè)務(wù)性能監(jiān)控服務(wù) 11
1.6.4 在智能汽車中的應(yīng)用 12
1.7 小結(jié) 12
第2章 InfluxDB的安裝、配置、啟動
2.1 在不同操作系統(tǒng)上安裝InfluxDB14
2.1.1 硬件要求 14
2.1.2 在Ubuntu和Debian系統(tǒng)中安裝InfluxDB 15
2.1.3 在RedHat和CentOS系統(tǒng)中安裝InfluxDB 20
2.1.4 在Windows系統(tǒng)中安裝InfluxDB21
2.1.5 在macOS系統(tǒng)中安裝InfluxDB 22
2.1.6 使用Docker安裝InfluxDB 24
2.1.7 InfluxDB的端口設(shè)置 25
2.1.8 InfluxDB 程序的使用 25
2.1.9 InfluxDB的配置詳解 31
2.2 小結(jié) 37
第3章InfluxDB UI數(shù)據(jù)可視化
3.1 InfluxDB UI 39
3.1.1 安裝配置 39
3.1.2 常用功能介紹 41
3.2 Chronograf 47
3.2.1 安裝配置 48
3.2.2 常用功能介紹 50
3.3 小結(jié) 57
第4章InfluxDB基本操作寫入與查詢
4.1 客戶端命令行方式 59
4.1.1 簡介59
4.1.2 使用InfluxDB 59
4.1.3 Influx基本命令61
4.2 數(shù)據(jù)樣本 62
4.2.1 空氣傳感器樣本數(shù)據(jù) 63
4.2.2 鳥類遷徙樣本數(shù)據(jù) 64
4.2.3 NOAA樣本數(shù)據(jù) 64
4.2.4 美國地質(zhì)勘探局地震數(shù)據(jù) 64
4.3 行協(xié)議 65
4.3.1 行協(xié)議案例 65
4.3.2 行協(xié)議語法 66
4.3.3 行協(xié)議要素分析 66
4.3.4 數(shù)據(jù)類型 67
4.3.5 引號68
4.3.6 特殊字符 68
4.3.7 注釋69
4.3.8 重復(fù)數(shù)據(jù) 69
4.4 桶操作 70
目 錄
VII
4.5 寫入操作 71
4.5.1 寫入數(shù)據(jù) 71
4.5.2 文件數(shù)據(jù)導(dǎo)入 72
4.6 查詢操作 73
4.6.1 select語句 74
4.6.2 類型轉(zhuǎn)換 77
4.6.3 where子句 78
4.6.4 函數(shù) 80
4.6.5 group by子句 82
4.6.6 into子句 85
4.6.7 排序 86
4.6.8 limit和slimit子句 86
4.6.9 offset和soffset子句 86
4.6.10 Time Zone子句 87
4.6.11 時間語法 87
4.7 小結(jié) 88
第5章 InfluxDB的函數(shù)與運(yùn)算
5.1 樣本數(shù)據(jù)導(dǎo)入 90
5.2 InfluxDB函數(shù) 91
5.2.1 函數(shù)說明 91
5.2.2 聚合類函數(shù) 92
5.2.3 選擇類函數(shù) 94
5.2.4 轉(zhuǎn)換類函數(shù) 95
5.2.5 預(yù)測類函數(shù) 98
5.3 數(shù)學(xué)運(yùn)算 99
5.3.1 常用運(yùn)算符 99
5.3.2 數(shù)學(xué)運(yùn)算符的常見問題 101
5.4 小結(jié) 102
第6章 InfluxDB連續(xù)查詢
6.1 連續(xù)查詢 104
6.2 樣本數(shù)據(jù)導(dǎo)入 104
6.3 創(chuàng)建連續(xù)查詢 106
6.3.1 語句 106
6.3.2 連續(xù)查詢運(yùn)行時刻及查詢的時間范圍 107
6.3.3 連續(xù)查詢舉例 107
6.4 復(fù)雜連續(xù)查詢 109
6.4.1 創(chuàng)建高級連續(xù)查詢 109
6.4.2 高級連續(xù)查詢的時間設(shè)置 109
6.4.3 GROUP BY time()、EVERY、FOR三者關(guān)系 111
6.4.4 高級連續(xù)查詢舉例 112
6.5 連續(xù)查詢的管理 113
6.5.1 查詢所有連續(xù)查詢 113
6.5.2 刪除連續(xù)查詢 114
6.5.3 修改連續(xù)查詢 114
6.6 連續(xù)查詢案例分析 114
6.6.1 數(shù)據(jù)預(yù)處理 115
6.6.2 降低數(shù)據(jù)采樣率 115
6.6.3 HAVING功能 116
6.6.4 替換嵌套函數(shù) 116
6.7 小結(jié) 117
第7章InfluxDB數(shù)據(jù)保留策略
7.1 保留策略 119
7.2 創(chuàng)建保留策略 119
7.2.1 使用CREATE RETENTION POLICY創(chuàng)建保留策略 119
7.2.2 創(chuàng)建保留策略舉例 121
7.3 查詢保留策略 121
7.4 修改保留策略 122
7.5 刪除保留策略 123
7.6 綜合實(shí)例 123
7.6.1 樣本數(shù)據(jù) 123
7.6.2 實(shí)驗(yàn)?zāi)繕?biāo) 124
7.6.3 實(shí)驗(yàn)過程 124
7.6.4 結(jié)論126
7.7 小結(jié) 126
第8章InfluxDB數(shù)據(jù)安全策略
8.1 認(rèn)證技術(shù) 128
8.1.1 簡介128
8.1.2 認(rèn)證方式 128
8.1.3 Token認(rèn)證 128
8.1.4 1.x版本兼容授權(quán)認(rèn)證 131
目 錄
8.1.5 授權(quán)使用 137
8.2 權(quán)限類型 142
8.3 用戶管理 143
8.4 權(quán)限控制實(shí)戰(zhàn) 146
8.4.1 創(chuàng)建與授權(quán) 146
8.4.2 測試效果 147
8.5 小結(jié) 149
第9章 InfluxDB性能評估
9.1 性能測試工具 151
9.1.1 安裝Go語言運(yùn)行環(huán)境 151
9.1.2 測試工具安裝 153
9.2 基準(zhǔn)性能測試 154
9.2.1 測試環(huán)境 154
9.2.2 寫入性能測試 154
9.3 性能優(yōu)化 157
9.3.1 數(shù)據(jù)寫入優(yōu)化方案 157
9.3.2 數(shù)據(jù)查詢優(yōu)化方案 157
9.4 性能報警 159
9.4.1 創(chuàng)建檢查 159
9.4.2 添加通知端點(diǎn) 162
9.4.3 創(chuàng)建通知規(guī)則 163
9.5 小結(jié) 164
第10章 InfluxDB集群
10.1 集群簡介 166
10.1.1 集群架構(gòu)概述 166
10.1.2 數(shù)據(jù)所在的地方 166
10.1.3 節(jié)點(diǎn)數(shù)量 167
10.2 集群安裝配置 167
10.2.1 申請?jiān)囉?167
10.2.2 環(huán)境準(zhǔn)備 169
10.2.3 添加DNS條目 170
10.2.4 Meta節(jié)點(diǎn)的安裝配置 171
10.2.5 Data節(jié)點(diǎn)的安裝配置 173
10.3 小結(jié) 176
第11章 備份管理
11.1 單機(jī)版?zhèn)浞莨芾?178
11.1.1 備份數(shù)據(jù) 178
11.1.2 恢復(fù)數(shù)據(jù) 179
11.2 集群版?zhèn)浞莨芾?180
11.2.1 備份數(shù)據(jù) 181
11.2.2 恢復(fù)數(shù)據(jù) 182
11.2.3 導(dǎo)出數(shù)據(jù) 184
11.2.4 導(dǎo)入數(shù)據(jù) 185
11.3 小結(jié) 185
第12章 InfluxDB與程序設(shè)計(jì)
12.1 Java SDK使用 187
12.1.1 使用Java在InfluxDB中寫入數(shù)據(jù) 188
12.1.2 WriteApiBlocking 192
12.1.3 使用Java查詢InfluxDB中的數(shù)據(jù) 193
12.1.4 queryApi 195
12.1.5 使用Java為bucket添加權(quán)限 196
12.1.6 連接InfluxDB的另一種方式用戶名和密碼 198
12.2 Python SDK使用 200
12.2.1 使用Python在InfluxDB中寫入數(shù)據(jù) 201
12.2.2 使用Python查詢InfluxDB中的數(shù)據(jù) 202
12.3 小結(jié) 203
第13章 InfluxDB數(shù)據(jù)處理語言Flux
13.1 Flux概述 205
13.2 基本數(shù)據(jù)類型 205
13.2.1 Boolean(布爾值) 206
13.2.2 Bytes(字節(jié)) 206
13.2.3 Duration(持續(xù)時間) 206
13.2.4 String(字符串類型) 207
13.2.5 Time(時間類型) 207
13.2.6 Float(浮點(diǎn)類型) 208
13.2.7 Integer(整數(shù)類型) 208
13.2.8 Null(空值) 209
13.3 查詢數(shù)據(jù)源 209
13.3.1 from()函數(shù) 210
13.3.2 range()函數(shù) 210
13.3.3 查詢InfluxDB 1.x 211
13.3.4 遠(yuǎn)程查詢InfluxDB Cloud 或InfluxDB 2.x 211
13.4 寫入數(shù)據(jù)源 212
13.5 小結(jié) 213
第14章 InfluxDB存儲引擎
14.1 InfluxDB存儲引擎歷史 215
14.2 LSM-Tree(LSM樹)概述215
14.2.1 LSM-Tree存儲原理 216
14.2.2 優(yōu)勢和問題 220
14.3 InfluxDB數(shù)據(jù)格式 220
14.4 TSM存儲組件 221
14.5 TSM file詳解 222
14.5.1 SeriesKey(時間序列關(guān)鍵字) 223
14.5.2 Series Data Block 224
14.5.3 Series Index Block 225
14.6 TSM數(shù)據(jù)寫入 227
14.6.1 寫入總體框架 227
14.6.2 Shard路由 228
14.6.3 倒排索引引擎構(gòu)建倒排索引 228
14.6.4 寫入流程 229
14.7 小結(jié) 230