溫馨提示×

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

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

Fractured Mirrors知識(shí)點(diǎn)有哪些

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

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

背景知識(shí)

PAX 是優(yōu)化 NSM 的 cache 表現(xiàn),而這篇文章主要關(guān)注磁盤IO。NSM 主要針對(duì)投影率和選擇率都比較高的場景,而 DSM 適用投影率和選擇率都比較低的場景。

投影率(projectivity)就是 select 語句后邊跟的列數(shù),就是查詢的列數(shù)。投影率高就是查的列多。選擇率(selectivity)就是挑剔度,選擇率高,結(jié)果集就少。

投影率和選擇率都高,就是只選擇很少的數(shù)據(jù),并且把這些數(shù)據(jù)的大部分屬性都拿出來,比較適合 NSM。

DSM 的缺點(diǎn)及實(shí)現(xiàn)優(yōu)化

都說 DSM 重組數(shù)據(jù)耗時(shí),到底多耗時(shí)呢?這篇文章給出了一個(gè)測試結(jié)果。

用 TPC-H 數(shù)據(jù)集的 Line-item 表(每行數(shù)據(jù)有16個(gè)屬性),一共 1GB 數(shù)據(jù)。采用 NSM 會(huì)占用 1.1 GB 磁盤空間,并且一個(gè)全表掃描需要 74.5 秒。

DSM (16個(gè)關(guān)系,每個(gè)關(guān)系表有一個(gè) ID 列和一個(gè)屬性列)占用 2.8 GB 空間,

為了實(shí)現(xiàn)全表掃描,需要對(duì)每行數(shù)據(jù)都重組,隨著選擇的列數(shù)從 1 列到 8列,掃描的時(shí)間為 68.29s 到 759.39s。比 NSM 模型差的有點(diǎn)大,即使只選擇一列也沒好多少。

Fractured Mirrors知識(shí)點(diǎn)有哪些

這和我一直說的 DSM 在選擇列數(shù)少的時(shí)候性能很好說法相悖啊,這里有實(shí)現(xiàn)問題,作者是用一種最簡單的 DSM 實(shí)現(xiàn)對(duì)比的,用 slotted page 存放每一對(duì) 《ID,屬性列》,不管這個(gè)屬性列是定長還是變長。這種實(shí)現(xiàn)方式比較浪費(fèi)空間。

除此之外,每個(gè)屬性需要帶一個(gè) ID,比較浪費(fèi)空間,雖然現(xiàn)在磁盤幾乎沒啥成本,多占空間不是問題,但是多占空間會(huì)導(dǎo)致多占 IO,這就成問題了。因此,減少 IO 數(shù)據(jù)傳輸是很有必要的。

作者針對(duì) DSM 的一些實(shí)現(xiàn)上的問題,提出了一個(gè)稀疏的 B-Tree 索引,去掉了多余的 ID 列。在這些 DSM 優(yōu)化的基礎(chǔ)上,又提出了一個(gè)基于 Chunk 的多路歸并算法,主要思想就是從單點(diǎn)加載變成批量加載。

作者比較了優(yōu)化后的單點(diǎn)加載算法、批量加載的算法以及 NSM 掃描的時(shí)間。這基本是 DSM 應(yīng)該有的速度,可以看到一種思想的表現(xiàn)和實(shí)現(xiàn)也很相關(guān),你可以把一個(gè)非常巧妙的想法實(shí)現(xiàn)成一坨屎,也可以把一個(gè)很傻的算法實(shí)現(xiàn)的很快。

Fractured Mirrors知識(shí)點(diǎn)有哪些

鏡像:Raid 1

鏡像技術(shù)就是使用兩塊磁盤將數(shù)據(jù)做個(gè)拷貝,兩塊盤都可以對(duì)外提供訪問服務(wù),做負(fù)載均衡。兩塊盤的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)都一樣。

Fractured Mirrors知識(shí)點(diǎn)有哪些

