Dostoevsky: Better Space-Time Trade-Offs for LSM-Tree Based Key-Value Stores via Adaptive Removal of Superfluous Merging 閱讀筆記
Introduction
主流的基於LSM樹的KV存儲都在兩方面進行權衡,一方面是寫入更新的開銷,另一方面是查詢和存儲空間的開銷。但它們都不是最優的,問題在於這些存儲系統在LSM樹的每一個level上都采用相同且開銷很大的合並策略。論文中提出了Lazy Leveling和Fluid LSM-tree來解決這個問題,同時提出了Dostoevsky模型。
問題的根源
- 寫入更新:寫入更新的開銷主要來自於之後涉及寫入的項的合並操作,雖然更大的level上合並操作的代價越大,但是更大的level上合並操作的發生頻率更低,因此寫入更新在每一個level上花費的代價均等。
- 點查找:可以最小化所有bloom過濾器的FPR之和,以此來減小點查找的代價,當然這也意味著對更小的level的訪問頻率可能會呈指數級別的下降,因此大多數點查詢最終發生在最大的level上。
- 大範圍查找:不同level的容量呈指數級別的放大,因此最大的level包含了大多數的數據,那麽就更可能包含給定範圍的數據,所以大多數大範圍查詢最終發生在最大的level上。
- 小範圍查找:小範圍查找只涉及每個run中的一個block,由於所有level上的run的最大個數是確定的,因此小範圍查找在每一個level上花費的代價均等。
- 空間放大:最壞情況下,除了最大level外的所有level中的key在最大level中都有重復,因此空間放大主要來自於最大的level。
DESIGN SPACE AND PROBLEM ANALYSIS
tiering和leveling的開銷對比如下圖(圖來自論文)所示:
寫入更新
- tiering:一個項在一個level只涉及一次合並操作,花費O(1)時間,一共有L個level,一次合並操作中一次I/O讀取一個block涉及B個項,均攤到每個項的開銷為O(L/B)。
- leveling:上一個level的每一個run移動到當前level都會觸發一次合並操作,因此一個項在一個level上平均會涉及T/2次合並操作,其他分析同tiering,開銷為O(L·T/B)。
點查詢
最壞情況為零結果點查詢。
- tiering:對於零結果點查詢,開銷來自於當一個run上的bloom過濾器有誤報時產生的一次I/O(讀取這個run),每個level中最多可能有T個run,一共有L個level,bloom過濾器的FPR是e^(-M/N),因此開銷為O(e^(-M/N)·L·T)。
- leveling分析同tiering,開銷為O(e^(-M/N)·L)。
當然Monkey模型在不同的level上設置不同的bloom過濾器,可以將點查詢的開銷優化為上圖中的開銷。
空間放大
1到L-1的level包含了LSM樹1/T的容量,第L個level包含了LSM樹(T-1)/T的容量。
- tiering:最壞情況為第L個level中的每個run都包含相同的key,1到L-1的level中的key在第L個level中的每個run中都有重復,因此空間放大為O(T)。
- leveling:最壞情況為1到L-1的level中的key在第L個level中都有重復的key,因此空間放大為O(1/T)。
優化的空間:減少不必要的合並操作,點查詢、範圍查詢和空間放大的開銷主要取決於最大的level,而寫入更新在每一個level上的開銷均等。因此較小的level上的合並操作顯著增大寫入更新的開銷,而對於減少點查詢、範圍查詢和空間放大的開銷卻沒有特別多的幫助。
Lazy Leveling
主要結構:在最大的level采用leveling的合並策略,在其余level采用tiering的合並策略。
與leveling的對比:
- 提升了更新寫入的性能
- 點查詢、大範圍查詢和空間放大的復雜度相同
- 小範圍查詢的性能相似
tiering、leveling、lazy leveling三者開銷對比如下圖(圖來自論文)所示:
- 點查詢的分析涉及bloom過濾器的設置,就是個數學問題,詳見論文附錄。
- 寫入更新:1到L-1的level的寫入更新開銷分析同tiering,第L個level的寫入更新開銷分析同leveling。
- 空間放大:分析同leveling。
Fluid LSM-Tree
最大的level最多有Z個run,其余level最多有K個run,每一個level有個active run用於合並來自上一個level的run,且這個active run有容量限制,最大的level限制為T/Z,其余level限制為T/K。當一個level中的所有run的容量總和超過了當前level的限制,這些run合並入下一個level。
開銷如下圖(圖來自論文)所示:
- 點查詢的分析涉及bloom過濾器的設置,就是個數學問題,詳見論文附錄。
- 寫入更新:分析同tiering。
- 空間放大:最壞情況是1到L-1的level的key均在第L個level有重復,第L個level中有Z-1個run包含的全部都是重復的key。
Dostoevsky模型
寫入更新的開銷為W,零結果點查詢的開銷為R,有結果點查詢的開銷為V,範圍查詢的開銷為Q,通過統計以上四種操作在工作負載中的比例,賦予這四種開銷權重系數w、r、v、q,另外計從存儲中讀取一個block的時間為Ω。我們可以得到吞吐τ的計算公式為:
τ = Ω^-1 · (w · W + r · R + v · V + q · Q)^-1
在實際運行時可以通過對K、Z、T三個參數的動態調整來使得吞吐達到最優。
389 Love u
Dostoevsky: Better Space-Time Trade-Offs for LSM-Tree Based Key-Value Stores via Adaptive Removal of Superfluous Merging 閱讀筆記