高性能存儲引擎RocksDB總體概覽


前言


筆者最近在學習一個第三方高效K-V存儲系統RocksDB,相比較於其它類似成熟的存儲系統而言,其中有很多共同之處,不過也有其獨到設計之處。本文是筆者結合RocksDB GitHub上的wiki頁進行的一個匯總整理,也順當是幫助大家對RocksDB內部的整體模塊設計有一個快速的了解。

RocksDB的整體模塊


RocksDB作為一個可嵌入式的持久化存儲系統,它是一個單點高性能的存儲DB,不是我們平常我們說的分布式存儲系統。RocksDB能支持非常高吞吐量的IO讀寫,可以很好地作為大型分布式存儲系統元數據的存儲媒介,比如Hadoop Ozone就將其元數據使用RocksDB作為元數據的結果寫出。

RocksDB有和其它分布式存儲系統類似的術語操作定義,比如WAL(Write-Ahead-Log),Transaction,Compact,Snapshot等等。不同點在於分布式存儲系統需要依賴服務間的RPC通信做WAL的操作,而RocksDB沒有RPC的概念。所以RocksDB本質上來說它是一個可插拔式的存儲引擎選擇。

以下是筆者整理出的RocksDB的整體架構預覽圖:

在這里插入圖片描述

在上圖中,總共將RocksDB分成了5大子模塊,分別為:

  • Basic Operation,基本操作定義
  • Terminology,內部術語定義
  • Tool,內部工具
  • Logging/Monitoring ,日志和監控
  • System Behavior,內部系統行為

本文內容篇幅有限,下面我們只對上述部分模塊進行解讀。

RocksDB內部模塊解讀


此節我們對上圖中的部分模塊進行解讀。

Terminology


首先是RocksDB內部的相關術語定義說明,如上圖所示,主要有以下一些術語:

  • Write-Ahead-Log File,類似於HDFS JournalNode中的editlog,用於記錄那些未被成功提交的數據操作,然后在重啟時進行數據的恢復。
  • SST File,SST文件是一段排序好的表文件,它是實際持久化的數據文件。里面的數據按照key進行排序能方便對其進行二分查找。在SST文件內,還額外包含以下特殊信息:
    • Bloom Fileter,用於快速判斷目標查詢key是否存在於當前SST文件內。
    • Index / Partition Index,SST內部數據塊索引文件快速找到數據塊的位置。
  • Memtable,內存數據結構,用以存儲最近更新的db更新操作,memtable空間寫滿后,會觸發一次寫出更新操作到SST文件的操作。
  • Block Cache,純內存存儲結構,存儲SST文件被經常訪問的熱點數據。

Basic Operation


其次是Basic Operation模塊,雖說RocksDB在官網中介紹說是作為主要提供K-V形式的鍵值存儲,但是其內部提供的操作接口絕不僅僅是get,put兩類操作,比如還有如下幾類能適用於特殊使用場景的操作:

  • Iteration,RocksDB能夠支持區間范圍內的key迭代器的遍歷查找。
  • Compaction Filter,用戶可使用Compaction Filter對key值進行刪除或其它更新操作的邏輯定義,當系統進行Compact行為的時候。
  • Creating and Ingesting SST files,當用戶想要快速導入大批量數據到系統內時,可以通過線下創建有效格式的SST文件並導入的方式,而非使用API進行KV值的單獨PUT操作。
  • Delete Range,區間范圍的刪除操作,比一個個Key的單獨刪除調用使用更方便。
  • Low Priority Write,當用戶執行大批量數據load的操作時但擔心可能會影響到系統正常的操作處理時,可以開啟此屬性進行優先級的調整。
  • Read-Modify-Write,這個操作的實際含義是Merge操作的含義,讀取現有鍵值,進行更新(累加計數或依賴原有值的任何更新操作),將新的值寫入到原Key下。 如果使用原始Get/Set API的前提下,我們要調用2次Get 1次,然后再Set 1次,在Merge API下,使用者調用1次就足夠了。
  • Transaction,RocksDB內部提供樂觀式的OptimisticTransactionDB和悲觀式(事務鎖方式)的TransactionDB來支持並發的鍵值更新操作。

System Behavior


在RocksDB內部,有着許多系統操作行為來保障系統的平穩運行。

  • Compression,SST文件內的數據能夠被壓縮存儲來減小占用空間。
  • Rate Limit行為。用戶能夠對其寫操作進行速度控制,以此避免寫入速度過快造成系統讀延遲的現象。
  • Delete Schedule,系統文件刪除行為的速度控制。
  • Direct IO,RocksDB支持繞過系統Page Cache,通過應用內存從存儲設置中直接進行IO讀寫操作。
  • Compaction,數據的Compact行為,刪除SST文件中重復的key以及過期的key數據。

Logging/Monitoring


RocksDB內部有以下的日志監控工具:

  • Logger,可用的Logger使用類。
  • Statistic / Perf Context and IO Stats Context,RocksDB內部各類型操作的時間,操作數計數統計信息,此數據信息能被用戶用來發現系統的性能瓶頸操作。
  • EventListener,此監聽接口提供了一些event事件發生后的接口回調,比如完成一次flush操作,開始Compact操作的時候等等。

Tool


此外,RocksDB還提供以下3大類型的工具

第一類,性能測試工具,

  • Benchmark Tool
  • Stress Tool,壓力測試工具

第二類,workload模擬工具:

  • 用戶數據訪問行為模擬工具
  • Workload生成工具

第三類,性能分析工具,DB Analyzer。

綜上所述,就是RocksDB總體框架預覽了,每個模塊的內部其實還是有很多細節設計可以展開討論的,感興趣的同學可閱讀wiki鏈接進行進一步地學習。

引用


[1].https://github.com/facebook/rocksdb/wiki


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM