国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

存儲架構|Bitcask 引擎的設計,秒!

存儲 存儲軟件 存儲架構
Bitcask 是一種很有趣的存儲模型的設計,這是一種底層格式為日志模樣的 kv 存儲。Bitcask 起源于 Riak 分布式數據庫,Bitcask 論文 詳細介紹了它的由來。

Bitcask 是什么?

Bitcask 是一種很有趣的存儲模型的設計,這是一種底層格式為日志模樣的 kv 存儲。Bitcask 起源于 Riak 分布式數據庫,Bitcask 論文 詳細介紹了它的由來。

Bitcask 解決哪些的問題?

簡單梳理了下 Bitcask 論文中提到的架構設計目標:

  • 讀寫的低時延;
  • 高吞吐,在隨機寫入的場景;
  • 數據量級要比 RAM 大;
  • 持久化后的存儲,故障恢復也要方便;
  • 也要方便備份,方便恢復;

符合這些目標的會是哪些場景呢?下面一步步看一下。

Bitcask 架構設計

1 聊聊整體設計

要點一:基于文件系統,而非裸盤

這樣管理空間就方便了,而且可以把一些功能交給內核文件系統,比如讀 cache,寫 buffer 等。

要點二:一個磁盤只有一個寫入點

換句話說只有一個可寫的文件。這個文件叫做 active data file,其他的為只讀文件。active data file 寫到一個預定的閾值大小之后,就可以輪轉成只讀的文件。

比如,active data file 寫到 10 G 大小就不寫了,切成只讀模式,新建一個文件來寫。這個新文件就變成 active data file 。

要點三:active data file 只有 append 寫入

日志文件的標配嘛,永遠 append ,這樣才能保證最大程度的順序 IO ,壓榨出機械硬盤的順序性能。

要點四:刪除也是寫入

這個其實承接上面的。也是日志類型文件采用的手段,外面看來的原有對象的更新其實是操作日志的記錄,這樣才能最大限度的保持順序 IO 。

要點五:日志式文件本質是無序文件,依靠內存索引

在 LSM 的架構中也提供,日志文件只做 append ,從用戶內容來看是無序的(寫入時間上看是有序的),所以為了解決讀的問題,必須要靠各種索引結構來解決,在 LSM 里就是通過構建內存的跳表來解決索引的問題。

在 Bitcask 也是如此,Bitcask 在內存中構建所有 key 的 hash 表解決這個問題。

要點六:空間的回收叫做 merge ,其實就是 compact

Bitcask 內部的回收流程叫做 merge ,其實就是 compact ,原理很簡單:遍歷文件,讀舊寫新,遇到標記刪除了的內容丟掉即可。

要點七:文件 merge 之后,順帶生成一份 “hint file”

Bitcask 的索引全構建在內存,換句話說,就是在進程啟動的時候要解析所有的底層日志文件。那這時候底層文件的大小、內部對象數量的多少就決定了你構建的快慢,Bitcask 為了加速構建,所以提前把一些元數據信息放到尾端。這樣進程啟動的時候,就能直接讀 “hint file” 來獲取元數據了。

2 看看架構圖

Bitcask 是基于文件系統的:

Bitcask 只有一個可寫的文件。可寫的文件叫做 active file,只讀的叫做非 active:

Bitcask 它的文件是有格式的:

Bitcask 它內存的索引大概是這樣的:

3 寫入

寫入的過程很簡單,Bitcask 先寫文件,持久化落盤之后更新內存 hash 表。

總結下寫的流程

寫日志文件,返回 file_id, offset, length 等關鍵信息;

更新內存 hash 表內容,把用戶 key 和上面的位置信息關聯起來;

思考兩點:

從 IO 次數來看,磁盤 IO 只需要整體落一次就夠了,不需要單獨寫索引;

從 IO 模型來看,寫永遠都是順序 IO,對機械盤來講,性能最優;

4 讀取

讀取的過程很簡單,先在內存 hash 表中查找用戶 key ,從而獲取到用戶 value 在日志文件的位置。

  1. file_id: 標示在哪個文件; 
  2. offset: 標示在文件的開始位置; 
  3. length: 標示值的長短(結束位置); 

通過以上三個信息,就能找到對應的文件取回數據了。

總結下讀的流程:

在內存 hash 表中找到 key 的值的文件位置;

下盤讀數據;

思考兩點:

  • 從 IO 次數來看,這里性能應該還是不錯的,因為只有讀數據的時候才需要磁盤 IO ;
  • 從 IO 模型來考慮,讀是非常大概率導致隨機 IO 的,但這個可以依賴于文件系統的緩存,讀過的數據將可以加速訪問;

5 回收

Bitcask 回收的流程叫做 merge,其實很簡單,在日志文件中刪除的標記已經打上了,內存里又有全部索引,那只需要把有效的數據讀出來寫到新文件,然后把舊文件一刪,就完成了空間的釋放。

