TDengine 的設(shè)計是基于單個硬件、軟件系統(tǒng)不可靠,基于任何單臺計算機(jī)都無法提供足夠計算能力和存儲能力處理海量數(shù)據(jù)的假設(shè)而進(jìn)行設(shè)計的。因此 TDengine 從研發(fā)的第一天起,就是按照水平擴(kuò)展、高可用架構(gòu)進(jìn)行設(shè)計的分布式時序數(shù)據(jù)庫。通過對數(shù)據(jù)進(jìn)行分區(qū)、分片,而且采用虛擬節(jié)點(vnode)技術(shù),保證系統(tǒng)的處理能力是水平擴(kuò)展的。如果要增加系統(tǒng)的處理能力,只需要增加新的節(jié)點即可。
更好的是,2020年8月,TDengine 團(tuán)隊將集群版開源了。

TDengine 是通過數(shù)據(jù)采集點以及時間兩個維度,對大數(shù)據(jù)進(jìn)行切分,實現(xiàn)水平擴(kuò)展的。
分片:在 TDengine Database 的設(shè)計與實現(xiàn)里,一個集群有多個節(jié)點,每個節(jié)點可以有一個或多個虛擬節(jié)點(vnode),每個虛擬節(jié)點里存儲了一定數(shù)量的數(shù)據(jù)采集點的數(shù)據(jù),而一個數(shù)據(jù)采集點的數(shù)據(jù)永遠(yuǎn)只存放在一個 vnode 里。這樣如果有很多數(shù)據(jù)采集點,這些數(shù)據(jù)采集點的數(shù)據(jù)將會分布在多個 vnode 上,分布在多個節(jié)點里。數(shù)據(jù)寫入時,TDengine Database 的客戶端將要寫入的數(shù)據(jù)直接寫入對應(yīng)的 vnode,從而實現(xiàn)寫入的水平擴(kuò)展。對于單個數(shù)據(jù)采集點數(shù)據(jù)的查詢,毫無疑問,是水平擴(kuò)展的,節(jié)點越多,吞吐率就越大。對于聚合查詢,查詢請求將先發(fā)送到對應(yīng)的 vnode 里,vnode 先做完聚合操作,客戶端然后將來自多個 vnode 的查詢結(jié)果做第二次聚合,因為 vnode 數(shù)量有限,這樣在客戶端做的聚合查詢計算量不大,從而實現(xiàn)聚合查詢的水平擴(kuò)展能力。
分區(qū):除將數(shù)據(jù)分片之外,TDengine 還將一個 vnode 里存儲的時序數(shù)據(jù)按照時間段進(jìn)行切分。每個時間段的數(shù)據(jù)都一定保存在一起,不同時間段的數(shù)據(jù)不會有交集,時間段可以是一天,幾天,一周,由用戶自己定義。按照時間段切分時序數(shù)據(jù)有很多好處,查詢數(shù)據(jù)時,根據(jù)時間段,可以直接定位要查找的文件,從而加快查詢速度。另外一方面,可以高效地實現(xiàn)數(shù)據(jù)保留策略。超過最長保留時間的數(shù)據(jù),直接刪除一個時間段對應(yīng)的文件即可。而且按照時間段切分?jǐn)?shù)據(jù),還可以方便實現(xiàn)多級存儲,冷熱數(shù)據(jù)放在不同存儲介質(zhì)上,進(jìn)一步降低存儲成本。
TDengine 還通過虛擬節(jié)點組技術(shù)來提供系統(tǒng)的高可用。不同物理節(jié)點上的 vnode 可以形成一個虛擬節(jié)點組,這個虛擬節(jié)點組里的數(shù)據(jù)是通過 Master-Slave 來進(jìn)行同步的,來保證這個虛擬節(jié)點組內(nèi)數(shù)據(jù)的一致性。數(shù)據(jù)寫入只能在 master 進(jìn)行,但查詢可以在 master 和 slave 上同時進(jìn)行。如果 Master 出現(xiàn)故障,系統(tǒng)將自動選主,這樣來保證系統(tǒng)的高可用,不會由于某臺機(jī)器宕機(jī),而無法對外提供服務(wù)。
關(guān)于集群更多的詳細(xì)設(shè)計介紹,請看《TDengine 整體架構(gòu)設(shè)計》。
關(guān)于集群的具體使用,請看《TDengine 集群安裝、管理》。
關(guān)于更多開源的介紹,請看《開源的時序數(shù)據(jù)庫》。



互聯(lián)網(wǎng).png)



-1.png)







證.png)


伙伴.png)
伙伴.png)
伙伴.png)



