這篇文章主要講解了“Fractured Mirrors知識(shí)點(diǎn)有哪些”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Fractured Mirrors知識(shí)點(diǎn)有哪些”吧!
10年積累的網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先做網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有岳普湖免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
背景知識(shí)
PAX 是優(yōu)化 NSM 的 cache 表現(xiàn),而這篇文章主要關(guān)注磁盤IO。NSM 主要針對(duì)投影率和選擇率都比較高的場(chǎng)景,而 DSM 適用投影率和選擇率都比較低的場(chǎng)景。
投影率(projectivity)就是 select 語(yǔ)句后邊跟的列數(shù),就是查詢的列數(shù)。投影率高就是查的列多。選擇率(selectivity)就是挑剔度,選擇率高,結(jié)果集就少。
投影率和選擇率都高,就是只選擇很少的數(shù)據(jù),并且把這些數(shù)據(jù)的大部分屬性都拿出來,比較適合 NSM。
DSM 的缺點(diǎn)及實(shí)現(xiàn)優(yōu)化
都說 DSM 重組數(shù)據(jù)耗時(shí),到底多耗時(shí)呢?這篇文章給出了一個(gè)測(cè)試結(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)大,即使只選擇一列也沒好多少。
這和我一直說的 DSM 在選擇列數(shù)少的時(shí)候性能很好說法相悖啊,這里有實(shí)現(xiàn)問題,作者是用一種最簡(jiǎn)單的 DSM 實(shí)現(xiàn)對(duì)比的,用 slotted page 存放每一對(duì) 《ID,屬性列》,不管這個(gè)屬性列是定長(zhǎng)還是變長(zhǎng)。這種實(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)的很快。
鏡像:Raid 1
鏡像技術(shù)就是使用兩塊磁盤將數(shù)據(jù)做個(gè)拷貝,兩塊盤都可以對(duì)外提供訪問服務(wù),做負(fù)載均衡。兩塊盤的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)都一樣。
簡(jiǎn)單版 fractured mirror
前邊都是在講 DSM 和 NSM 的基礎(chǔ)和實(shí)現(xiàn)。其實(shí)這篇文章主要在鏡像上做文章。
因?yàn)?NSM 和 DSM 分別適用于不同場(chǎng)景,所以一個(gè)簡(jiǎn)單的想法是,兩個(gè)鏡像,一個(gè)用 NSM ,一個(gè)用 DSM。這樣不同的查詢負(fù)載就可以分配到不同的盤上去執(zhí)行,哪個(gè)快用哪個(gè)。
這樣是最簡(jiǎn)單的方式,但是有個(gè)問題,那就是負(fù)載不均衡,可能查詢都是偏 NSM 場(chǎng)景的,那 NSM 的盤就比較忙碌了。
升級(jí)版 fractured mirror
為了解決負(fù)載均衡的問題,又提出了升級(jí)版的。下圖:
一張表,在一塊盤上前一半數(shù)據(jù)用 NSM 結(jié)構(gòu)存儲(chǔ),后一半用 DSM。在另一塊盤上反過來。這是比較簡(jiǎn)單的分配策略,也可以用輪轉(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并不簡(jiǎn)單,優(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)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!