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

TDengine 3.0.2.5 查詢再優(yōu)化!揭秘索引文件的工作原理

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

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

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

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

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

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

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

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

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

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

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

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

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

這樣一來,即便是不同的查詢?nèi)蝿眨灰樵兊谋硭饕€在池子中緩存著,便不需要重復地讀取 .head 文件了。由于涉及已落盤數(shù)據(jù)的查詢基本都需要去首先訪問 .head 文件,因此,該優(yōu)化使得整體查詢性能都得到了提升,而在特定場景下(如高并發(fā))形成了較大幅度的突破。

結(jié)語

結(jié)合之前的幾篇文章可以看到:keep,duration,maxRows,minRows 這些參數(shù)息息相關,牽一發(fā)而動全身,是不可以隨便改動的,它們的數(shù)值不論過大還是過小都會引起使用問題。如果因為孤立地看待某個參數(shù)而帶來了問題,用戶可能會誤以為這是產(chǎn)品本身的問題。因此,很多時候默認配置也是“很香”的。

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

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