溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Vertica的C-Store知識(shí)點(diǎn)有哪些

發(fā)布時(shí)間:2022-01-06 17:17:40 來源:億速云 閱讀:107 作者:iii 欄目:互聯(lián)網(wǎng)科技

這篇文章主要講解了“Vertica的C-Store知識(shí)點(diǎn)有哪些”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Vertica的C-Store知識(shí)點(diǎn)有哪些”吧!

背景知識(shí)

Vertica 是 C-Store 的商業(yè)化產(chǎn)品,C-Store 在 2006 年發(fā)布了0.2版本之后就沒在開發(fā)了。C-Store 的一部分人與 2006 年開啟 Vertica 項(xiàng)目,在 2011 年被 Hewlett-Packard(HP)收購(gòu)。Vertica 沒有使用 C-Store 原型系統(tǒng)的代碼,僅借鑒了思想。

截止2012年,有超過 500 個(gè)生產(chǎn)環(huán)境部署了 Vertica,其中有至少 3 個(gè)項(xiàng)目數(shù)據(jù)量達(dá)到 PB 級(jí)。和 C-Store 一樣,Vertica 提供經(jīng)典的關(guān)系型接口,Vertica 證明了一個(gè)系統(tǒng)既可以支持完整的 ACID 事務(wù),也可以支持 PB 級(jí)數(shù)據(jù)高效的查詢。這個(gè)說法我感覺已經(jīng)超過現(xiàn)在的 NewSQL 分布式關(guān)系型數(shù)據(jù)庫(kù)了。

業(yè)務(wù)場(chǎng)景

事務(wù)型:每秒有很多筆請(qǐng)求(上千),每個(gè)請(qǐng)求只處理小部分?jǐn)?shù)據(jù)。大部分事務(wù)是插入一行數(shù)據(jù)或者更新一行數(shù)據(jù)。

分析型:每秒只有少數(shù)個(gè)請(qǐng)求(幾十),但是每個(gè)請(qǐng)求會(huì)遍歷表的一大部分?jǐn)?shù)據(jù)。例如按時(shí)間和空間聚合銷售數(shù)據(jù)。

現(xiàn)在商業(yè)公司中一張表中的數(shù)據(jù)已經(jīng)達(dá)到了百萬或者十億級(jí),事務(wù)型和分析型場(chǎng)景的區(qū)別越來越明顯,針對(duì)分析型場(chǎng)景單獨(dú)做優(yōu)化可以比 one-size-fits-all 的系統(tǒng)性能提升幾個(gè)數(shù)量級(jí)。

Projection 和物化視圖的區(qū)別

projection 可以看做是帶限制的物化視圖,但是和標(biāo)準(zhǔn)的物化視圖不一樣,因?yàn)閜rojection 僅僅是數(shù)據(jù)的物理結(jié)構(gòu),而不是輔助索引。傳統(tǒng)的物化視圖通常還包含聚合、連接和其他的查詢結(jié)果。但是 projection 不包含。并且在分布式系統(tǒng)中維護(hù)物化視圖的代價(jià)很高,尤其是再加上對(duì)聚合和過濾的支持是不現(xiàn)實(shí)的。

總而言之,物化視圖比 projection 雜,實(shí)現(xiàn)復(fù)雜,在分布式系統(tǒng)中需要被拋棄掉了。

join index

C-Store 中提過的 join index 被廢棄掉了,維護(hù)這個(gè)索引代價(jià)太大,而且需要多存很多 id。那如何構(gòu)建一個(gè)完整的行呢? Vertica 維護(hù)了一個(gè)包含所有列的 super projection,也就是一張完整的表。

存儲(chǔ)模型

Vertica的C-Store知識(shí)點(diǎn)有哪些

對(duì)于每個(gè) projection 來說,哪些數(shù)據(jù)存儲(chǔ)到一個(gè) segment 中,放在哪個(gè)節(jié)點(diǎn)上是分段策略決定的。數(shù)據(jù)只在每個(gè) segment 內(nèi)部排序。第一個(gè) projection 按 hash(sale_id) 分段,按 date 排序。第二個(gè) projection 按 hash(cust) 分段,按 cust 排序。

Vertica的C-Store知識(shí)點(diǎn)有哪些

節(jié)點(diǎn)間分段:Segmentation

這里說的分段是節(jié)點(diǎn)間的,用來決定哪些數(shù)據(jù)分配在哪些節(jié)點(diǎn)上。分段方式是在定義 projection 時(shí)指定的。分段的依據(jù)是一個(gè)整數(shù)表達(dá)式,給一行 projection 數(shù)據(jù),就計(jì)算出一個(gè)整數(shù),根據(jù)這個(gè)整數(shù)的大小分配到不同節(jié)點(diǎn)上去。作者在這給了一個(gè)分段的公式。

