leveldb為什麼要設計為多層結構呢?

時間 2021-05-30 17:59:15

1樓:mwish

以 LevelDB 為例,如果你的記憶體結構落盤的話,舉兩個極端的例子

可以採用很多 L0 的 SST 這樣的形式,只有minor compaction。

可以採取非 L0 那樣,只有一層,每次寫合併一次,合併到乙個大的檔案裡。

同時,資料也是不斷增加的,所以我們希望:資料的個數不能太多,如果都是產生 L0 的話,後續讀會很難。

我們假設每層產生 m 個檔案,那 m 越多,寫放大可能不多,但是讀會越來越費勁。

所以 compaction 在這裡實際上是改善讀效能,讓你讀不用過於費勁。

下面再看多層,我們假設只有 L0 L1 層,這個時候每次 major compaction 都會有很大的寫放大,加入中間層也算是讀寫權衡,減小直接合入最後一層的開銷。

2樓:里奧

寫放大是必然的,你看作業系統核心就知道,不能頻繁訪問IO,那是很寶貴的資源,快取能解決頻繁IO問題,但是讀和寫會放大,這個時候又利用多層來盡量降低讀寫放大,但是這也帶來了新的問題,多層訪問在某些情況帶來了效能問題,故快取有做了下沉演算法,如LRU演算法。

其實無論讀與寫都是在減少與IO互動次數,IO比快取效能差好幾個數量級,IO是毫秒級,快取應該是微秒級具體多少可查查。

所有儲存都是為了合併多次IO,合併策略就得設計多快取層,在不同的資料庫儲存有不同特性,針對性也不同,各自演算法在某一塊效能會非常突出,比如leveldb在kb級寫入非常快,大資料寫入會拆分成很多小檔案再合併寫入導致效能下降,這也是沒辦法,要麼小批量寫入,要麼一次大資料寫入,實際業務不同寫入時間度和空間度也不一樣,權衡利弊還得看自己。

為什麼動漫命運石之門要設計為happyending?

無名氏 命運石之門的選擇啊。所謂命運石之門的選擇,就是胸針在穿越了無數條世界線後,最終找出的唯一一條理想的世界線,這條世界線同時被阿爾法和貝塔的力量影響,不會墜入悲慘的未來。拯救助手是全劇最大的亮點,也是本劇的主旨所在。具體過程參考命運石之門0。命運石之門是講胸針在阿爾法世界線穿越,避免嘟嘟嚕死亡,...

為什麼汽車廠商很少為汽車多設計個性塗裝?

追逐 首要的影響因素是成本,塗料使用種類增多會導致,單一塗料的用料量下降,生產時材料採購成本會增高 還有,如今汽車噴漆都是由工業機械人自動噴塗,像你說的個性化圖案及多種塗料無疑會增加生產時間,導致流水線節拍減慢,生產成本大大增加 其次,汽車生產研發中,每個零部件都需要管理,這麼多種類肯定會增加管理難...

為什麼麥當勞肯德基的門要設計為只能往乙個方向開啟?有什麼好處嗎?

其實這種門有乙個專門的名字,就叫做 肯德基門 現在幾乎所有的快餐店都在用。標準的 肯德基門 設定為乙個方向的原因主要有 1 方便逃生。當發生意外事故時,人們能夠更好的逃生,而不至於因拉門耽誤時間,造成擁擠。例如發生火災時,人員大家逃生方式肯定不是慢悠悠地握住握把開啟門然後出去 室內的高溫容易導致門框...