小?T?導讀:在《》這篇文章中,我們(men)講到了(le)如(ru)(ru)何利用合理的(de)配置vnode完成TDengine Database的(de)數(shu)據分(fen)片(pian),本期我們(men)來繼(ji)續(xu)講講TDengine如(ru)(ru)何從時間維度去對數(shu)據進行(xing)管(guan)理。
首先,先看(kan)看(kan)官網的相關描述(shu):
“TDengine除(chu)vnode分片之(zhi)外,還(huan)對時(shi)(shi)(shi)序數(shu)據按照(zhao)時(shi)(shi)(shi)間(jian)(jian)段(duan)進行(xing)分區。每個數(shu)據文件(jian)只包(bao)含一個時(shi)(shi)(shi)間(jian)(jian)段(duan)的(de)時(shi)(shi)(shi)序數(shu)據,時(shi)(shi)(shi)間(jian)(jian)段(duan)的(de)長度由DB的(de)配置參數(shu)days決定(ding)。這種按時(shi)(shi)(shi)間(jian)(jian)段(duan)分區的(de)方法還(huan)便于(yu)(yu)高效實(shi)現(xian)數(shu)據的(de)保留(liu)策略,只要數(shu)據文件(jian)超過規定(ding)的(de)天數(shu)(系統配置參數(shu)keep),將被自(zi)動刪除(chu)。而且不(bu)同的(de)時(shi)(shi)(shi)間(jian)(jian)段(duan)可以(yi)存放(fang)于(yu)(yu)不(bu)同的(de)路(lu)徑和存儲介質,以(yi)便于(yu)(yu)大數(shu)據的(de)冷熱(re)管理,實(shi)現(xian)多級存儲。”

可以看出,時序數據的保留策略是由keep和days這兩個參數牢牢把控的。但是,如果我們想更加深入地理解TDengine時序數據的存儲邏輯,從而優化性能的話,只知道上面這些是不夠的。
官方文檔關于keep和days的描(miao)述(shu)是這樣的:
keep:數(shu)據庫中數(shu)據保(bao)留(liu)的天數(shu),單(dan)位為天,默認值:3650
days:一個(ge)數據文件存(cun)儲(chu)數據的時間跨度,單位為(wei)天,默(mo)認(ren)值:10
TDengine通過(guo)(guo)keep和days嚴格(ge)控(kong)制(zhi)插入數據(ju)的(de)時間(jian)戳(chuo)范圍:對(dui)于過(guo)(guo)去的(de)數據(ju),不可以(yi)超出當前(qian)時間(jian)減去keep的(de)時間(jian)戳(chuo)值;對(dui)于未來的(de)數據(ju),不可以(yi)超出當前(qian)時間(jian)加上days的(de)時間(jian)戳(chuo)值。
我們假設(she)某數(shu)據庫的(de)keep參(can)數(shu)為7,days參(can)數(shu)為3,當前時間為某月9日的(de)0點0分(fen)。
由于(yu)keep為7,所以(yi)2日(9-7)之(zhi)前(qian)的(de)(de)(de)數據一定(ding)是不可以(yi)寫入(ru)的(de)(de)(de)。再加上限制未來時(shi)(shi)間數據的(de)(de)(de)插入(ru),12日(9+3)之(zhi)后的(de)(de)(de)數據也是不可以(yi)插入(ru)的(de)(de)(de)。通過(guo)這樣的(de)(de)(de)方式,就有(you)了TDengine當前(qian)可處理數據的(de)(de)(de)時(shi)(shi)間范圍(wei)time range(彩(cai)色范圍(wei)),當你試圖寫入(ru)位于(yu)灰色時(shi)(shi)間區域的(de)(de)(de)數據時(shi)(shi)——就會看到(dao)“timestamp out of time range”的(de)(de)(de)提示(shi)了。
這組(zu)圖代(dai)表(biao)了隨著(zhu)當前時間軸(zhou)的移動,數(shu)據(ju)(ju)文件的分布情況(kuang)和可(ke)寫(xie)入(ru)數(shu)據(ju)(ju)范圍的變(bian)化。


