TSDB 模塊是 VNODE 中的負(fù)責(zé)快速高并發(fā)地存儲(chǔ)和讀取屬于該 VNODE 的表的元數(shù)據(jù)及采集的時(shí)間序列數(shù)據(jù)的引擎。除此之外,TSDB 還提供了表結(jié)構(gòu)的修改、表標(biāo)簽值的修改等功能。TSDB 提供 API 供 VNODE 和 Query 等模塊調(diào)用。TSDB 中存儲(chǔ)了兩類數(shù)據(jù),1:元數(shù)據(jù)信息;2:時(shí)間序列數(shù)據(jù)。
元數(shù)據(jù)信息
TSDB 中存儲(chǔ)的元數(shù)據(jù)包含屬于其所在的 VNODE 中表的類型,schema 的定義等。對(duì)于超級(jí)表和超級(jí)表下的子表而言,又包含了 tag 的 schema 定義以及子表的 tag 值等。對(duì)于元數(shù)據(jù)信息而言,TSDB 就相當(dāng)于一個(gè)全內(nèi)存的 KV 型數(shù)據(jù)庫,屬于該 VNODE 的表對(duì)象全部在內(nèi)存中,方便快速查詢表的信息。除此之外,TSDB 還對(duì)其中的子表,按照 tag 的第一列取值做了全內(nèi)存的索引,大大加快了對(duì)于標(biāo)簽的過濾查詢。TSDB 中的元數(shù)據(jù)的最新狀態(tài)在落盤時(shí),會(huì)以追加(append-only)的形式,寫入到 meta 文件中。meta 文件只進(jìn)行追加操作,即便是元數(shù)據(jù)的刪除,也會(huì)以一條記錄的形式寫入到文件末尾。TSDB 也提供了對(duì)于元數(shù)據(jù)的修改操作,如表 schema 的修改,tag schema 的修改以及 tag 值的修改等。
時(shí)間序列數(shù)據(jù)
每個(gè) TSDB 在創(chuàng)建時(shí),都會(huì)事先分配一定量的內(nèi)存緩沖區(qū),且內(nèi)存緩沖區(qū)的大小可配可修改。表采集的時(shí)序數(shù)據(jù),在寫入 TSDB 時(shí),首先以追加的方式寫入到分配的內(nèi)存緩沖區(qū)中,同時(shí)建立基于時(shí)間戳的內(nèi)存索引,方便快速查詢。當(dāng)內(nèi)存緩沖區(qū)的數(shù)據(jù)積累到一定的程度時(shí)(達(dá)到內(nèi)存緩沖區(qū)總大小的1/3),則會(huì)觸發(fā)落盤操作,將緩沖區(qū)中的數(shù)據(jù)持久化到硬盤文件上。時(shí)間序列數(shù)據(jù)在內(nèi)存緩沖區(qū)中是以行(row)的形式存儲(chǔ)的。
而時(shí)間序列數(shù)據(jù)在寫入到 TSDB 的數(shù)據(jù)文件時(shí),是以列(column)的形式存儲(chǔ)的。TSDB 中的數(shù)據(jù)文件包含多個(gè)數(shù)據(jù)文件組,每個(gè)數(shù)據(jù)文件組中又包含 .head、.data 和.last 三個(gè)文件,如(v2f1801.head、v2f1801.data、v2f1801.last)數(shù)據(jù)文件組。TSDB 中的數(shù)據(jù)文件組是按照時(shí)間跨度進(jìn)行分片的,默認(rèn)是 10 天一個(gè)文件組,且可通過配置文件及建庫選項(xiàng)進(jìn)行配置。分片的數(shù)據(jù)文件組又按照編號(hào)遞增排列,方便快速定位某一時(shí)間段的時(shí)序數(shù)據(jù),高效定位數(shù)據(jù)文件組。時(shí)間序列數(shù)據(jù)在 TSDB 的數(shù)據(jù)文件中是以塊的形式進(jìn)行列式存儲(chǔ)的,每個(gè)塊中只包含一張表的數(shù)據(jù),且數(shù)據(jù)在一個(gè)塊中是按照時(shí)間順序遞增排列的。在一個(gè)數(shù)據(jù)文件組中,.head文件負(fù)責(zé)存儲(chǔ)數(shù)據(jù)塊的索引及統(tǒng)計(jì)信息,如每個(gè)塊的位置,壓縮算法,時(shí)間戳范圍等。存儲(chǔ)在.head文件中一張表的索引信息是按照數(shù)據(jù)塊中存儲(chǔ)的數(shù)據(jù)的時(shí)間遞增排列的,方便進(jìn)行折半查找等工作。.head和.last文件是存儲(chǔ)真實(shí)數(shù)據(jù)塊的文件,若數(shù)據(jù)塊中的數(shù)據(jù)累計(jì)到一定程度,則會(huì)寫入.data文件中,否則,會(huì)寫入.last文件中,等待下次落盤時(shí)合并數(shù)據(jù)寫入.data文件中,從而大大減少文件中塊的個(gè)數(shù),避免數(shù)據(jù)的過度碎片化。



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



-1.png)




.png)


證.png)


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