Vertica的C-Store知識(shí)點(diǎn)有哪些

其實(shí)就是一致性hash環(huán),以后再介紹。

節(jié)點(diǎn)內(nèi)部數(shù)據(jù)分區(qū):Partitioning

分區(qū)是指每個(gè)數(shù)據(jù)分區(qū)用一個(gè)文件存儲(chǔ),物理上分離開了。

分區(qū)的第一個(gè)好處是批量刪除,通常數(shù)據(jù)按照年月分成多個(gè)文件,這樣在刪除一段時(shí)間數(shù)據(jù)時(shí)就可以簡(jiǎn)單的刪除一個(gè)文件。如果數(shù)據(jù)沒有提前分區(qū),就需要逐個(gè)遍歷記錄。

批量刪除只有在一個(gè)表的多個(gè) projection 分區(qū)方式一樣時(shí)才能實(shí)現(xiàn),不然只能刪掉部分 projection 的分區(qū),因此 Vertica 的分區(qū)是指定在 table 層級(jí)的。

分區(qū)的另一個(gè)好處是加速查詢,每個(gè)分區(qū)有一個(gè)摘要信息,可以快速跳過一些分區(qū)。

他這個(gè)對(duì) partition 的解釋我覺得很別扭,一致性hash里 partition 是用來控制數(shù)據(jù)存儲(chǔ)在哪個(gè)節(jié)點(diǎn)上的。

三個(gè)組件

和 C-Store 一樣,Vertica 也包括一個(gè) Read Optimized Store(ROS),一個(gè) Write Optimized Store(WOS)。一般來說,每個(gè)文件存一列,也可以存多列,這樣類似混合架構(gòu)。

數(shù)據(jù)在 WOS 里沒有壓縮編碼,因?yàn)楹苄?,而且在?nèi)存里采用行式或列式?jīng)]有什么區(qū)別,Vertica 的 WOS 從行式改成了列式,又改成了行式,主要是出于軟件工程考慮,性能上沒啥區(qū)別。

Tuple mover:兩個(gè)主要功能:(1)Moveout,將 WOS 中的數(shù)據(jù)移動(dòng)到 ROS 中,即 flush (2)Mergeout,將 ROS 中的小文件合并成大文件。其實(shí)就是 LSM 的概念,換了個(gè)叫法。

Vertica 有個(gè)功能,當(dāng) flush 的時(shí)候,允許新來的寫入直接寫到 ROS 中,這個(gè)我不理解,這怎么保序?雖然作者最后又提了一遍這個(gè)功能,說初始化導(dǎo)入數(shù)據(jù)時(shí)寫到 WOS 里是浪費(fèi)內(nèi)存,但是內(nèi)存是用來排序的,否則 ROS 豈不是亂了?

容錯(cuò)

為了保證每個(gè) projection 都可以恢復(fù),每個(gè) projection 都至少要有一個(gè)包含相同列和相同分段方式的 buddy projection。

因?yàn)槊總€(gè) projection 可以有自己的排序鍵,這里恢復(fù)就有兩種情況了:

(1)排序鍵一樣,可以直接拷貝文件,副本恢復(fù)也是這么做的。

(2)排序鍵不一樣,需要先查詢?cè)賹懭?,沒啥更好的方法。

另外,Vertica 可以容忍 K 個(gè)錯(cuò),因此,數(shù)據(jù)庫(kù)在設(shè)計(jì) projection 時(shí)需要保證每個(gè) segment 需要至少在 K+1 個(gè)節(jié)點(diǎn)都有備份。 這句話的意思應(yīng)該是直接生成 K+1 個(gè) projection,而不是純粹復(fù)制 segment。

局限

Vertica 解決了 C-Store 的一個(gè)大麻煩: join index,但是還是有刺可以挑的:

沒有講如何生成 projection,順序如何選擇,要配多少個(gè)副本,不同的 projection 按照不同順序存儲(chǔ),會(huì)不會(huì)拖慢寫入速度沒有介紹。

用戶一般不會(huì)設(shè)置最大空間占用,只會(huì)設(shè)置副本數(shù),沒有用戶給系統(tǒng)一個(gè)最大可用的空間限制,然后讓數(shù)據(jù)庫(kù)自己把這些空間都吃滿,頂多給一個(gè)原始數(shù)據(jù)占空間多少和允許數(shù)據(jù)庫(kù)占的空間的比例,根據(jù)一個(gè)預(yù)設(shè)的可用空間來選擇副本數(shù)的數(shù)據(jù)庫(kù)都是耍流氓。

負(fù)載均衡沒有提如何做。


感謝各位的閱讀,以上就是“Vertica的C-Store知識(shí)點(diǎn)有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Vertica的C-Store知識(shí)點(diǎn)有哪些這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI