在(zai)(zai)當(dang)今數據(ju)驅動的時代,如(ru)何高效地存(cun)儲與處理(li)海量數據(ju)成為了(le)(le)企業面臨的一(yi)大挑戰。為了(le)(le)解(jie)決這(zhe)一(yi)問題,我(wo)們在(zai)(zai) TDengine 3.2.2.0 首次發(fa)布了(le)(le)企業級功能 S3 存(cun)儲。這(zhe)一(yi)功能經(jing)歷多個版本的迭代與完(wan)善后,逐漸發(fa)展成為一(yi)個全面和(he)高效的解(jie)決方(fang)案。
S3 存儲(chu)功能的(de)(de)引入,讓(rang) TDengine 不僅能夠在本地(di)存儲(chu)數據,還能將數據無縫地(di)備(bei)份(fen)到云端(duan),極大地(di)提升(sheng)了數據的(de)(de)可靠性與安(an)全(quan)性。本文(wen)將深入探討 TDengine 的(de)(de) S3 存儲(chu)功能,包(bao)括其優點、如(ru)何進行配置與使用,以及數據的(de)(de)寫入和(he)(he)讀(du)取原理(li),幫助(zhu)讀(du)者全(quan)面了解這一(yi)強大的(de)(de)工具如(ru)何助(zhu)力企業在數據管理(li)方(fang)面實現(xian)更(geng)高的(de)(de)效率(lv)和(he)(he)靈活性。
什么是 S3?
S3 是一(yi)種可擴展(zhan)且高可用(yong)的分布式存(cun)儲解決方(fang)案,專門用(yong)于存(cun)儲大量的非(fei)結構(gou)化數(shu)據對(dui)(dui)象(xiang)。通(tong)過使用(yong)對(dui)(dui)象(xiang)名(鍵值(zhi))進行索引,用(yong)戶可以方(fang)便(bian)地(di)訪問和(he)管理這(zhe)些數(shu)據對(dui)(dui)象(xiang)。這(zhe)種架(jia)構(gou)使得 S3 能夠靈(ling)活應對(dui)(dui)不斷增長的數(shu)據存(cun)儲需求,提供可靠的數(shu)據存(cun)儲服務。
需要(yao)注意的(de)是,S3 上(shang)的(de)對(dui)象一旦上(shang)傳后便無法修(xiu)改(gai),且在讀(du)(du)取(qu)對(dui)象時(shi)的(de)速度(du)通常(chang)較本(ben)地(di)磁盤要(yao)慢(man)。此外,各大(da)云(yun)服務供(gong)應商通常(chang)會根據(ju)上(shang)傳數據(ju)的(de)大(da)小(xiao)、讀(du)(du)取(qu)次數和讀(du)(du)取(qu)的(de)數據(ju)量來收取(qu)費(fei)用(yong)(yong),這使得(de)用(yong)(yong)戶在使用(yong)(yong) S3 存(cun)儲時(shi)需要(yao)考(kao)慮成本(ben)管(guan)理。
TDengine S3 的(de)使用場(chang)景主要包括(kuo)冷數(shu)(shu)據(ju)查詢和寫入需(xu)求較(jiao)(jiao)低(di)(di)的(de)情況。在(zai)許多(duo)企業中(zhong),冷數(shu)(shu)據(ju)雖然(ran)(ran)不(bu)常(chang)被訪問,但(dan)仍然(ran)(ran)作(zuo)為重要的(de)數(shu)(shu)據(ju)資產存在(zai),因此不(bu)能被徹底刪除。這(zhe)類數(shu)(shu)據(ju)通常(chang)具有(you)較(jiao)(jiao)低(di)(di)的(de)實時(shi)性需(xu)求,但(dan)仍需(xu)保(bao)持可用性,以便在(zai)需(xu)要時(shi)進行檢索和分(fen)析。
此外,企(qi)業在數(shu)(shu)據(ju)存(cun)(cun)儲(chu)上往往對成本(ben)十分敏感,希望(wang)能夠降低本(ben)地磁盤的占用率。借助(zhu) TDengine S3,企(qi)業可以將冷(leng)數(shu)(shu)據(ju)轉移(yi)到云(yun)端存(cun)(cun)儲(chu),從而(er)釋放本(ben)地存(cun)(cun)儲(chu)資(zi)源。在必要時(shi),企(qi)業仍(reng)能夠方(fang)便地訪問這些冷(leng)數(shu)(shu)據(ju),確保在特(te)定場景下能夠進(jin)行有效的數(shu)(shu)據(ju)利用。
整體來說,TDengine S3 主要(yao)有以下三大優點:
顯著降低存儲成本
S3 提(ti)供了(le)低(di)廉(lian)的存(cun)儲成(cheng)本,企(qi)業在將數(shu)據(ju)(ju)上傳(chuan)至 S3 之前,可(ke)以(yi)通(tong)過重新整(zheng)理(li)數(shu)據(ju)(ju)來提(ti)升(sheng)壓縮比,從而有效(xiao)(xiao)減(jian)少存(cun)儲空間的占用。這種方(fang)式不(bu)僅降(jiang)低(di)了(le)整(zheng)體的存(cun)儲成(cheng)本,還優化了(le)數(shu)據(ju)(ju)的存(cun)儲效(xiao)(xiao)率。
支持冷數據的寫入、更新與刪除,行為透明
TDengine S3 允許對(dui)冷數(shu)據(ju)進(jin)(jin)行靈活的寫入、更新和刪除操作,且這些操作對(dui)用戶來(lai)說是透明的。在數(shu)據(ju)上傳時,系統將數(shu)據(ju)拆分為多個(ge)對(dui)象進(jin)(jin)行存(cun)儲,只有最(zui)后一(yi)個(ge)對(dui)象會保留在本地。使用 AppendOnly 機制,所(suo)有更新都(dou)會在最(zui)后一(yi)個(ge)對(dui)象上進(jin)(jin)行,從而確保數(shu)據(ju)的一(yi)致(zhi)性(xing)和完整性(xing)。
查詢速度影響較小,行為透明
存儲(chu)在 S3 上(shang)的(de)數據(ju)(ju)查詢(xun)速(su)度僅下(xia)降(jiang)約一(yi)倍。TDengine 的(de)存儲(chu)模型設計(ji)確(que)保(bao)同(tong)一(yi)表的(de)數據(ju)(ju)相鄰存放(fang),這意味著每次查詢(xun)只需(xu)讀取少量的(de)數據(ju)(ju),同(tong)時預計(ji)算的(de)數據(ju)(ju)仍保(bao)留在本地,有助于提升(sheng)查詢(xun)效(xiao)率并降(jiang)低延遲。
TDengine S3 數據寫入、讀寫原理分析
數據寫入原理
1. 數據壓縮與整理(Compact)
在數據(ju)上傳至 S3 之前(qian),TDengine 會(hui)對(dui)每個表的(de)(de)數據(ju)進行壓縮與整理(li),確保相(xiang)(xiang)同表的(de)(de)數據(ju)相(xiang)(xiang)鄰存放。這種方(fang)法不僅減少了(le)查(cha)詢(xun)時的(de)(de)數據(ju)讀取次數,還顯著提高了(le)查(cha)詢(xun)性能。相(xiang)(xiang)鄰存放的(de)(de)數據(ju)可以(yi)減少磁(ci)盤尋址時間(jian),使得查(cha)詢(xun)過程更加高效,提升整體數據(ju)訪(fang)問速度。
2. 僅上傳最大的 data 文件
TDengine 采用了“僅(jin)上傳(chuan)最大的 data 文(wen)(wen)(wen)件”的策略。在(zai)寫(xie)入(ru)數據時(shi),data 文(wen)(wen)(wen)件使用追(zhui)加模式(shi)(append-only),而(er)其他文(wen)(wen)(wen)件會(hui)因隨機寫(xie)入(ru)而(er)產(chan)生頻(pin)繁的更新。這種設計(ji)確(que)保在(zai)查詢(xun)時(shi),訪問的是(shi)相對靜態且(qie)頻(pin)繁使用的數據文(wen)(wen)(wen)件,從(cong)而(er)提升查詢(xun)性能(neng)并減少 I/O 開(kai)銷(xiao)。
3. 數據文件的分塊與透明寫入
數據(ju)文件被拆分為(wei)多個(ge)固(gu)定大小(xiao)的(de)磁(ci)盤塊,并且最后一個(ge)磁(ci)盤塊保留在本地(di)存儲。這種(zhong)(zhong)設計使得寫入(ru)行為(wei)對用戶保持全透(tou)明,用戶可以在任何時(shi)刻(ke)寫入(ru)任意時(shi)間范圍的(de)數據(ju)而無(wu)需(xu)擔(dan)心底層存儲的(de)復(fu)雜(za)性。這種(zhong)(zhong)靈活性為(wei)用戶提供了極大的(de)便利,有助于滿(man)足不(bu)同場景下的(de)數據(ju)寫入(ru)需(xu)求。

