成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

從 WiscKey 看 LSMtree 的不足

開發 前端
LSMtree誕生的那一天起,并不是為了存儲這些大的value的情況。在這種大value的情況下LSMtree的性能會急速下降,所以,其實數據庫都有自我的一種保護機制,來限定每一行value所能夠存儲的最大值。

[[408566]]

本文轉載自微信公眾號「碼農桃花源」,作者冉小龍。轉載本文請聯系碼農桃花源公眾號。

近期,閱讀WiscKey論文深有感觸,特寫這篇文章來闡述自己的觀點。

說一句廢話就是:任何軟件的發展,其實都依賴于硬件的設計和進步,所以從這一點來看,LSMtree誕生于上世紀80年代,在那個年代,還是機械硬盤的時代。所以,可以看的到的是,整個LSMtree最初的構建思想都是基于機械硬盤的設計思路,但是需求是無止境的。WiscKey自我感覺是,在LSMtree的基礎上,基于SSD的設計思路所做的一種優化,基于這個思路,我們來簡單分析一下論文中所闡述的觀點。

先闡述幾個LSMtree的概念:

  • Read amplification is the number of I/O’s required to satisfy a particular query
  • Write amplification is the amount of data written to storage compared to the amount of data that the application wrote.
  • Space amplification is the space required by a data structure can be inflated by fragmentation or requirements for temporary copies of the data.

讀寫放大就不說了,知道LSMtree的人基本都了解,現在說一下空間放大的問題。

空間放大大體上是說:存儲采用的數據結構因分裂或臨時數據拷貝造成的磁盤空間占用放大。

LSMtree誕生的那一天起,并不是為了存儲這些大的value的情況。在這種大value的情況下LSMtree的性能會急速下降,所以,其實數據庫都有自我的一種保護機制,來限定每一行value所能夠存儲的最大值。下面是wisckey和LSMtree的對比,可以看到在value較大的時候,wisckey的性能要遠遠大于LSMtree的。

下面是隨機和排序之后,wisckey和LSMtree的對比:

其次,LSMtree都有這種compaction的操作,在做compaction的時候,對磁盤IO的壓力是比較大的。再者,LSMtree并不能很好的利用SSD的并行計算能力,這一點也可以理解。

但是,在當下的存儲引擎中,LSMtree還是很受歡迎,從性能的角度來考量,讀寫放大哪怕是空間放大(這三者是不可并存的)我最差的情況也就放大個10-50倍左右的放大成本,但是我能在性能上帶來將近千倍的速度提升(將隨機寫轉化為順序寫),所以,在性能面前,這些都是可以容忍的。

SSD與SATA的差異

  • 順序IO與隨機IO
  • 并行計算能力
  • 大量的重讀寫會使SSD的壽命降低。

當value較大的時候,LSMtree的表現

  • value越大,越容易觸發compaction
  • LSMtree的每一層level都可以簡單理解為其下一層的cache,value越大,cache的效果越差,每次訪問讀取到下層level的概率會增加。
  • 每條數據每次merge的時候,會造成寫入的量增加。

wisckey誕生的前景

其實,我們可以仔細回想一下,在LSMtree中,我們并不需要value是有序的,只要保證key是有序的,就可以滿足我們的需求。所以,我們是否可以考慮將key繼續存儲在LSMtree中,而將value區分存儲到log文件中,然后把value的指針一起存儲到LSMtree中,是的,這也是wisckey的思路:分離后的模型大致如下:

此時,我訪問數據的思路是這個樣子的:

  • insert:先append到value log的末尾,再將剛才append的value的地址塞到LSMtree中。
  • delete:將key從LSMtree中刪除,當compaction的時候,如果找不到對應的key那就在垃圾回收的時候順便一起將它回收掉就OK。
  • select:拿LSMtree中的key+addr直接獲取到value對應的地方,拿出來就行。

wisckey key/value分離的優勢

首先,key的存儲數據量相比原先的存儲模型減少的不僅僅是一個量級,所以,可以充分發揮LSMtree的特性。其次,將value分離之后,避免了compaction操作的時候無效的value移動,從而極大的降低了讀寫放大,增加SSD的使用壽命。再者,由于key的存儲量級的減少,cache能起到更好的效果。

可能引發的問題

之前對range進行操作的時候,只需要順序讀就OK,但是k/v分離之后,可能需要順序讀+多次隨機讀來達到目的,論文中提到,這個可以充分利用SSD的并行能力解決,但是能解決多少有待進一步追蹤。

上面也提到,lsmtree中value的delete操作,是依賴于compaction的時候的GC來操作的,但是k/v分離導致這個回收是異步的進行。基于這一點,我們來看看wisckey的處理思路:

