六月婷婷AV,国产偷窥猎奇福利二区,日韩三级片。,好吊色网站,日韩成人中文在线视频,国产亚洲午夜啪啪,亚洲欧美另类国产精品,国产成人av1,任你艹在线观看

TDengine 3.0 是如何解決時(shí)序數(shù)據(jù)庫(kù)中的高基數(shù)問題的?

小 T 導(dǎo)讀: 數(shù)據(jù)集的高基數(shù)(High-Cardinality)問題一直困擾著諸多主流的時(shí)序數(shù)據(jù)庫(kù)(Time Series Database,TSDB)產(chǎn)品。一些數(shù)據(jù)庫(kù)管理系統(tǒng),在基數(shù)較低時(shí)表現(xiàn)良好;但是隨著基數(shù)的增加,數(shù)據(jù)庫(kù)的表現(xiàn)也會(huì)變差,這就給數(shù)據(jù)庫(kù)管理員帶來了很大的挑戰(zhàn),他們需要通過相關(guān)設(shè)計(jì)降低基數(shù),避免與之相關(guān)的問題。

TDengine 3.0 是第一個(gè)解決了高基數(shù)問題的時(shí)序數(shù)據(jù)庫(kù),本文將分享其設(shè)計(jì)思路。

何謂高基數(shù)問題?

講到高基數(shù)問題,首先,我們要理解什么是基數(shù)(Cardinality)?;鶖?shù)可以定義為一個(gè)數(shù)據(jù)集中值的數(shù)量。數(shù)據(jù)集不同,基數(shù)可以很高,也可以很低。比如,如果是布爾數(shù)據(jù),它的值只能是 true 或 false,則該數(shù)據(jù)集的基數(shù)為 2。但是如果是像設(shè)備 ID 這樣的數(shù)據(jù)集,其基數(shù)就非常大了。

對(duì)于時(shí)序數(shù)據(jù),事情就更復(fù)雜了。時(shí)序數(shù)據(jù)總會(huì)關(guān)聯(lián)一些元數(shù)據(jù),比如標(biāo)簽。因此,一個(gè)系統(tǒng)的基數(shù)就是每個(gè)標(biāo)簽的基數(shù)的叉乘。比如,以智能電表為例,它會(huì)關(guān)聯(lián)設(shè)備 ID、城市 ID、廠商 ID 和模型 ID 等標(biāo)簽。幾百個(gè)城市,百萬級(jí)設(shè)備,再加上不同的廠商、模型,基數(shù)輕松超過百億級(jí)。

高基數(shù)有什么問題呢?這會(huì)增加定位一個(gè)唯一的值所需要的時(shí)間。對(duì)于數(shù)據(jù)庫(kù)而言,延遲與基數(shù)直接相關(guān)。許多時(shí)序數(shù)據(jù)庫(kù),如 InfluxDB、OpenTSDB 和 Prometheus,都采用了鍵值存儲(chǔ)模型,其中的鍵是由標(biāo)簽組合唯一識(shí)別的。這種模式有個(gè)副作用,它會(huì)極大增加數(shù)據(jù)集的基數(shù)。

那 TDengine 3.0 是如何解決高基數(shù)問題的呢?下面我們一起看一下它的幾個(gè)核心設(shè)計(jì)。

數(shù)據(jù)模型:一個(gè)數(shù)據(jù)采集點(diǎn)一張表

特有的數(shù)據(jù)模型,是 TDengine 的一大核心設(shè)計(jì),即“一個(gè)數(shù)據(jù)采集點(diǎn)一張表”。也就是說,TDengine 建議為數(shù)據(jù)采集點(diǎn)創(chuàng)建一張單獨(dú)的表。一般情況下,一個(gè)設(shè)備就是一個(gè)數(shù)據(jù)采集點(diǎn);但是在更復(fù)雜的情況下,一個(gè)設(shè)備可能包含多個(gè)數(shù)據(jù)采集點(diǎn),而且不同的采集點(diǎn)有不同的采集頻率。

在設(shè)計(jì)上,TDengine 使用一致性哈希來確定哪個(gè)虛擬節(jié)點(diǎn)(vnode)負(fù)責(zé)存儲(chǔ)特點(diǎn)表(table)的數(shù)據(jù)。在 vnode 內(nèi)部,系統(tǒng)會(huì)構(gòu)建索引,以提升定位 table 的速度。隨著表數(shù)量的增多,TDengine 會(huì)創(chuàng)建更多 vnode,盡量減少定位到某個(gè) table 的時(shí)間,并支持系統(tǒng)輕松伸縮。