4. 定期上傳機制
TDengine 設定(ding)了(le)定(ding)期上(shang)傳的(de)(de)機制,只有在滿足(zu)一定(ding)時間(jian)閾值且數(shu)據(ju)在一段時間(jian)內未發生變化后,數(shu)據(ju)才會被上(shang)傳至 S3。這種策略不僅(jin)確(que)保(bao)了(le)歷史(shi)數(shu)據(ju)的(de)(de)有效(xiao)導入,還提(ti)高了(le)上(shang)傳的(de)(de)效(xiao)率,避免了(le)不必要的(de)(de)頻繁(fan)上(shang)傳操作,從而減(jian)少(shao)了(le)對網絡帶寬的(de)(de)占用。
數據讀取原理
在 TDengine 中,數據讀取的過程是通過查詢引擎與 TSDB(時間序列數(shu)據(ju)(ju)(ju)庫)讀取模(mo)塊的(de)緊密協作來實(shi)現的(de)。當用戶發(fa)起查詢請求時,查詢引(yin)擎首先通(tong)過 TSDB Reader 模(mo)塊訪問與數(shu)據(ju)(ju)(ju)相(xiang)關的(de)多個文件,包括 header、data 和 stt 等文件。這些文件中包含了(le)所需數(shu)據(ju)(ju)(ju)的(de)索引(yin)信(xin)息和實(shi)際數(shu)據(ju)(ju)(ju),從而為數(shu)據(ju)(ju)(ju)檢索提供了(le)基礎。
接下來,TSDB File Reader 根據請(qing)求的(de)頁(ye)(ye)編(bian)碼(ma)(pgno)來定位和訪(fang)問相(xiang)關的(de)文件頁(ye)(ye)(file page)。頁(ye)(ye)編(bian)碼(ma)是(shi)指數(shu)據在磁盤上存儲(chu)的(de)邏輯位置(zhi),能(neng)夠幫助系統快(kuai)速找(zhao)到(dao)所(suo)需的(de)數(shu)據塊。這一機制確保了查詢的(de)高效性,避免(mian)了不必要的(de)全表掃描,提升了數(shu)據訪(fang)問的(de)速度。
如果(guo)請(qing)求的數據(ju)文件頁尚未(wei)被緩存(cun)到(dao)本(ben)地(di),系(xi)統將從 S3 讀取(qu)該文件頁及其附近的文件頁。這種預取(qu)策略不僅提高了(le)讀取(qu)效(xiao)率,還減少了(le)從云端獲取(qu)數據(ju)時(shi)的延(yan)遲。通過將所需(xu)的數據(ju)塊提前加(jia)載到(dao)本(ben)地(di)緩存(cun)中,TDengine 能(neng)夠顯(xian)著(zhu)提升(sheng)后續查詢(xun)的響應速(su)度,確(que)保用戶在(zai)進行數據(ju)分(fen)析時(shi)能(neng)夠快速(su)獲取(qu)所需(xu)的信息(xi)。

通過以(yi)上機制,TDengine S3 實現了高效的(de)數據(ju)管理(li)、存儲以(yi)及讀取(qu),確保用(yong)戶在(zai)處理(li)大(da)規模時序數據(ju)時能夠享受(shou)到快速且穩(wen)定的(de)性能。
配置及使用
想(xiang)要(yao)在 TDengine 中配(pei)置 S3 存(cun)儲,首先(xian)需要(yao)在每個(ge) dnode 的配(pei)置文件(jian)中設置相關(guan)的 S3 訪問參(can)數。以(yi)下(xia)是示(shi)例配(pei)置:
1. s3EndPoint: 指定 S3 的訪問端點,例如 //cos.ap-beijing.myqcloud.com。
2. s3AccessKey: 提供訪問密鑰,例如 AKIDsQmwsfKxTo2A6nGVXZN0UlofKn6JRRSJ:lIdoy99ygEacU7iHfogaN2Xq0yumSm1E。
3. s3BucketName: 設置使用的 S3 桶名稱,例如 test0711-1309024725。
在創建數據(ju)庫時,可以指定數據(ju)在本地的保(bao)存時間,例(li)如:
CREATE DATABASE demo_db duration 1d s3_keeplocal 3d;
在這個示例中,duration參數設置了數據的保留時長,而s3_keeplocal參數則指定了數據在本地存儲的天數。合理規劃該參數有助于根據本地磁盤的容量進行有效管理。
關鍵參數說明如下:
1. s3_keeplocal: 代表數據在本地保留的天數,用戶應根據本地磁盤的大小合理設置該參數。
2. s3_compact: 指定首次上傳至 S3 時是否自動進行數據壓縮(compact)。如果數據已經定期進行了自動整理,則無需開啟此參數。
3. s3MigrateEnabled: 表示是否自動進行 S3 遷移。在導入歷史數據時,關閉此參數通常會獲得更好的效果。
通過正確(que)配(pei)置這些參數,用(yong)戶能夠優(you)化 TDengine 與 S3 的集成(cheng),確(que)保(bao)數據的高效存(cun)儲和訪(fang)問(wen)。
結語
通過(guo)深入探討 TDengine 與 S3 存(cun)儲的集(ji)成,我們可以看到這(zhe)一創新(xin)設計在(zai)大數據管理中的巨大潛力(li)。TDengine 不僅(jin)提供高效(xiao)的寫入和查詢性能,還通過(guo)靈(ling)活的存(cun)儲選項和透明的操作方式,幫助企業有效(xiao)管理海量數據。無論是(shi)在(zai)冷數據存(cun)儲、數據壓縮,還是(shi)在(zai)優化查詢性能方面,TDengine S3 都(dou)展現出了其獨特的優勢。
隨著數據(ju)量的不斷增長(chang),企業面臨著越(yue)來越(yue)多的挑戰,而 TDengine S3 的靈(ling)活性(xing)和高效性(xing)無(wu)疑為(wei)這些挑戰提供了解決方(fang)案。希望本文所(suo)分享的配置方(fang)法、使用(yong)(yong)場景以及最佳實(shi)踐(jian),能夠幫助(zhu)讀者更(geng)深入地理解和高效利用(yong)(yong) TDengine S3,推(tui)動企業在數據(ju)管理上實(shi)現更(geng)大的成功。


























