發(fā)布于:2021-01-07 10:29:35
0
2410
0
顧名思義,時(shí)間序列數(shù)據(jù)庫(kù)旨在存儲(chǔ)隨時(shí)間變化的數(shù)據(jù)。這可以是隨時(shí)間收集的任何類型的數(shù)據(jù)。它可能是從某些系統(tǒng)收集的指標(biāo),實(shí)際上,所有趨勢(shì)系統(tǒng)都是時(shí)間序列數(shù)據(jù)的示例。
我們有不同類型的時(shí)間序列數(shù)據(jù)庫(kù),應(yīng)該使用哪些數(shù)據(jù)庫(kù)?
在此博客中,我們將看到兩個(gè)主要選項(xiàng)TimescaleDB和InfluxDB之間的主要區(qū)別是什么。
InfluxDB是由InfluxData創(chuàng)建的。它是用Go語(yǔ)言編寫(xiě)的自定義,開(kāi)源,NoSQL時(shí)間序列數(shù)據(jù)庫(kù)。數(shù)據(jù)存儲(chǔ)區(qū)提供了一種類似于SQL的語(yǔ)言來(lái)查詢數(shù)據(jù),稱為InfluxQL,這使開(kāi)發(fā)人員可以輕松地將其集成到其應(yīng)用程序中。它還具有一種稱為Flux的新的自定義查詢語(yǔ)言,該語(yǔ)言可以使某些任務(wù)更輕松,但是在采用自定義查詢語(yǔ)言時(shí)總會(huì)有學(xué)習(xí)上的彎路。
這是一個(gè)Flux查詢示例:
1個(gè) 2 3 4 |
|
在此數(shù)據(jù)庫(kù)中,每個(gè)度量都有一個(gè)時(shí)間戳,以及一組關(guān)聯(lián)的標(biāo)簽和一組字段。該字段代表實(shí)際的測(cè)量讀數(shù)值,而標(biāo)簽代表描述測(cè)量的元數(shù)據(jù)。字段數(shù)據(jù)類型僅限于浮點(diǎn)數(shù),整數(shù),字符串和布爾值,并且如果不重寫(xiě)數(shù)據(jù)就無(wú)法更改。標(biāo)簽值被索引。它們以字符串表示,無(wú)法更新。
InfluxDB入門非常容易,因?yàn)槟槐負(fù)?dān)心創(chuàng)建模式或索引。但是,它非常嚴(yán)格且受限制,無(wú)法創(chuàng)建其他索引,在連續(xù)字段上建立索引,事后更新元數(shù)據(jù),強(qiáng)制執(zhí)行數(shù)據(jù)驗(yàn)證等。
它不是無(wú)模式的。有一個(gè)從輸入數(shù)據(jù)自動(dòng)創(chuàng)建的基礎(chǔ)架構(gòu)。
InfluxDB必須從頭開(kāi)始實(shí)施多種容錯(cuò)工具,例如復(fù)制,高可用性和備份/還原,并且要對(duì)其磁盤可靠性負(fù)責(zé)。我們僅限于使用這些工具,并且其中許多功能(例如HA)僅在企業(yè)版中可用。
InfluxDB備份工具可以執(zhí)行完整或增量備份,并且可以用于時(shí)間點(diǎn)恢復(fù)。
InfluxDB還提供了比PostgreSQL和TimescaleDB更好的磁盤壓縮。
TimescaleDB是一個(gè)開(kāi)放源代碼的時(shí)間序列數(shù)據(jù)庫(kù),已針對(duì)支持全面SQL的快速提取和復(fù)雜查詢進(jìn)行了優(yōu)化。它基于PostgreSQL,并且為時(shí)間序列數(shù)據(jù)提供了最好的NoSQL和Relational世界。
這是一個(gè)TimescaleDB查詢示例:
1個(gè) 2 3 4 |
|
作為PostgreSQL擴(kuò)展,TimescaleDB是一個(gè)關(guān)系數(shù)據(jù)庫(kù)。這使新用戶的學(xué)習(xí)曲線更短,并可以繼承用于備份的工具pg_dump或pg_backup和高可用性工具,這在其他時(shí)間序列數(shù)據(jù)庫(kù)之前是一個(gè)優(yōu)勢(shì)。它還支持流復(fù)制作為主要的復(fù)制方法,可以在高可用性設(shè)置中使用它。在故障轉(zhuǎn)移和備份方面,您可以使用ClusterControl之類的外部系統(tǒng)來(lái)自動(dòng)執(zhí)行此過(guò)程。
在TimescaleDB中,每個(gè)時(shí)間序列測(cè)量值都記錄在其自己的行中,其中時(shí)間字段后跟任意數(shù)量的其他字段,這些字段可以是浮點(diǎn)數(shù),整數(shù),字符串,布爾值,數(shù)組,JSON blob,地理空間尺寸,日期/時(shí)間/時(shí)間戳,貨幣,二進(jìn)制數(shù)據(jù)等。
您可以在任何字段(標(biāo)準(zhǔn)索引)或多個(gè)字段(復(fù)合索引)上創(chuàng)建索引,也可以在函數(shù)之類的表達(dá)式上創(chuàng)建索引,甚至可以將索引限制為行的子集(部分索引)。這些字段中的任何一個(gè)都可以用作輔助表的外鍵,然后該表可以存儲(chǔ)其他元數(shù)據(jù)。
這樣,您需要選擇一個(gè)模式,并確定系統(tǒng)需要哪些索引。
如果我們談?wù)撔阅埽敲纯梢圆榭春馨舻腡imescaleDB比較博客。在那里,您可以通過(guò)圖表和指標(biāo)對(duì)兩個(gè)數(shù)據(jù)庫(kù)之間的性能進(jìn)行詳細(xì)比較。讓我們看看該博客中的一些最重要的信息。
對(duì)于基數(shù)非常低的工作負(fù)載(例如100個(gè)設(shè)備),InfluxDB的性能優(yōu)于TimescaleDB。
隨著基數(shù)的增加,InfluxDB插入性能下降的速度快于TimescaleDB。
對(duì)于中到高基數(shù)的工作負(fù)載(例如,100個(gè)設(shè)備發(fā)送10個(gè)指標(biāo)),TimescaleDB的性能要優(yōu)于InfluxDB。
對(duì)于簡(jiǎn)單查詢,結(jié)果相差很大:在某些情況下,一個(gè)數(shù)據(jù)庫(kù)明顯優(yōu)于另一個(gè)數(shù)據(jù)庫(kù),而其他數(shù)據(jù)庫(kù)則取決于數(shù)據(jù)集的基數(shù)。此處的差異通常在一位數(shù)到兩位數(shù)的毫秒數(shù)范圍內(nèi)。
對(duì)于復(fù)雜的查詢,TimescaleDB的性能大大優(yōu)于InfluxDB,并支持范圍更廣的查詢類型。這里的差異通常在幾秒到幾十秒之間。
考慮到這一點(diǎn),正確測(cè)試的最佳方法是使用您計(jì)劃執(zhí)行的查詢進(jìn)行基準(zhǔn)測(cè)試。
InfluxDB在基數(shù)高(100K +)時(shí)存在穩(wěn)定性和性能問(wèn)題。
如果您的數(shù)據(jù)適合InfluxDB數(shù)據(jù)模型,并且您不希望將來(lái)發(fā)生變化,那么您應(yīng)該考慮使用InfluxDB,因?yàn)樵撃P透菀咨鲜?,就像大多?shù)使用面向列方法的數(shù)據(jù)庫(kù)一樣,提供比PostgreSQL和TimescaleDB更好的磁盤壓縮。
但是,關(guān)系模型比InfluxDB模型具有更多的通用性,并提供更多的功能,靈活性和控制力。隨著應(yīng)用程序的發(fā)展,這一點(diǎn)尤其重要。在計(jì)劃系統(tǒng)時(shí),應(yīng)同時(shí)考慮當(dāng)前和將來(lái)的需求。
在此博客中,我們可以看到TimescaleDB和InfluxDB之間的簡(jiǎn)短比較,并且可以說(shuō)TimescaleDB作為PostgreSQL擴(kuò)展,看起來(lái)很成熟并且功能豐富,因?yàn)樗鼜腜ostgreSQL繼承了很多東西。但是您可以根據(jù)本博客前面提到的優(yōu)缺點(diǎn)來(lái)做出自己的決定,并確保對(duì)自己的工作負(fù)載進(jìn)行基準(zhǔn)測(cè)試。在這個(gè)新的時(shí)間序列數(shù)據(jù)庫(kù)世界中祝您好運(yùn)!
作者介紹
熱門博客推薦