- InfluxDB原理與實(shí)戰(zhàn)
- 韓健
- 1934字
- 2020-04-30 17:41:08
1.2 InfluxDB的優(yōu)勢(shì)
存儲(chǔ)和分析時(shí)序數(shù)據(jù)的時(shí)序型系統(tǒng)并不鮮見,自計(jì)算機(jī)問世以來,我們一直在數(shù)據(jù)庫(kù)中存儲(chǔ)時(shí)序數(shù)據(jù)。最初,使用通用存儲(chǔ)系統(tǒng)存儲(chǔ)時(shí)序數(shù)據(jù),如MySQL。第一代時(shí)序平臺(tái),如KDB +、RRDtool、Graphite等,在20年前就推出了,主要用于存儲(chǔ)和分析數(shù)據(jù)中心的時(shí)序數(shù)據(jù),以及高頻金融數(shù)據(jù)、股票波動(dòng)率等。
根據(jù)DB-Engines等數(shù)據(jù)庫(kù)趨勢(shì)跟蹤和行業(yè)分析網(wǎng)站發(fā)布的信息,時(shí)序型數(shù)據(jù)庫(kù)是數(shù)據(jù)庫(kù)市場(chǎng)中份額增長(zhǎng)最快的部分。原因很明顯,計(jì)算機(jī)虛擬世界,如數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)、容器、系統(tǒng)、應(yīng)用程序等,和物理世界,如家用設(shè)備、城市基礎(chǔ)設(shè)施、工廠機(jī)器、電力設(shè)施等,正在創(chuàng)建海量的時(shí)序數(shù)據(jù)。現(xiàn)在更多的企業(yè)會(huì)通過時(shí)序存儲(chǔ)和數(shù)據(jù)分析來獲得預(yù)測(cè)能力和實(shí)時(shí)決策能力,從而為客戶提供更好的使用體驗(yàn)。這意味著底層數(shù)據(jù)平臺(tái)需要發(fā)展以應(yīng)對(duì)新的工作負(fù)載的挑戰(zhàn),以及更多的數(shù)據(jù)點(diǎn)、數(shù)據(jù)源、監(jiān)控維度、控制策略和精度更高的實(shí)時(shí)響應(yīng),對(duì)下一代時(shí)序中臺(tái)提出了更高的要求,具體如下所示。
?專為時(shí)序存儲(chǔ)和高性能讀寫而設(shè)計(jì):計(jì)算機(jī)虛擬世界的各種系統(tǒng)和應(yīng)用,以及物理世界的IoT設(shè)備等都在創(chuàng)建海量的時(shí)序數(shù)據(jù),每秒千萬級(jí)的數(shù)據(jù)吞吐量是很常見的,而且這些數(shù)據(jù)還需要可以以非阻塞方式接收并且可壓縮以節(jié)省有限的存儲(chǔ)資源。
?專為實(shí)時(shí)操作而設(shè)計(jì):預(yù)測(cè)能力和實(shí)時(shí)決策能力,需要收到數(shù)據(jù)后,就能實(shí)時(shí)輸出最新的數(shù)據(jù)分析結(jié)果,執(zhí)行預(yù)定義的操作。
?專為高可用性而設(shè)計(jì):現(xiàn)代軟件系統(tǒng)需要全天候可用,除了基本的集群能力,還需要根據(jù)需求自動(dòng)擴(kuò)容和縮容,支持柔性可用等。
InfluxData選擇從頭開始構(gòu)建InfluxDB以支持下一代時(shí)序中臺(tái)的需求,InfluxDB通過實(shí)現(xiàn)高度可擴(kuò)展的數(shù)據(jù)接收和存儲(chǔ)引擎,可以高效地實(shí)時(shí)收集、存儲(chǔ)、查詢、可視化顯示和執(zhí)行預(yù)定義操作。它通過連續(xù)查詢提升查詢效率和縮短延遲,通過數(shù)據(jù)保留策略,及時(shí)高效地刪除過期冷數(shù)據(jù),提升存儲(chǔ)效率。
為什么通用數(shù)據(jù)庫(kù)在時(shí)序場(chǎng)景上不是最優(yōu)的選擇呢?許多通用數(shù)據(jù)庫(kù)正在為時(shí)序數(shù)據(jù)添加一些支持,雖然可能很容易使用,但它們基本上都不是針對(duì)海量時(shí)序數(shù)據(jù)的吞吐量和實(shí)時(shí)操作而設(shè)計(jì)的。與InfluxDB相比,通用數(shù)據(jù)庫(kù),如Cassandra、MongoDB、HBase等,需要開發(fā)人員投入大量的時(shí)間進(jìn)行代碼編寫,以開發(fā)與InfluxDB類似的功能。具體來說,開發(fā)人員需要做如下工作:
?編寫代碼實(shí)現(xiàn)跨集群數(shù)據(jù)分片功能、聚合運(yùn)算和采樣功能、數(shù)據(jù)生命周期管理功能等。
?實(shí)現(xiàn)豐富的API接口。
?編寫用于數(shù)據(jù)采集的工具。
?實(shí)現(xiàn)實(shí)時(shí)處理模塊并編寫用于監(jiān)控和警報(bào)的代碼。
?編寫可視化引擎以向用戶顯示時(shí)序數(shù)據(jù)。
為了讓讀者對(duì)InfluxDB的優(yōu)勢(shì)有個(gè)直觀的認(rèn)識(shí),接下來,會(huì)把InfluxDB和其他被用作時(shí)序存儲(chǔ)的系統(tǒng)(如ElasticSearch、MongoDB、OpenTSDB)做簡(jiǎn)要的對(duì)比:
(1)InfluxDB vs ElasticSearch
ElasticSearch是專為搜索而設(shè)計(jì)的系統(tǒng),是實(shí)現(xiàn)搜索功能的絕佳選擇。然而,對(duì)于時(shí)序數(shù)據(jù),卻并非如此。在處理時(shí)序數(shù)據(jù)時(shí),InfluxDB的性能遠(yuǎn)遠(yuǎn)超過ElasticSearch系統(tǒng),對(duì)于寫入吞吐量,InfluxDB通常優(yōu)于ElasticSearch 5~10倍,具體差值取決于架構(gòu)。對(duì)于特定時(shí)序的查詢速度,使用ElasticSearch比使用InfluxDB要慢5~100倍,具體差值取決于查詢的時(shí)間范圍。最后,如果需要存儲(chǔ)原始數(shù)據(jù)以便稍后查詢,則ElasticSearch上的硬盤占用比InfluxDB大10~15倍。如果先匯總數(shù)據(jù)再存儲(chǔ),ElasticSearch的硬盤占用比InfluxDB大3~4倍。綜合來看,ElasticSearch非常適合進(jìn)行搜索,但不適用于時(shí)序存儲(chǔ)和實(shí)時(shí)分析。
(2)InfluxDB vs MongoDB
MongoDB是一個(gè)開源的、面向文檔的數(shù)據(jù)庫(kù),俗稱NoSQL數(shù)據(jù)庫(kù),用C和C ++語(yǔ)言編寫。雖然它通常不被認(rèn)為是真正的時(shí)序型數(shù)據(jù)庫(kù)(TSDB),但它經(jīng)常被用作時(shí)序存儲(chǔ)系統(tǒng)。它以時(shí)間戳和分組的形式提供建模原語(yǔ),使用戶能夠存儲(chǔ)和查詢時(shí)序數(shù)據(jù)。MongoDB旨在存儲(chǔ)“無模式”數(shù)據(jù),其中每個(gè)對(duì)象可能具有不同的結(jié)構(gòu)。實(shí)際上,MongoDB通常用于存儲(chǔ)內(nèi)容大小可變的JSON或BSON對(duì)象。由于其采用通用性和無模式數(shù)據(jù)存儲(chǔ)區(qū)設(shè)計(jì),MongoDB無法利用時(shí)序數(shù)據(jù)的高度結(jié)構(gòu)化特性。需要特別指出的是,時(shí)序數(shù)據(jù)由標(biāo)簽(鍵/值串對(duì))和時(shí)間戳組成,這時(shí)必須對(duì)MongoDB做專門配置以支持時(shí)序數(shù)據(jù),但這樣做效率很低。相比MongoDB, InfluxDB的性能和成本優(yōu)勢(shì)明顯,InfluxDB的寫性能大約是MongoDB的2.4倍,存儲(chǔ)效率大約是MongoDB的20倍,查詢效率大約是MongoDB的5.7倍。綜合來看,MongoDB非常適合文檔和自定義對(duì)象,但不適用于大規(guī)模的時(shí)序數(shù)據(jù)和實(shí)時(shí)分析。
(3)InfluxDB vs OpenTSDB
OpenTSDB是一個(gè)可擴(kuò)展的分布式時(shí)序型數(shù)據(jù)庫(kù),用Java語(yǔ)言編寫,構(gòu)建在HBase之上。它最初是由Beno?t Sigoure于2010年開始編寫的,并在LGPL下開源。OpenTSDB不是一個(gè)獨(dú)立的時(shí)序型數(shù)據(jù)庫(kù),相反,它依賴HBase作為其數(shù)據(jù)存儲(chǔ)層,因此OpenTSDB時(shí)序守護(hù)進(jìn)程(OpenTSDB中的TSD用語(yǔ))在實(shí)例之間沒有共享狀態(tài)可以高效地提供查詢引擎的功能。OpenTSDB允許通過其API進(jìn)行簡(jiǎn)單的聚合和數(shù)學(xué)運(yùn)算,但沒有完整的查詢語(yǔ)言。OpenTSDB支持毫秒的分辨率,但隨著亞毫秒級(jí)操作的普及,OpenTSDB有時(shí)會(huì)出現(xiàn)精度不足的問題。相比OpenTSDB, InfluxDB的性能和成本優(yōu)勢(shì)明顯,InfluxDB的寫性能大約是OpenTSDB的5倍,存儲(chǔ)效率大約是OpenTSDB的16.5倍,查詢效率大約是OpenTSDB的3.65倍。另外,OpenTSDB的設(shè)計(jì)初衷主要是用于生成儀表板圖,不是為了滿足任意查詢,也不是為了存儲(chǔ)數(shù)據(jù)。這些限制會(huì)影響它的使用方式。
- Effective Amazon Machine Learning
- 商業(yè)分析思維與實(shí)踐:用數(shù)據(jù)分析解決商業(yè)問題
- Python醫(yī)學(xué)數(shù)據(jù)分析入門
- 中國(guó)數(shù)字流域
- 大數(shù)據(jù)架構(gòu)和算法實(shí)現(xiàn)之路:電商系統(tǒng)的技術(shù)實(shí)戰(zhàn)
- ZeroMQ
- PostgreSQL指南:內(nèi)幕探索
- Spark分布式處理實(shí)戰(zhàn)
- Hadoop 3實(shí)戰(zhàn)指南
- 數(shù)據(jù)分析師養(yǎng)成寶典
- 智慧城市中的大數(shù)據(jù)分析技術(shù)
- 社交網(wǎng)站的數(shù)據(jù)挖掘與分析(原書第2版)
- 數(shù)據(jù)時(shí)代的品牌智造
- 數(shù)字孿生
- 一本書講透數(shù)據(jù)治理:戰(zhàn)略、方法、工具與實(shí)踐