日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LSM树存储模型

發(fā)布時間:2023/12/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LSM树存储模型 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

LSM(log-structed-merge-tree)

leveldb和rocksdb底層使用LSM樹做存儲引擎,LSM樹使用skiplist做索引,他們先將數(shù)據(jù)寫入內(nèi)存中,按照key進行劃分,定期的merge寫入到磁盤中,合并后數(shù)據(jù)寫入下一層level

LSM是什么?解決什么問題?
在leveldb和rocksdb中,面臨的一個主要問題是數(shù)據(jù)的落盤,在寫磁盤時,隨機寫會消耗很大的磁盤IO,因此為了解決隨機寫的問題,引入了LSM樹。LSM樹將隨機寫變成了append,極大地降低了磁盤IO的消耗。

?

MySQL的innodb引擎使用了B+樹作為索引

B+樹作為索引時,隨機讀很快,但是有大量的隨機寫時,會占用很多的磁盤IO導致消耗比較大。B+樹是通過降低樹的高度,使樹的分叉盡可能多來達到查詢時的高效率的。但是在update、insert或delete時,需要進行樹的調(diào)整,因此磁盤IO的消耗會比較大。所以說B+樹不適合作為leveldb和rocksdb的存儲引擎。

例如:假設(shè)要寫入一個100000個隨機的key,對磁盤來說,最快的寫入方式一定是順序地將每一次寫入都直接寫入到磁盤中即可。
但這樣帶來的問題是查詢消耗大量的磁盤IO,因為每次查詢一個值都需要遍歷整個數(shù)據(jù)才能找到,這個讀性能就太差了;
那么如果我想獲取磁盤讀性能最高,應該怎么做呢?把數(shù)據(jù)全部排序就行了,B+樹就是這樣的結(jié)構(gòu),但B+樹的寫性能太差了,需要提升寫,可以放棄部分磁盤讀性能,怎么辦呢? 引入LSM樹

LSM是如何解決問題的?

LSM樹將隨機寫變成了append,降低了磁盤IO的消耗,但是以犧牲部分讀性能達到優(yōu)化寫性能的目的。

將有序的分組數(shù)據(jù)劃分很多個小的有序結(jié)構(gòu),比如每m個數(shù)據(jù),在內(nèi)存里排序一次,下面100個數(shù)據(jù),再排序一次……這樣依次做下去,我就可以獲得N/m個有序的小的有序結(jié)構(gòu),在查詢的時候,因為不知道這個數(shù)據(jù)到底是在哪里,所以就從最新的一個小的有序結(jié)構(gòu)里做二分查找,找得到就返回,找不到就繼續(xù)找下一個小有序結(jié)構(gòu),一直到找到為止。

因此,LSM樹讀取的時間復雜度是(N/m)*log2N,讀取效率是會下降的,這就是LSM的根本思路。

為了降低讀時磁盤IO的消耗,leveldb和rocksdb引入了bloom filter和compact機制。

?

LSM樹是以犧牲讀的效率來達到提升隨機寫效率的目的。

總結(jié)

以上是生活随笔為你收集整理的LSM树存储模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。