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

TDengine 3.0.2.5 查詢?cè)賰?yōu)化!揭秘索引文件的工作原理

TDengine 3.0 雖然對(duì)底層做了大規(guī)模的優(yōu)化重構(gòu),但是相對(duì)于數(shù)據(jù)文件的工作邏輯和 2.0 相比是整體保持不變的。本系列文章的主旨在于幫助用戶深入理解產(chǎn)品,并且擁有基本的性能調(diào)試思路,從而獲得更好的產(chǎn)品體驗(yàn)。

本期文章會(huì)在講解 TDengine 時(shí)序數(shù)據(jù)庫(kù) (Time Series DataBase)的索引文件(.head 文件)工作原理的同時(shí),介紹索引文件在最新的 TDengine 3.0.2.5 中的優(yōu)化。而在下一期的文章中,會(huì)對(duì)兩大版本數(shù)據(jù)文件的差異做一個(gè)總結(jié)式的說(shuō)明。

如下是 TDengine 的數(shù)據(jù)文件的結(jié)構(gòu)——也就是這個(gè)四位一體的文件組。

TDengine 3.0.2.5 查詢?cè)賰?yōu)化!揭秘索引文件的工作原理 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

在此前的文章,主要講述的是 .data 和 .last(3.0 中已經(jīng)更名為 .stt 文件)文件的工作原理。詳情可見(jiàn):https://mp.weixin.qq.com/s/OGS1WIlySSKveEOk4Reg3Q

接下來(lái),我們將和大家一起以產(chǎn)品使用者的視角繼續(xù)向前探索,揭開(kāi).head 文件的原理。

.head 類文件存儲(chǔ)了 .data 文件中的數(shù)據(jù)塊的索引信息。在.data文件中的每個(gè)數(shù)據(jù)塊的 BRIN 索引信息在 .head 類文件中以表為分組,按照時(shí)間順序遞增,形成索引塊組。(注:硬盤(pán)上的數(shù)據(jù)用的是 BRIN 索引,在落盤(pán)之前的內(nèi)存數(shù)據(jù)用的是 skiplist 索引。)在查詢的時(shí)候,會(huì)先加載這個(gè) .head 文件中的索引信息,從而找到 .data 文件中的時(shí)序數(shù)據(jù)返回給用戶。

(注:BRIN 索引指的是 Block Range Index,主要適用于有著天然順序的數(shù)據(jù)集,由于不需要再做排序,所以資源耗費(fèi)少,十分契合時(shí)序數(shù)據(jù)的查詢,也是 TDengine 和關(guān)系型數(shù)據(jù)庫(kù)的核心區(qū)別之一。)

一個(gè)清晰可見(jiàn)的邏輯是——索引的作用是幫助我們快速定位數(shù)據(jù)的位置,但當(dāng)你操作索引的時(shí)間變得特別長(zhǎng)的時(shí)候,索引的價(jià)值無(wú)形之中就會(huì)變低了。所以,在 .head 文件較大的時(shí)候就可能會(huì)出現(xiàn)影響查詢性能的瓶頸。

而影響 .head 文件大小的因素有兩個(gè):

  • 一是 maxrows 和 minrows 這兩個(gè)參數(shù)。很好理解,同樣1000行數(shù)據(jù),maxrows=200需要 5 個(gè)數(shù)據(jù)塊,maxrows為 1000,只需要 1 塊。每個(gè)數(shù)據(jù)塊都需要一條索引信息存儲(chǔ)在 .head 文件中。(詳情可參考:https://mp.weixin.qq.com/s/OGS1WIlySSKveEOk4Reg3Q
  • 另一個(gè)會(huì)讓 .head 文件非常大的參數(shù)是 duration ( 即 2.0 中的 days)。我們知道 duration 是控制單個(gè)數(shù)據(jù)文件存儲(chǔ)數(shù)據(jù)天數(shù)的參數(shù) ( 詳情可參考:https://mp.weixin.qq.com/s/uJEQwN0NnmSTBAMOecAtoA)。所以假如 duration 很大的話,單個(gè)數(shù)據(jù)文件存儲(chǔ)的數(shù)據(jù)量就一定也很大,數(shù)據(jù)塊就會(huì)很多。

以上的理論場(chǎng)景是真實(shí)發(fā)生過(guò)的——之前我們?cè)谥С帜称髽I(yè)用戶的時(shí)候,就曾遇到過(guò)生產(chǎn)環(huán)境上 duration 參數(shù)設(shè)置為 1000 多天導(dǎo)致數(shù)據(jù)查詢性能?chē)?yán)重下降的情況。但是由于 duration 參數(shù)建庫(kù)后不能修改,所以最后只能導(dǎo)出數(shù)據(jù),重新建庫(kù)修改為合理的 duration 后再導(dǎo)回,這樣問(wèn)題才得以解決。(所以,默認(rèn)值取 duration 為 10 就是一個(gè)折中的選擇,實(shí)際使用時(shí)可以根據(jù)查詢類型和機(jī)器性能靈活調(diào)試。)另外一個(gè)用戶則是查詢時(shí)間跨度大,查詢并發(fā)量大 ,導(dǎo)致大量的服務(wù)器資源被用于讀取 .head 文件影響了查詢性能。

如果說(shuō)前者還屬于參數(shù)使用不當(dāng)?shù)脑?,第二個(gè)場(chǎng)景的查詢并發(fā)量則是由用戶的業(yè)務(wù)場(chǎng)景所決定的,因此我們針對(duì)后者的潛在瓶頸,在最新的 TDengine 3.0.2.5 中,針對(duì) .head 文件做了一項(xiàng)重磅的優(yōu)化——對(duì)于常用的表索引數(shù)據(jù),會(huì)被放在緩存中(LRU 算法)。

這樣一來(lái),即便是不同的查詢?nèi)蝿?wù),只要所查詢的表索引還在池子中緩存著,便不需要重復(fù)地讀取 .head 文件了。由于涉及已落盤(pán)數(shù)據(jù)的查詢基本都需要去首先訪問(wèn) .head 文件,因此,該優(yōu)化使得整體查詢性能都得到了提升,而在特定場(chǎng)景下(如高并發(fā))形成了較大幅度的突破。

結(jié)語(yǔ)

結(jié)合之前的幾篇文章可以看到:keep,duration,maxRows,minRows 這些參數(shù)息息相關(guān),牽一發(fā)而動(dòng)全身,是不可以隨便改動(dòng)的,它們的數(shù)值不論過(guò)大還是過(guò)小都會(huì)引起使用問(wèn)題。如果因?yàn)楣铝⒌乜创硞€(gè)參數(shù)而帶來(lái)了問(wèn)題,用戶可能會(huì)誤以為這是產(chǎn)品本身的問(wèn)題。因此,很多時(shí)候默認(rèn)配置也是“很香”的。

而對(duì)于性能要求較高的用戶,也可以通過(guò)熟讀文檔、代碼、技術(shù)文章、視頻等資料來(lái)調(diào)整參數(shù)以達(dá)到最佳性能,也歡迎聯(lián)系 TDengine時(shí)序數(shù)據(jù)庫(kù)(TSDB) 官方咨詢企業(yè)版,以獲得全方位的技術(shù)支持。

在最新發(fā)布的 3.0.2.5 上,我們還做了很多其他優(yōu)化,穩(wěn)定性和性能進(jìn)一步提升。由于 3.0.2.x 是當(dāng)前 3.0 的穩(wěn)定版,因此版本號(hào)越大各方面都是越好的,建議大家可以盡快更新至最新版本。