一、問題描述
將10億個元數據通過SSD 存儲起來,能夠實現快速的存和取
二、解決思路
2.1 聯合使用三級存儲設備
DRAM:作爲數據緩存區
SSD : 作爲熱數據存儲區
HDD :作爲冷數據存儲區
2.2 設計文件存儲格式
2.2.1關鍵字解釋
①頭結構:包含有一個Hash表,用以維護元數據項的標識符在元數據緩衝區中偏移量,通過這個Hash表,系統可以迅速在元數據緩衝區中定位所需元數據項
②元數據緩存區:是一個可追加的結構,新來的元數據保存在上一個元數據後面,緩存區滿了就往SSD中的元數據存儲單元寫,然後清空緩存區
③讀緩存塊:用於讀數據的時候,做緩存用
④元數據索引單元:包括了一個Bloom Filter文件(紀錄每塊元數據緩存區內的元數據)和一個無效元數據項標識符鏈表
⑤元數據文件:由多個元數據存儲單元組成,每個單元內有許多元數據項,其結構與DRAM中的元數據緩存區一致
⑥元數據索引文件:保存的就是每個元數據存儲單元的索引信息,由DRAM內的元數據索引單元拷貝而來
⑦元數據日誌文件:存放在HHD上面的冷元數據單元
2.2.2 機制介紹
首先元數據由外到內,最開始來到DRAM內的元數據緩衝區;
在頭結構紀錄下標識符和偏移量,通過Bloom Filter 在元數據索引單元內登記
如果緩衝區數據滿了,將元數據緩衝區數據遷移到元數據存儲單元中去,然後清空緩衝區;同時還將相應的元數據索引單元內的內容備份到元數據索引文件,且不刪除索引單元的內容,起將一直在內存中
在SSD上的元數據存儲單元做週期的垃圾回收,清除剩餘空間
執行居於熱度的數據遷移線程,將元數據存儲單元內的數據遷移到緩衝區,或者元數據日誌文件
2.3 元文件寫機制
其中的關鍵字和上部分介紹的數據存儲格式關鍵字一致
機制介紹:
【1】新元數據項append到元數據緩衝區
【2】在元數據索引單元內的Bloom Filter表內做元數據內容登記
【3】如果緩衝區滿了,數據寫回到SSD,其中寫的時候查詢無效元數據項ID表,對於無效的數據,直接丟棄,並將元數據索引單元寫入元數據索引項中
2.4 元文件讀取機制
【1】首先查找緩衝池中是否含有所要找的元數據,如果有則直接返回,讀取操作結束,否者繼續執行
【2】緩衝池沒有則需要到元數據單元或元數據日誌文件上查找,其將通過Bloom Filter找到所屬於那個數據單元,
【3】然後將數據單元讀入到DRAM的寫緩存中
【4】根據頭結構快速的定位到元數據
重點介紹如何通過Bloom Filter來找到元數據單元位置:
創建一個64叉樹,每一個數據單元的數據索引單元的Bloom Filter表作爲葉子節點,樹的深度不超過2,非葉子結點的Bloom Filter表爲各葉子節點Bloom Filter表做異或運算的結果。
64個Bloom Filter構成一個Bloom Filter Group、
64個Bloom Filter Group構成一個Bloom Filter Tree、
維護一張鏈表,記錄下多個Bloom Filter Tree的根節點。
本機制可以使原來一個一個搜索的時間複雜度O(n),降低爲O(logn)
搜索時,先快速的定位到哪個Tree下,再定位到哪個Group下,再遍歷到目的原文件存儲單元
2.5元文件修改機制
【1】先找到將要被修改的元數據
【2】在該元數據緩衝區中插入一條已經修改好的新元數據
【3】標記元數據索引單元中舊元數據爲無效數據
【4】下次元數據緩衝寫回時直接將舊數據丟棄
2.6獲得元文件存儲單元熱度機制
記錄k表示該元數據存儲單元在該時間段內被訪問的次數
記錄num表示該時間段內上層總共發出的元數據讀請求個數
k/num表示在某時間段內該元數據存儲單元的訪問次數佔總訪問次數的比例,訪問比例越高,表明在該時間段內該元數據存儲單元的訪問越頻繁,該元數據存儲單元的熱度就越大
使用最近一段時間內的訪問比例來衡量數據熱度,因爲該值能夠準確反映數據在最近一段時間的訪問頻度,避免很久之前的訪問對當前熱度的影響.
加入對之前訪問熱度的考慮,防止某些元數據存儲單元短期內訪問頻度的劇烈變化所造成熱度的波動。
系統會週期性迭代計算每個元數據存儲單元的熱度,使熱度能夠反映當前數據的訪問情況,這種熱度判定算法綜合數據的訪問頻率和最近訪問時間兩方面的因素,判定更加準確、合理,且在實現簡單,時間和空間開銷較小.
2.7 數據遷移機制
開啓一個線程執行遷移指令
處理到當前的元數據單元時,判斷其熱度值大小,熱度值有一個範圍區,如果小於最小值,則移入HHD,如果大於最大最則移入DRAM緩衝區
2.8 空間週期性回收機制
回收無效元數據項佔用的SSD空間,對元數據的更新操作採用異地更新的策略會造成元數據存儲單元中含有無效的元數據項
遷移線程會週期性回收那些無效元數據項比例超過50%的元數據存儲單元,將其中有效的元數據項寫入元數據緩衝區中,並對該存儲單元做上標誌.
當遷移到該元數據存儲單元時,系統不需要判定其訪問熱度,直接回收其佔用的空
三、相關的技術點
3.1 什麼是HDD,什麼是SSD,它的優點是什麼?
HDD是基於磁盤存儲架構
SSD是Solid State Drive固態硬盤
壽命:Flash memory有擦寫次數限制,大量小粒度隨機寫操作很影響使用壽命
優點:高帶寬,低時延
3.2 使用SSD的幾種類型:
① SSD作HDD緩存(速度加快,隨機讀寫次數很多,影響SSD壽命)
② HDD作SSD寫緩存(速度加快,容量受限制於SSD)
③ 數據分別存儲在SSD和HDD上(速度加快,SSD壽命受影響)
④ 針對特定負載所設計的SSD存儲系統(速度加快,依賴於負載特徵)
3.3 Bloom filter 布隆過濾器
布隆過濾器用於檢索一個元素是否在一個集合中
布隆過濾器是1970年由布隆提出的。實質上是一個很長的二進制矢量和一系列隨機映射Hash函數。
原理是,當一個元素被加入集合時,通過K個散列函數將這個元素映射成一個位數組中的K個點,把它們置爲1。檢索時,我們只要看看這些點是不是都是1就(大約)知道集合中有沒有它了:如果這些點有任何一個0,則被檢元素一定不在;如果都是1,則被檢元素很可能在。這就是布隆過濾器的基本思想。
優點,相比於其它的數據結構,布隆過濾器在空間和時間方面都有巨大的優勢。布隆過濾器存儲空間和插入/查詢時間都是常數(O(K))。另外, 散列函數相互之間沒有關係,方便由硬件並行實現。布隆過濾器不需要存儲元素本身,在某些對保密要求非常嚴格的場合有優勢;布隆過濾器可以表示全集,其它任何數據結構都不能.
缺點,誤算率是其中之一。隨着存入的元素數量增加,誤算率隨之增加。但是如果元素數量太少,則使用散列表足矣。
判斷結果在集合裏面的不一定在集合內
判斷結果不在集合裏面的一定不在集合內
另外,一般情況下不能從布隆過濾器中刪除元素