共計(jì) 1031 個(gè)字符,預(yù)計(jì)需要花費(fèi) 3 分鐘才能閱讀完成。
這篇文章主要講解了“LSM 的存儲(chǔ)以及定位”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著丸趣 TV 小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“LSM 的存儲(chǔ)以及定位”吧!
LSM 的存儲(chǔ)
主要思想是將直接修改樹形結(jié)構(gòu),改為分幾個(gè)層級(jí)來(lái)完成。當(dāng)完成第一個(gè)層級(jí)時(shí)就反饋完成,其他交由后臺(tái)來(lái)處理。
流程是先寫入 memory table,之后 merge 到低級(jí)別的 sstable,最后 merge 到高級(jí)別的 sstable。
如下是 Hbase 的大體結(jié)構(gòu):
2. 定位
Trailer–這一段是定長(zhǎng)的。保存了每一段的偏移量,讀取一個(gè) HFile 時(shí),會(huì)首先 讀取 Trailer,Trailer 保存了每個(gè)段的起始位置 (段的 Magic Number 用來(lái)做安全 check),然后,DataBlock Index 會(huì)被讀取到內(nèi)存中,這樣,當(dāng)檢索某個(gè) key 時(shí),不需要掃描整個(gè) HFile,而只需從內(nèi)存中找到 key 所在的 block,通過(guò)一次磁盤 io 將整個(gè) block 讀取到內(nèi)存中,再找到需要的 key。DataBlock Index 采用 LRU 機(jī)制淘汰。
首先,能快速找到行所在的 region(分區(qū)),假設(shè)表有 10 億條記錄,占空間 1TB, 分列成了 500 個(gè) region, 1 個(gè) region 占 2 個(gè) G. 最多讀取 2G 的記錄,就能找到對(duì)應(yīng)記錄;
其次,是按列存儲(chǔ)的,其實(shí)是列族,假設(shè)分為 3 個(gè)列族,每個(gè)列族就是 666M, 如果要查詢的東西在其中 1 個(gè)列族上,1 個(gè)列族包含 1 個(gè)或者多個(gè) HStoreFile,假設(shè)一個(gè) HStoreFile 是 128M, 該列族包含 5 個(gè) HStoreFile 在磁盤上. 剩下的在內(nèi)存中。
再次,是排好序了的,你要的記錄有可能在最前面,也有可能在最后面,假設(shè)在中間,我們只需遍歷 2.5 個(gè) HStoreFile 共 300M
最后,每個(gè) HStoreFile(HFile 的封裝),是以鍵值對(duì)(key-value)方式存儲(chǔ),只要遍歷一個(gè)個(gè)數(shù)據(jù)塊中的 key 的位置,并判斷符合條件可以了。 一般 key 是有限的長(zhǎng)度,假設(shè)跟 value 是 1:19(忽略 HFile 上其它塊),最終只需要 15M 就可獲取的對(duì)應(yīng)的記錄,按照磁盤的訪問(wèn) 100M/S,只需 0.15 秒。 加上塊緩存機(jī)制(LRU 原則),會(huì)取得更高的效率。
感謝各位的閱讀,以上就是“LSM 的存儲(chǔ)以及定位”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì) LSM 的存儲(chǔ)以及定位這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是丸趣 TV,丸趣 TV 小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!