但簡單的東西往往有內涵,在前面我們提到,用戶的寫入為了順序化采用了日志的格式,但是 merge 這個是后端程序有時候會和前段的寫入并發執行的,但底下磁盤只有一塊,兩個都是順序 IO ,但并發起來就成隨機 IO 了。所以它的精細之處就在于 merge 的時機選擇和速率,這個也是它的含金量之一。

前面提到,Bitcask 為了索引 key/value 的位置,在內存中構建了全部的索引關系。這個構建在初始化的時候可能會非常耗時,因為要遍歷全部的日志文件。怎么解決這個問題呢?

干脆直接把這個索引關系在合適的時機準備好,進程啟動加載的時候,直接讀這部分數據就行了。

最合適的時機不就是 merge 過程嘛。merge 過程無論怎樣都要遍歷了一次文件,生成一份索引關系歸檔起來就是順手的事情。這份歸檔的索引關系在 Bitcask 里叫做 “hint file” 。

劃重點:內存的索引內容和文件的 “hint file” 是對應的。

不一樣的思考

每一種設計都有它針對的場景,通用的東西往往是平庸的。Bitcask 它也是如此,它不適用于所有場景,那它適用哪些場景呢?

Bitcask 主要是持久化日志型文件加上易失的內存 hash 表組成。

這里有很多可以思考的關鍵點:

  • 內存 hash 表到底有多大?
  • Bitcask 它適合存儲多大的數據?
  • Bitcask 它適合存儲大對象還是小對象?

為了回答上面幾個問題,需要假定一些數據結構:

日志結構:

  1. |crc|timestamp|key size|value size|key|value| 

我們假設前面頭部元數據用 4+4+4+4 個字節。

hash 表的結構:

  1. key -> |file_id| record size | record offset | timestamp | 

假定是 4+4+4+4 個字節(注意,由于這里用 offset 用 4 個字節表示,所以日志文件尋址范圍在 0-4G 之間)。

進一步假設用戶 key 的平均大小為 32 字節。

1 內存 hash 表到底有多大?

一個 key/value 在內存中最少占用 32+16 字節,假設 32 GiB 的內存,那么可以存儲 32 GiB/ 48 Byte = 715,827,882 個索引。

7 億個健值對?

貌似還挺多,但也不一定。很多人對這個沒什么概念,我們再推進一個假設,假設用戶 value 平均大小是 8 KiB,那么就能算得的總空間是 ( 715,827,882 * 8 * 1024 ) / ( 1024 * 1024 * 1024 * 1024 ) = 5.3 TiB 。

5.3 TiB ?

實話實說,貌似不太大。現在一個機械盤 16 TiB 的都很普遍了。

現在反過來推算下,假設現在有一個 16 TiB 的盤,用戶 key 平均 32 字節,value 平均 8 KiB,如果寫滿的話,需要多少內存?

算一下,( 16 TiB / (16+32+8KiB) ) * 48 Byte = 95 GiB ,一個 16 TiB 的盤寫滿的話需要 95 GiB 內存來存儲它的索引。這其實是很大的開銷,因為一臺機器可能 64 塊盤。。。。

95 GiB * N 的內存消耗能抗的住嗎?

不一定,看你公司的機型嘍。這都是錢嘛,畢竟內存是很貴的。

索引全內存構建,這個構建時間你能接受嗎?

不一定,如果說滿載的數據構建要 1 個小時,你還會接受嗎?當然不。

2 Bitcask 它適合存儲多大的數據?

那到底 Bitcask 適合存儲多少數據呢?

這個沒有標準答案,還是要看場景分析。就拿我上面舉的例子來講,對于 60 盤( 單盤 16 TiB )的場景來講,原生的Bitcask 可能就不大適合。

對于某些動輒就說 Bitcask 適合存儲海量小對象而不加任何前提的說法,奇伢覺得還是不夠嚴謹。

在 這篇Bitcask 論文[1] 中其實有這么一段話

The tests mentioned above used a dataset of more than 10×RAM on the system in question, and showed no sign of changed behavior at that point. This is consistent with our expectations given the design of Bitcask.

它這里的基本目標好像是 10 倍的 RAM ?

假設內存 32 GiB,那換算下就是 320 GiB 的磁盤空間。這,似乎是內存+ SSD 盤更適合 Bitcask 的場景,而不是真正超大容量 HDD 磁盤存儲的場景。

3 Bitcask 它適合存儲大對象還是小對象?

這個就很有意思了,Bitcask 能不能存儲海量數據相信通過的計算讀者已經有數了。但是它適合的是大對象還是小對象呢?