這種設(shè)計(jì)保證了向任何一個(gè)表插入數(shù)據(jù)或從任何一個(gè)表查詢數(shù)據(jù)的延遲,即使表的數(shù)量呈指數(shù)增長(zhǎng)。因此,延遲不受 TDengine 中高基數(shù)的影響。

將元數(shù)據(jù)與時(shí)序數(shù)據(jù)分離

通過“一個(gè)數(shù)據(jù)采集點(diǎn)一張表”的設(shè)計(jì),TDengine 可以保證單一表的延遲。但是,現(xiàn)實(shí)世界的具體應(yīng)用往往需要聚合多個(gè)表或設(shè)備中的數(shù)據(jù)。這是 TDengine 在設(shè)計(jì)上要面對(duì)的一個(gè)主要挑戰(zhàn)。

為了解決這個(gè)問題,TDengine 引入了超級(jí)表(supertable)。與標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)不同,超級(jí)表允許應(yīng)用程序?qū)⒁唤M標(biāo)簽關(guān)聯(lián)到每個(gè)表。TDengine 會(huì)將這些標(biāo)簽與采集到的時(shí)序數(shù)據(jù)分開存儲(chǔ):使用 B 樹為標(biāo)簽建立索引,將其保存到元數(shù)據(jù)存儲(chǔ)中;而時(shí)序數(shù)據(jù)保存在一個(gè)單獨(dú)的時(shí)序數(shù)據(jù)存儲(chǔ)中。元數(shù)據(jù)存儲(chǔ)中的每張表只有一行數(shù)據(jù),而且可以根據(jù)需要更新。在時(shí)序數(shù)據(jù)存儲(chǔ)中,每個(gè)表都有許多行數(shù)據(jù),而且數(shù)據(jù)集會(huì)隨著時(shí)間的推移而增長(zhǎng),直到其生命周期結(jié)束。

為了聚合多個(gè)表的數(shù)據(jù),應(yīng)用程序可以通過標(biāo)簽來過濾。當(dāng)執(zhí)行時(shí),TDengine 首先搜索元數(shù)據(jù)存儲(chǔ),并獲得滿足過濾條件的表的列表,然后再來獲取存儲(chǔ)在時(shí)序數(shù)據(jù)存儲(chǔ)中的數(shù)據(jù)塊,并完成聚合過程。

首先掃描元數(shù)據(jù)存儲(chǔ),因?yàn)檫@個(gè)數(shù)據(jù)集比時(shí)序數(shù)據(jù)存儲(chǔ)的規(guī)模要小得多,TDengine 就可以提供非常高效的聚合能力。這個(gè)過程可以用下圖表示。

TDengine 3.0 是如何解決時(shí)序數(shù)據(jù)庫(kù)中的高基數(shù)問題的? - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

分布式存儲(chǔ)元數(shù)據(jù)

在 TDengine 2.x 的設(shè)計(jì)中,表的元數(shù)據(jù),比如模式和標(biāo)簽,都存儲(chǔ)在管理節(jié)點(diǎn)(mnode)上。如果創(chuàng)建的表的數(shù)量達(dá)到千萬級(jí),這就會(huì)成為 TDengine 的一個(gè)瓶頸:過濾這么多標(biāo)簽的延遲會(huì)明顯增加了。

到了 TDengine 3.0,我們會(huì)將元數(shù)據(jù)存儲(chǔ)分布在 vnode 中,而不再是集中化存儲(chǔ)在 mnode 上。當(dāng)一個(gè)應(yīng)用想從多個(gè)表聚合數(shù)據(jù)時(shí),TDengine 會(huì)同時(shí)向所有的 vnode 發(fā)送過濾條件。然后,每個(gè) vnode 并行工作,找到所要求的表,聚合數(shù)據(jù),最后將結(jié)果送回查詢節(jié)點(diǎn)或驅(qū)動(dòng),并在那里執(zhí)行合并操作。

現(xiàn)在,TDengine 3.0 的分布式設(shè)計(jì)保證了標(biāo)簽過濾操作的延遲,只要系統(tǒng)資源充足,mnode 不再是瓶頸。隨著創(chuàng)建的表的增多,TDengine 只需要為其分配更多資源,創(chuàng)建更多 vnode,以確保系統(tǒng)的可擴(kuò)展性。

總的來說,通過創(chuàng)新的設(shè)計(jì),TDengine 3.0 很好地解決了高基數(shù)問題。歡迎下載試用,為業(yè)務(wù)創(chuàng)新提速。