隨著時間的(de)推移,數(shu)(shu)(shu)據的(de)時間戳會與系(xi)統時間做計算(suan),一旦超過keep天數(shu)(shu)(shu),就(jiu)會被識別為過期數(shu)(shu)(shu)據,等到這個(ge)數(shu)(shu)(shu)據文件內的(de)所有數(shu)(shu)(shu)據都過期后,這個(ge)數(shu)(shu)(shu)據文件才會被從計算(suan)機上清(qing)除。
以(yi)上述組圖為例,由于2日(ri)(ri)(ri)和4日(ri)(ri)(ri)的(de)數(shu)(shu)據(ju)是在(zai)同一個數(shu)(shu)據(ju)文件(Data File 1)中,4日(ri)(ri)(ri)的(de)數(shu)(shu)據(ju)最多可以(yi)保留到(dao)(dao)(dao)11日(ri)(ri)(ri)結束,所以(yi)2日(ri)(ri)(ri)的(de)數(shu)(shu)據(ju)同樣也要保留到(dao)(dao)(dao)11日(ri)(ri)(ri)結束。所以(yi)我們可以(yi)看到(dao)(dao)(dao),12日(ri)(ri)(ri)的(de)時候,Data File 1已經(jing)被刪除掉了。
細(xi)心的(de)讀者(zhe)可能會問,假如我寫(xie)入3日的(de)數(shu)據,我是如何知(zhi)道這(zhe)個數(shu)據會落在(zai)345這(zhe)個區(qu)(qu)間(jian),還是123,或(huo)是234呢。其實是這(zhe)樣(yang)——TDengine是從(cong)1970年1月1日0時0分0秒(miao)起(EpochTime)開始,每3天劃一個分區(qu)(qu)。因此,對(dui)任何一個時間(jian)戳都是“劃到哪一片(pian)就算到哪一片(pian)”。
由(you)于上(shang)述的(de)機制刪除粒(li)度較粗,所以(yi)為(wei)了(le)優(you)化用(yong)戶(hu)的(de)體驗,在2.1.5.0版本后,我們通(tong)過(guo)默認設置(zhi)SQL查詢(xun)的(de)where timestamp的(de)起始時間大于過(guo)期時間來實現(xian)用(yong)戶(hu)側(ce)完全可(ke)控(kong)的(de)“過(guo)期數據(ju)(ju)刪除”。所以(yi),現(xian)在凡是過(guo)期的(de)數據(ju)(ju)對(dui)用(yong)戶(hu)都(dou)是不可(ke)見的(de)。
雖然在(zai)物理層面上,數(shu)據仍然是(shi)以(yi)(yi)數(shu)據文件為單位刪除的(de)(de)(de)。但(dan)是(shi)除了對存儲空間有極其精細(xi)(xi)要求的(de)(de)(de)用戶(hu)(hu),絕大多(duo)數(shu)用戶(hu)(hu)都是(shi)沒有感知的(de)(de)(de)。本次優(you)化過后(hou),用戶(hu)(hu)不(bu)再需要為刪除粒度的(de)(de)(de)粗(cu)細(xi)(xi)而產生顧慮。只要安心根(gen)據自己的(de)(de)(de)業務類型(xing),靈活設置days參數(shu)的(de)(de)(de)大小以(yi)(yi)找到性能最(zui)優(you)的(de)(de)(de)狀況(kuang)就好(hao)了。
此外,由于給(gei)(gei)定(ding)了可寫入數據(ju)的(de)時(shi)間范(fan)(fan)圍(now-keep到now+days),給(gei)(gei)定(ding)了數據(ju)切分的(de)時(shi)間范(fan)(fan)圍(days),所以只(zhi)要vnode目錄下面的(de)數據(ju)文件組數量小(xiao)于等于keep/days向(xiang)上(shang)取余(yu)+1,就可以認為自動刪除(chu)機制是在(zai)正常工作的(de)。
以上就(jiu)是(shi)官方文檔上所(suo)說(shuo)的:“給定days與keep兩(liang)個(ge)參數(shu)(shu),一個(ge)vnode總(zong)的數(shu)(shu)據(ju)文件數(shu)(shu)目(mu)最多(duo)為:keep/days+2”的含(han)義。
從(cong)概(gai)念(nian)上來說,“TDengine是(shi)通過vnode以(yi)及時間兩個(ge)(ge)維度,對大(da)數據進行切分,便于并行高效的(de)(de)管理,實(shi)現水平擴(kuo)展。”但(dan)是(shi)如何(he)讓枯燥(zao)的(de)(de)概(gai)念(nian)能轉化成自己(ji)正(zheng)確的(de)(de)理解,還(huan)是(shi)需要(yao)學習的(de)(de)。與本文(wen)正(zheng)是(shi)分別從(cong)這兩個(ge)(ge)維度切入TDengine原理的(de)(de),可以(yi)說是(shi)比(bi)較核心的(de)(de)知識點了。
對于TDengine Database,我們希望大家可以知其然,也(ye)知其所以然。


