這個其實還是比較明顯的,Bitcask 無疑是適合小對象的。理由很簡單,它從設計上就規定了只有一個寫入點( active file ),也就是說用戶的寫入是串行的,那么如果說用戶的 value 特別大,比如 100 M,那么系統吞吐會非常差(比如說,這個時候來了個 1K 的對象,卻只能排隊)。而如果都是些小對象,那么完全可以聚合很多 key/value ,一次性落盤。這樣既滿足了順序 IO ,又提供了很好的系統的吞吐能力。

所以這里很重要的一點是:對象的大小。架構的設計受此影響頗深。

拋出一個思考的問題:你認為什么樣的才是小對象?

奇伢認為,大小不夠一筆 IO 的都可以認為是小對象。比如說某系統 IO 落盤以 1M 為單位,那么 1M 以內的都可認為是小的對象,這樣就可以很好的做到 IO 的聚合,這也是 Bitcask 非常適合的場景。這樣就能做到:即使底下是串行的寫入也能提供用戶并發的性能。當然這個并不嚴謹,實際情況要具體分析。

項目實現

Riak 是以 Erlang 編寫的一個高度可擴展的分布式數據存儲,是一個很出名的 nosql 的數據庫 , Bitcask 的誕生和它關系密切 。

總結

Bitcask 展示了一個極富思考的存儲架構,它簡單有效,并且可以有很多變形;

Bitcask 并不是一個最快的存儲系統,但是它性能足夠,并且簡單、穩定;

估算的能力很重要,結合自己的場景,估算的數據能指導架構設計;

Bitcask 無疑是適合小對象的。小對象的定義?奇伢淺顯的認為一次 IO 能裝的下的都可以認為是小對象;

Bitcask 雖然只有一個可寫文件,并且是 append 串行寫,但通過聚合小對象、批量落盤對外可以體現出不錯的并發能力哦;

Bitcask 適合小對象,但是不適合海量對象。主要是內存索引的限制。當然也不絕對的。原生論文只是提供了一個設計思路,我們可以在此基礎上有很多變形設計;

參考資料

[1]Bitcask 論文: https://riak.com/assets/bitcask-intro.pdf

后記

Bitcask 在設計上和 LSM 有異曲同工之處,都是通過日志的形式來承接寫,提供最優的寫的性能。雖然功能不如 LSM 豐富,但它簡單穩定,非常值得學習。

 

責任編輯:武曉燕 來源: 奇伢云存儲
相關推薦

2023-11-22 08:35:34

存儲引擎bitcask

2022-09-29 12:09:40

MySQLTiDB數據庫

2019-01-14 14:25:25

MySQL存儲邏輯架構

2018-10-16 14:26:22

分布式塊存儲引擎

2017-03-15 15:45:33

MySQL存儲引擎設計與實現

2023-01-04 08:02:16

工作流架構設計

2020-07-01 08:05:46

Kubernetes容器開發

2012-09-19 13:46:37

存儲存儲設計快速表態

2017-10-12 08:59:27

企業云存儲架構

2021-08-10 14:29:06

MySQL數據庫存儲

2011-05-03 10:09:37

MySQL存儲引擎

2020-04-10 12:12:13

InnoDB存儲架構

2014-09-25 11:25:19

游戲引擎架構設計

2023-10-27 11:35:18

存儲架構版本庫

2024-10-15 11:04:18

2017-11-27 08:50:29

架構數據存儲

2013-04-19 01:42:02

2009-02-02 09:31:25

MySQL存儲引擎MyISAM

2010-05-21 10:58:19

MySQL存儲引擎

2017-07-11 16:27:14

EB級存儲數據
點贊
收藏

51CTO技術棧公眾號

日韩高清在线一区| 99久久久无码国产精品| 久久精品国产69国产精品亚洲| 激情小视频在线| 久久午夜电影网| 国产一级不卡视频| 日本系列欧美系列| 麻豆成人在线播放| 中文字幕免费一区二区| 久久全国免费视频| 久久久久毛片免费观看| av日韩电影| 日韩欧美卡一卡二| 乱人伦中文视频在线| 91久久久免费一区二区| 欧美日韩激情视频一区二区三区| 午夜在线电影亚洲一区| 久草在线官网| 亚洲一区在线观看免费| 成人黄色免费| 天天av天天翘天天综合网色鬼国产 | 一区二区在线视频| av老司机免费在线| 亚洲图片欧美日产| 亚洲精品aa| 日本免费新一区视频| 成人免费视频视频在| 国产一区二区三区四区三区四| www.成人三级视频| 米奇777在线欧美播放| 亚洲综合欧美日韩| 99久久99久久久精品齐齐| 日本在线一二三区| 欧美日韩p片| 狠狠久久综合婷婷不卡| 视频一区二区三区中文字幕| 国产大尺度在线观看| 91在线视频免费91| 日本a级黄色| 宅男噜噜噜66一区二区66| 成人av观看| 91精品国产高清久久久久久| 深夜福利久久| 美脚丝袜一区二区三区在线观看| 久久国产生活片100| 国内外成人免费激情视频| 日韩在线二区| 国产三级精品在线不卡| 免费人成在线不卡| 超碰在线人人爱| 色噜噜狠狠成人中文综合| 丁香花在线高清完整版视频| 日韩在线播放视频| 99国产**精品****| 久久av喷吹av高潮av| 亚洲色图20p| 欧美成人精品一区二区男人看| 伊人久久精品视频| 日本欧美视频| 先锋影音男人资源| 亚洲一区二区成人在线观看| 97超碰资源站在线观看| 欧美交受高潮1| 日韩午夜免费视频| 91精品国产91久久久久福利| 日韩精品一卡| 正在播放91九色| 一区二区三区高清在线| 欧洲精品二区| 午夜精品一区二区三区在线视频 | 亚洲午夜极品| 久久国内精品一国内精品| 国产一区二区三区网| 免费观看成人在线| 日本一区二区视频在线观看| 国产高清在线观看| 久久精品男人天堂| 亚洲精品社区| 成人看片app| 亚洲第一男人av| 日韩电影一区| 国产精品沙发午睡系列| 欧美日本韩国一区二区三区视频 | 精品亚洲夜色av98在线观看| 国产日产精品一区二区三区四区的观看方式 | 成人99免费视频| 性网站在线播放| 欧美成人三级视频网站| 国产精品一国产精品k频道56| 91福利视频网| 日韩va亚洲va欧美va久久| sm一区二区三区| 这里只有精品久久| 亚洲精华国产欧美| 久久国产情侣| 乱亲女秽乱长久久久| 麻豆免费看一区二区三区| 免费在线看v| 日韩av成人在线观看| 97久久超碰国产精品电影| brazzers在线观看| 国产一区二区无遮挡| 亚欧色一区w666天堂| 久久大胆人体视频| 日本三级免费观看| 中文字幕亚洲在线| 精品一区二区三区的国产在线播放| 中文字幕在线播放| 91嫩草在线| 日韩欧亚中文在线| 香蕉人人精品| 免费99热在线观看| 欧美高清无遮挡| 久久网站最新地址| 亚洲福利影视| 999在线观看视频| 国产一区二区日韩| 国产一区福利在线| 97蜜桃久久| 一区二区三区的久久的视频| 日韩一级在线观看| 久久资源在线| 日本三级在线观看网站| 久久riav二区三区| 色婷婷久久99综合精品jk白丝| 欧美日一区二区| 久草影视在线| 91精品美女在线| 色综合亚洲欧洲| 欧美人成在线| 免费a级在线播放| 欧美一区二区三区在线播放| 日韩免费在线观看| 另类专区欧美蜜桃臀第一页| 蜜桃av.网站在线观看| 免费网站在线观看视频| 中文字幕精品一区二区精品| 成人午夜短视频| 精品国产一级| 激情五月俺来也| 国产www精品| 日韩欧中文字幕| 中文一区二区| 欧美激情20| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 久久夜色精品国产欧美乱| 中文字幕不卡在线播放| 西野翔中文久久精品字幕| 中文字幕一区免费| 精品亚洲欧美日韩| 亚洲国产精品福利| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 麻豆一区二区在线| 户外露出一区二区三区| 国产午夜福利100集发布| 欧美日韩国产成人在线| 一区二区在线观看免费| 亚洲精品小说| eeuss鲁一区二区三区| heyzo亚洲| 国产精品永久免费观看| 69堂精品视频| av中文一区二区三区| 欧美一级淫片| 岛国毛片av在线| 成人性生生活性生交12| 91久久嫩草影院一区二区| 精品噜噜噜噜久久久久久久久试看| 成人免费观看av| 99精品视频在线观看免费播放| 青春草免费在线视频| 一女被多男玩喷潮视频| 成人黄色av免费在线观看| 精品久久久久久久久久久久包黑料 | 国产黄在线看| 中文字幕一区二区中文字幕| 久久九九亚洲综合| 欧美日韩在线观看视频| 韩国一区二区三区| 佐山爱痴汉视频一区二区三区| 国产v亚洲v天堂无码| 亚洲九九九在线观看| 亚洲日本乱码在线观看| 国产日韩亚洲| 动漫一区二区三区| 波多野结衣一区二区| 国产精彩精品视频| 91麻豆精品国产91久久久资源速度| 国产精品88888| 成人激情电影在线| 日本综合久久| 成人高潮成人免费观看| 成人在线免费播放视频| 久久精品国产美女| 91国内免费在线视频| 精品国产一区二区三区四区四| 亚洲九九爱视频| 成人av网在线| 老司机亚洲精品| 色135综合网|