簡單版 fractured mirror

前邊都是在講 DSM 和 NSM 的基礎(chǔ)和實(shí)現(xiàn)。其實(shí)這篇文章主要在鏡像上做文章。

因?yàn)?NSM 和 DSM 分別適用于不同場景,所以一個(gè)簡單的想法是,兩個(gè)鏡像,一個(gè)用 NSM ,一個(gè)用 DSM。這樣不同的查詢負(fù)載就可以分配到不同的盤上去執(zhí)行,哪個(gè)快用哪個(gè)。

Fractured Mirrors知識(shí)點(diǎn)有哪些

這樣是最簡單的方式,但是有個(gè)問題,那就是負(fù)載不均衡,可能查詢都是偏 NSM 場景的,那 NSM 的盤就比較忙碌了。

升級(jí)版 fractured mirror

為了解決負(fù)載均衡的問題,又提出了升級(jí)版的。下圖:

Fractured Mirrors知識(shí)點(diǎn)有哪些

一張表,在一塊盤上前一半數(shù)據(jù)用 NSM 結(jié)構(gòu)存儲(chǔ),后一半用 DSM。在另一塊盤上反過來。這是比較簡單的分配策略,也可以用輪轉(zhuǎn)的分配方式。

這樣,一個(gè)全部偏 NSM 的查詢負(fù)載,對(duì)于每一個(gè)查詢來說,假設(shè)這個(gè)查詢?cè)L問的數(shù)據(jù)是隨機(jī)分布的,這個(gè)查詢也可以被均攤到兩塊盤上。負(fù)載均衡也沒問題了。

同步方式

原來的 Raid 1,在兩個(gè)磁盤上的插入更新操作都一樣,現(xiàn)在物理存儲(chǔ)不同了,一個(gè)涉及1行記錄10個(gè)屬性的更新操作,在 NSM 上只需要一次寫入就可以了,在 DSM 上就需要 10 次寫入,這個(gè)極大地不同步。

解決方式是用全部駐留在內(nèi)存中的 Differential file,將修改都記錄在這里,定期和磁盤文件合并,保證這個(gè)文件大小適中。

刪除使用 bitmap記錄,查詢時(shí)候需要將 Differential file 和 bitmap 一起合并。

查詢計(jì)劃生成

這樣一個(gè)查詢來了之后,可以生成兩個(gè)最優(yōu)計(jì)劃,基于 NSM 的最優(yōu)計(jì)劃和基于 DSM 的最優(yōu)計(jì)劃,哪個(gè)快用哪個(gè),查詢優(yōu)化器就變復(fù)雜了。而且需要生成兩種查詢計(jì)劃,相當(dāng)于優(yōu)化了兩遍(optimize-twice)。

另一種方式是自底向上的搜索查詢計(jì)劃,把所有可能的掃描操作符和join操作符都生成出來,然后拼出來一個(gè)最優(yōu)的。通過這種方式避免 optimize-twice,而且能生成混合查詢計(jì)劃(既包含NSM的又包含DSM的)。

局限

先說查詢計(jì)劃生成,都是基于規(guī)則的,作者說是避免了優(yōu)化兩次,但是我覺得只是將兩種查詢計(jì)劃生成器混合起來了,打散放到了每一小步上去,比optimize-twice并不簡單,優(yōu)點(diǎn)是能生成混合的計(jì)劃。由于底層存儲(chǔ)的不同,需要維護(hù)兩套查詢引擎是比較頭大的。

僅有兩種不同的物理存儲(chǔ)結(jié)構(gòu),即 NSM 和 DSM,僅適用兩個(gè)副本的情況。

Differential file 是個(gè)潛在的性能問題,一個(gè)盤掛了,從另一個(gè)盤恢復(fù)的時(shí)間沒有度量。

感謝各位的閱讀,以上就是“Fractured Mirrors知識(shí)點(diǎn)有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Fractured Mirrors知識(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)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI