国精产品一区一区三区有限公司杨,国产激情久久久久影院老熟女,国产裸体裸拍在线观看,国产人妻熟女在线观看,国产美女视频国产视视频

極簡(jiǎn)實(shí)現(xiàn) TiDB 冷熱數(shù)據(jù)分層存儲(chǔ) | He3 團(tuán)隊(duì)訪談

2022-01-25 19:34:11    來(lái)源:大京網(wǎng)

參加 Hackathon 可以接觸到內(nèi)核、工具、生態(tài)各個(gè)領(lǐng)域中志同道合的小伙伴,通過(guò)他們的項(xiàng)目學(xué)習(xí)到非常好的創(chuàng)意。大家的想法都很奇妙,充滿(mǎn)了創(chuàng)新力,在平時(shí)的研發(fā)過(guò)程中,很少能接觸到這些,Hackathon 能夠幫助我們打開(kāi)思維,讓我們知道原來(lái) TiDB 還可以這么玩。

—— He3 團(tuán)隊(duì)

TiDB 在使用過(guò)程中,隨著用戶(hù)數(shù)據(jù)量的持續(xù)增長(zhǎng),存儲(chǔ)成本在數(shù)據(jù)庫(kù)總成本中的占比將會(huì)越來(lái)越高。如何有效降低數(shù)據(jù)庫(kù)存儲(chǔ)成本擺在了許多用戶(hù)面前。

在眾多解決方案中,有一種方法是將冷熱數(shù)據(jù)實(shí)現(xiàn)分層存儲(chǔ)。在絕大部分場(chǎng)景中,數(shù)據(jù)其實(shí)都可以分為 “冷數(shù)據(jù)” 和 “熱數(shù)據(jù)”。數(shù)據(jù)劃分的原則,可以根據(jù)時(shí)間遠(yuǎn)近、熱點(diǎn)/非熱點(diǎn)用戶(hù)等等。用戶(hù)通常只訪問(wèn)一段時(shí)間之內(nèi)的數(shù)據(jù),例如近一周或一個(gè)月。如果數(shù)據(jù)不做劃分,必然會(huì)導(dǎo)致一定程度上的性能、成本損耗。

在剛剛收官的 TiDB Hackathon 2021 中, He3 團(tuán)隊(duì)就選擇了冷熱數(shù)據(jù)分層存儲(chǔ)來(lái)降低 TiDB 的存儲(chǔ)成本。他們?cè)谠O(shè)計(jì)中將熱數(shù)據(jù)存放在 TiKV 上,將查詢(xún)和分析幾率比較少的冷數(shù)據(jù)存放到便宜通用的云存儲(chǔ) S3,同時(shí)使 S3 存儲(chǔ)引擎支持 TiDB 部分算子下推,實(shí)現(xiàn) TiDB 基于 S3 冷數(shù)據(jù)的分析查詢(xún)。項(xiàng)目獲得了評(píng)委的一致好評(píng),力奪本屆賽事的一等獎(jiǎng)。

這個(gè)項(xiàng)目為后面 TiDB 與 S3 的整合打下不錯(cuò)的基礎(chǔ),在這次 Hackathon 驗(yàn)證了可行性。它的原理其實(shí)很簡(jiǎn)單,將冷的數(shù)據(jù)放到 S3,將算子盡量下推到 S3,通過(guò) S3 原生的 select 功能加速查詢(xún)。當(dāng)然,如果數(shù)據(jù)已經(jīng)在 S3,還可以通過(guò) Cloud 上其他的服務(wù),譬如 Athena, 來(lái)做更多的查詢(xún)聚合操作,加速查詢(xún)。這次大家都是在通過(guò) partition 做文章,畢竟根據(jù)時(shí)間片來(lái)分的 partition 是非常常用的一種操作。我們內(nèi)部現(xiàn)在也在通過(guò) LSM 做一些跟 S3 整合的研究,我還是很期待這些都能在今年看到不少的成果產(chǎn)出。譬如 TiDB Cloud dev tier 集群就可以完全用這套機(jī)制來(lái)驗(yàn)證。

—— 評(píng)委唐劉點(diǎn)評(píng)

為什么選擇冷熱數(shù)據(jù)分層存儲(chǔ)這個(gè)方向?

He3 團(tuán)隊(duì)的隊(duì)長(zhǎng)薛港,隊(duì)員時(shí)丕顯、沈政,都是來(lái)自移動(dòng)云數(shù)據(jù)庫(kù)團(tuán)隊(duì)的研發(fā)工程師,三人平時(shí)的工作就是從事云數(shù)據(jù)庫(kù)服務(wù)的開(kāi)發(fā),降低用戶(hù)在云上使用數(shù)據(jù)庫(kù)的成本是他們一直追求的目標(biāo)。

在去年 7 月份的 Hacking Camp 中,He3 就曾基于 TiDB 實(shí)現(xiàn)了提供 Serverlessdb 服務(wù)的 Serverlessdb for HTAP 項(xiàng)目。用戶(hù)在使用 TiDB 時(shí)可以按使用量付費(fèi),不用再像傳統(tǒng) RDS 需要包年包月,大大降低了用戶(hù)使用 TiDB 的成本。該項(xiàng)目也因此獲得了 Hacking Camp 優(yōu)秀畢業(yè)生和最佳應(yīng)用獎(jiǎng)。

隨著產(chǎn)品在移動(dòng)云上的落地,很多用戶(hù)在使用了一段時(shí)間后發(fā)現(xiàn)隨著數(shù)據(jù)量的增加,存儲(chǔ)成本越來(lái)越高。薛港解釋道,在公有云上,塊存儲(chǔ)收費(fèi)比 S3 對(duì)象存儲(chǔ)要高很多,用戶(hù)部分場(chǎng)景的數(shù)據(jù)其實(shí)很多是冷數(shù)據(jù),完全可以存放在 S3 上。于是在去年 12 月份時(shí),他們就開(kāi)始思考如何降低 TiDB 的存儲(chǔ)成本。恰好這時(shí) TiDB Hackathon 2021 啟動(dòng)了,薛港和時(shí)丕顯、沈政一商量,就決定將冷熱數(shù)據(jù)分層存儲(chǔ)作為今年的比賽項(xiàng)目。在答辯時(shí),他們專(zhuān)門(mén)用了一頁(yè) PPT 分析了運(yùn)用該項(xiàng)目后的成本變化:

項(xiàng)目方向定了,接下來(lái)就該報(bào)名了。隊(duì)長(zhǎng)薛港在看電視的時(shí)候?qū)?-3 這種元素產(chǎn)生了興趣,經(jīng)過(guò)了解,發(fā)現(xiàn)它可以用作核聚變?nèi)剂?,比現(xiàn)有的核燃料能量更大,并且只有很少的放射性,是一種清潔高效安全的發(fā)電燃料。這種特性和他們對(duì)分布式云數(shù)據(jù)庫(kù)的期望完全一致 —— 安全、高性能、易用、價(jià)格便宜,于是 He3 便成了隊(duì)名。

在接下來(lái)不到一個(gè)月的時(shí)間中,薛港作為隊(duì)長(zhǎng)負(fù)責(zé)整體需求的確認(rèn)、架構(gòu)設(shè)計(jì)、方案驗(yàn)證以及具體框架的開(kāi)發(fā)。其他隊(duì)員主要負(fù)責(zé)功能開(kāi)發(fā),時(shí)丕顯負(fù)責(zé)算子下推與數(shù)據(jù)類(lèi)型支持,沈政重點(diǎn)在性能優(yōu)化以及 TPC-H 測(cè)試。

該項(xiàng)目解決了什么問(wèn)題?

He3 開(kāi)發(fā)的 TiDB 冷熱數(shù)據(jù)分層存儲(chǔ)項(xiàng)目,能夠以極簡(jiǎn)的方式實(shí)現(xiàn)冷熱數(shù)據(jù)分離:

針對(duì)普通表:實(shí)現(xiàn) insert into select 的方式完成冷熱數(shù)據(jù)分離:

支持創(chuàng)建 S3 外部表;支持通過(guò) insert into s3_table select from tikv_table where ... ,把 TiKV 內(nèi)部表的數(shù)據(jù)轉(zhuǎn)儲(chǔ)到 S3 對(duì)象存儲(chǔ)上;支持通過(guò) insert into tikv_table select from s3_table where ... ,把 S3 外部表的數(shù)據(jù)轉(zhuǎn)儲(chǔ)到 TiKV 內(nèi)部表。

針對(duì)分區(qū)表:自動(dòng)完成分片表轉(zhuǎn)化成 S3 外部表,保留主表和 S3 外部表的主從關(guān)系。

支持通過(guò) Alter 分區(qū)表操作,把 TiKV 內(nèi)部分區(qū)表的數(shù)據(jù)自動(dòng)轉(zhuǎn)儲(chǔ)到對(duì)應(yīng)的 S3 外部表中,自動(dòng)完成以下幾件事:

內(nèi)部 TiKV 分區(qū)表數(shù)據(jù)轉(zhuǎn)存到 S3 對(duì)象存儲(chǔ)中;更改分區(qū)表元數(shù)據(jù),把 TiKV 內(nèi)部分區(qū)表轉(zhuǎn)化成 S3 外部表,核心要點(diǎn)保留 S3 外部表和主表的分區(qū)關(guān)系;刪除 TiKV 內(nèi)部分區(qū)表數(shù)據(jù)。

轉(zhuǎn)換后 S3 外部分區(qū)表對(duì)用戶(hù)完全透明,對(duì)用戶(hù)來(lái)說(shuō),S3 外部表就是主表的一個(gè)分片表。例如針對(duì)主表的查詢(xún)結(jié)果包含部分 TiKV 內(nèi)部分片表以及部分 S3 外部表對(duì)應(yīng)的分片表數(shù)據(jù),那么返回的結(jié)果就會(huì)來(lái)自?xún)刹糠郑篢iKV 內(nèi)部分片表,以及 S3 外部表。

保證用戶(hù)使用 S3 外部表和 TiKV 內(nèi)部表沒(méi)有任何區(qū)別:

S3 外部表支持所有的數(shù)據(jù)類(lèi)型;S3 外部表支持所有的算子;優(yōu)化 S3 外部表操作性能在用戶(hù)可接受的范圍內(nèi)。

通過(guò)支持謂詞(邏輯運(yùn)算、比較運(yùn)算、數(shù)值運(yùn)算),聚合函數(shù)、Limit 等算子下推到 S3 節(jié)點(diǎn),利用 S3 的計(jì)算能力提升查詢(xún)性能。

為了達(dá)到期望所有效果,He3 在此次 Hackathon 中開(kāi)發(fā)修改了 TiDB 一些模塊:

SQL Parser 模塊、系統(tǒng)表模塊

增加一個(gè)新的系統(tǒng)表,用于保存 S3 元數(shù)據(jù), 每一條記錄對(duì)應(yīng)一個(gè) S3 存儲(chǔ)元數(shù)據(jù):包含 S3 的 endpoint, access key, secret key, s3 bucket。insert into mysql.serverobject values("s3object","http://192.168.117.220:9000","minioadmin", "minioadmin","s3bucket");支持創(chuàng)建外部表,相比普通表增加了 s3option 選型,對(duì)應(yīng) S3 元數(shù)據(jù)對(duì)象,外部表對(duì)應(yīng) S3 的存儲(chǔ)路徑:Bucketname/DBName/TableName create table s3_table(id1 int8,id2 char(30)) s3options s3object;支持分片表自動(dòng)轉(zhuǎn)換成 S3 外部表

執(zhí)行器模塊

能夠區(qū)分操作表是否是 S3 外部表,如果是外部表,寫(xiě)入時(shí),數(shù)據(jù)以 256M 為粒度保存到 S3 的一個(gè)對(duì)象中 , 當(dāng)查詢(xún) S3 外部表時(shí),S3 對(duì)象會(huì)被以流式的方式裝配到 chunk 中,以支持上層算子操作;支持算子下推到 S3 節(jié)點(diǎn),利用 S3 節(jié)點(diǎn)的計(jì)算能力加速 S3 外部表的性能;S3 外部表支持所有的數(shù)據(jù)類(lèi)型,存儲(chǔ)在 S3 的數(shù)據(jù)按 S3 外部表的 schema 對(duì)應(yīng)的數(shù)據(jù)類(lèi)型保存到 chunk 里,相關(guān)列都會(huì)基于數(shù)據(jù)類(lèi)型編碼;支持 Alter 實(shí)現(xiàn)內(nèi)部分片表數(shù)據(jù)自動(dòng)轉(zhuǎn)儲(chǔ)到 S3 外部表中,同時(shí)保留主表和 S3 外部表的主從關(guān)系不變。

優(yōu)化器模塊

少量無(wú)法下推 S3 的算子,He3 修改了優(yōu)化器阻止這部分算子下推。當(dāng)前不支持的算子,主要就是包含 TopN 算子。

來(lái)自性能測(cè)試的挑戰(zhàn)

He3 最初設(shè)定的目標(biāo)有兩個(gè):一是希望數(shù)據(jù)能夠以比較簡(jiǎn)單的方式直接實(shí)現(xiàn)冷熱數(shù)據(jù)分離;二是希望冷數(shù)據(jù)分離到 S3 后,它的查詢(xún)性能能夠在合理的時(shí)間范圍內(nèi)。所以一開(kāi)始就把跑通 TPC-H 作為目標(biāo)。

項(xiàng)目的冷熱數(shù)據(jù)分離功能很快就完成了開(kāi)發(fā),但是接下來(lái)他們遇到了一個(gè)最大的問(wèn)題——性能總是無(wú)法達(dá)標(biāo)。一開(kāi)始的方案設(shè)計(jì)是將全部數(shù)據(jù)都讀取到 TiDB 上集中處理,但在測(cè)試中發(fā)現(xiàn)即使只有 10GB 的數(shù)據(jù),TPC-H 也跑不出來(lái)。三名隊(duì)員通過(guò)討論、調(diào)研、分析,發(fā)現(xiàn) S3 其實(shí)也具備一定的計(jì)算能力,是否可以把部分計(jì)算下推到 S3 ,讓 S3 和 TiKV 一樣能夠承載部分計(jì)算?

改變方案后通過(guò)幾個(gè)場(chǎng)景算子下推,He3 發(fā)現(xiàn)性能提升非常明顯,在之后的開(kāi)發(fā)中就將能下推的算子全部下推,項(xiàng)目的整個(gè)性能優(yōu)化每天都會(huì)以 20% 的幅度在提升。最終在比賽日上,他們跑通了整個(gè) TPC-H 測(cè)試。

He3 在 Hackathon 中的 TPC-H 測(cè)試成績(jī)

此次 Hackathon 中,其實(shí)還有另一支賽隊(duì) Interstellar 也選擇了分層存儲(chǔ),這也給 He3 隊(duì)員們留下了一個(gè)有趣的畫(huà)面:在 Interstellar 開(kāi)始答辯時(shí),He3 以為是自己在投屏,手忙腳亂地到處找關(guān)閉投屏按鈕,直到對(duì)方開(kāi)始答辯了,他們才意識(shí)到原來(lái)是兩個(gè)隊(duì)伍的題目撞衫了。

本次參賽的心路歷程

He3 隊(duì)員們其實(shí)在去年也參加了 TiDB Hackathon,因?yàn)閯偨佑| TiDB ,并沒(méi)有碰內(nèi)核。當(dāng)時(shí)心中就埋下一個(gè)想法,下次參賽一定要做夠硬的項(xiàng)目。這也是薛港在畢業(yè)后就給自己樹(shù)立的目標(biāo) —— 做數(shù)據(jù)庫(kù)內(nèi)核,并認(rèn)為這是一件很酷的事情。于是在今年比賽中, He3 選擇了最硬核的賽道 —— 內(nèi)核組。

過(guò)去一年的工作對(duì)他們幫助非常大,由于三人平時(shí)的工作和 TiDB 結(jié)合非常多,在碰到問(wèn)題的時(shí)候就會(huì)去想有什么解決方案,這個(gè)過(guò)程中很容易產(chǎn)生各種好的 idea。例如這次如何降低 TiDB 存儲(chǔ)成本的問(wèn)題,他們當(dāng)時(shí)就想出了至少三種方案:第一種是將 TiDB 底層的編碼方式做一些改變,讓 TiDB 的整個(gè)壓縮比能夠再下降 50% - 60%;第二種也是一種冷熱數(shù)據(jù)分離方案,將 LSM-tree 和 S3 集成;第三種就是現(xiàn)在的冷熱數(shù)據(jù)存儲(chǔ)分層方案。但前兩種方案在 Hackathon 如此短的周期內(nèi)很難完成,于是他們就采用了第三種方案。

未來(lái), He3 還會(huì)從三個(gè)方向?qū)⒃擁?xiàng)目持續(xù)演進(jìn)、迭代:

通過(guò)新的編碼方式以及加速算法,降低數(shù)據(jù)在 S3 的存儲(chǔ)容量,基于本次比賽中實(shí)現(xiàn)的效果再降低 50% 的存儲(chǔ)容量;持續(xù)優(yōu)化 TiDB 對(duì)接 S3 的存儲(chǔ)差異性能,在這次比賽的后期,這塊性能每天都有 20% 的性能提升,He3 認(rèn)為這里其實(shí)還有很大的提升空間;進(jìn)一步簡(jiǎn)化用戶(hù)的冷熱數(shù)據(jù)分離方式。對(duì)這次項(xiàng)目的最終實(shí)現(xiàn), He3 其實(shí)還有一些遺憾,一開(kāi)始設(shè)計(jì)的時(shí)候他們想過(guò)現(xiàn)在冷熱數(shù)據(jù)分離還需要 DBA 來(lái)做一些操作,如果能將這個(gè)工作進(jìn)一步實(shí)現(xiàn)自動(dòng)化操作,就可以讓冷熱數(shù)據(jù)分離應(yīng)用性再上一個(gè)臺(tái)階,不過(guò)由于時(shí)間比較有限的原因沒(méi)能實(shí)現(xiàn)。

此外,除了項(xiàng)目本身繼續(xù)完善外,He3 還希望在迭代到一定程度后就將整個(gè)產(chǎn)品的代碼提交給社區(qū),用開(kāi)源的方式回饋社區(qū),大家一起共創(chuàng)。

關(guān)鍵詞: 數(shù)據(jù) TiDB He 存儲(chǔ) 項(xiàng)目 支持 用戶(hù) Hackathon

上一篇:
下一篇:

熱點(diǎn)話題

熱點(diǎn)推薦

頭條

?