LSM 演算法的原理是什麼?

時間 2021-05-06 09:02:22

1樓:

記記憶體中的樹為T0, 硬碟上的樹按時間順序,記做T1, ..., Tk

讀:T0

Tk -> Tk-1 -> ... -> T0寫T0T0超過一定大小後,插入硬碟變為Tk+1

複雜度讀:最壞需要讀k+1棵樹,所以需要定期合併,從而使得只有常數棵樹。

比較B+-Tree和LSM-Tree,可以發現對於Scan,前者需要O(logN)次查詢,而後者只需要O(k)次(Ti的大小和N無關)。

原理上,無論是B+-Tree還是LSM-Tree都是針對現代儲存器的特點而設計的,前者注意利用了Bulk讀寫,而後者則是力求減少Seek操作,可以說各有側重。

2樓:

看到一段解釋,挺不錯的。

LSM的思想,在於對資料的修改增量保持在記憶體中,達到指定的限制後將這些修改操作批量寫入到磁碟中,相比較於寫入操作的高效能,讀取需要合併記憶體中最近修改的操作和磁碟中歷史的資料,即需要先看是否在記憶體中,若沒有命中,還要訪問磁碟檔案。

原理:把一顆大樹拆分成N棵小樹,資料先寫入記憶體中,隨著小樹越來越大,記憶體的小樹會flush到磁碟中。磁碟中的樹定期做合併操作,合併成一棵大樹,以優化讀效能。

對應於使用LSM的Leveldb來說,對於乙個寫操作,先寫入到memtable中,當memtable達到一定的限制後,這部分轉成immutable memtable(不可寫),當immutable memtable達到一定限制,將flush到磁碟中,即sstable.,sstable再進行compaction操作。

除法豎式演算法的原理是什麼?

我們知道,乙個數恰好整除另乙個數是比較難得的,更多的是出現餘數不為 的情況。於是就有了所謂的帶餘除法。用 去除 商數是 餘數是 舉個具體的例子更好看。33 7,商為4,餘數為5 這個帶餘除法和豎式計算有什麼關係呢?你回想一下豎式計算過程,就會發現其實每一步都做了乙個簡單的帶餘除法。我不知道怎麼用 把...

量子計算機攻擊密碼演算法的原理是什麼?

asdacs 現代密碼基本都是基於某種數學上求解的困難。以最經典的rsa演算法為例,破解rsa演算法只需要將公鑰進行因數分解。但是一般用作公鑰的數都是兩個非常大的素數 上萬位甚至更大 相乘,破解是能破解,但在現在的計算機上耗時非常長,目前還沒有乙個高效率的解決辦法。事實上,對於大多數密碼而言,只要解...

怎麼理解全排列演算法的原理?

兼有朗月耀 參見 100 個數,如何遍歷得到所有全排列?兼有朗月耀的回答 知乎 https www. 神秘的什錦飯 我的理解是這樣的,首先這個全排列應該是越到後面 就越是大的數在前吧,譬如說 123 的排列,就是 123,132,213,231,312,321 那麼如果想變大,那就要把大的數放到前面...