whiskey優化了原有垃圾回收的做法,head指向最新的block插入的位置,tail表示回收value操作開始的那個位置,GC被觸發之后,我們從tail開始進行掃描,將有效的block移到head的后面,把tail到head的這一段位置清空,重置tail和head標記。不難看出,將有效的block后移這個操作,在某種程度上也帶來了寫放大,但是的確提高了效率,總之是在時間和空間這兩個點上進行權衡。wisckey他會根據delete這個操作請求的多少來決定觸發GC的時機。

奔潰一致性。

由于分離操作,一旦出現事故,wisckey如何保證奔潰情況下的一致性問題呢?

  • 對key和value的操作都是原子的,總共分為三種情況:
    • key/value都寫入成功,OK這就是我們要的效果。
    • key寫入成功,value寫入失敗,則把LSMtree中的key刪除,返回value不存在。
    • key寫入失敗,value寫入成功,返回不存在,寫入的value在后續的垃圾回收中回收掉就OK。

如果遇到宕機重啟,在恢復的過程中,它是順序恢復的。

可能存在的問題

  • 假如我的value log中存儲的都是一些較短的value,每次都需要和磁盤交互,對磁盤的吞吐量是一種考驗。在這里是否可以考慮添加一層緩存結構,將多個小的value合并之后再寫。
  • 待續

最后,致敬一下國外同行,關于這篇論文有一篇100頁的slides[1]和PDF[2],非常詳盡的描述了這篇論文的思路。

參考資料

[1]WiscKey:slides: https://www.usenix.org/sites/default/files/conference/protected-files/fast16_slides_lu.pdf

[2]WiscKey:pdf: https://www.usenix.org/system/files/conference/fast16/fast16-papers-lu.pdf

作者簡介:

Apache Pulsar committer

Apache BookKeeper contributor

Apache Pulsar Go client 作者及國內主要維護者

Apache Pulsar Go Functions 作者及國內主要維護者

Stremnative/pulsarctl 作者及國內主要維護者

 

streamnative/rop 作者及國內主要維護者

【責任編輯:武曉燕 TEL:(010)68476606】

 

責任編輯:武曉燕 來源: 碼農桃花源
相關推薦

2019-04-28 16:10:50

設計Redux前端

2021-06-26 07:04:24

Epoll服務器機制

2015-05-05 11:04:31

CoreOS自動化運維

2017-07-27 16:31:11

2019-02-18 16:21:47

華為代碼重構

2016-06-30 16:52:23

開源

2021-07-15 14:27:47

LinuxSocketClose

2012-12-26 09:14:11

SDN信息數據

2022-02-17 08:16:23

MMU內存管理

2021-07-14 09:48:15

Linux源碼Epoll

2024-07-08 12:03:41

2013-08-07 10:24:24

JDBC鏈接池

2023-04-11 08:37:30

TPUAI芯片

2012-04-29 10:37:28

APP

2010-07-16 09:00:20

開源RedOffice紅旗2000

2017-04-05 20:00:32

ChromeObjectJS代碼

2021-05-06 10:33:30

C++Napiv8

2021-06-10 09:52:33

LinuxTCPAccept

2017-04-01 13:30:23

OpenStack O容器技術

2012-07-04 17:00:06

獵豹瀏覽瀏覽器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品免费一区二区三区四区 | 日韩高清国产一区在线 | 99热首页| 99久久婷婷国产综合精品电影 | 久久精品高清视频 | 亚洲精品 在线播放 | 亚洲精品视频免费观看 | 国产成人免费视频 | 国产精品色 | 国产免费一区二区三区 | 国内久久 | 日韩精品免费一区二区在线观看 | 免费在线观看一区二区三区 | av播播| 91精品国产91久久久久游泳池 | 免费午夜剧场 | 福利片在线 | 午夜视频一区二区三区 | 综合久久网 | 免费在线观看毛片 | a级黄色毛片免费播放视频 国产精品视频在线观看 | 亚洲一区二区三区免费观看 | www.v888av.com| 亚洲成人久久久 | 国产欧美视频一区 | 久久精品免费一区二区 | 久久一区视频 | 日本三级全黄三级a | 日韩电影一区二区三区 | 国产精品久久久久久久久久久久久 | 日韩精品在线看 | 伊人看片| 成人免费毛片片v | 久久久久久久久久久高潮一区二区 | www.久久精品 | 成人不卡 | 欧美国产精品一区二区三区 | 91精品国产99久久 | 6080亚洲精品一区二区 | 激情一区二区三区 | 日韩视频在线观看中文字幕 |