RocksDB 是一個用於鍵值數據的高性能嵌入式數據庫 [2] [3] [4] [5] [6]。它由 Google LevelDB 分支而來,針對輸入/輸出(I/O)性能受限的負載狀況,對多核處理器(CPUs)進行了優化,可以有效利用高速存儲,如固態驅動器(SSD)等。它採用結構化日誌合併樹(LSM 樹)的數據結構,由 C++ 開發,並在官方提供 C++ 、 C 和 Java 的語言綁定,並由眾多其他第三方語言綁定所支持。 RocksDB 是免費的開源軟件,最初發佈於 BSD 3 條款許可下 [7] [8] [9]。2017 年 7 月,項目遷移到 Apache 2.0 和 GPLv2 的雙重許可下 [10]。在將先前的 BSD+Patents 許可條款列入黑名單之後,這一改變有助於它在 Apache 軟件基金會的項目中得到採用 [11] [12]。
RocksDB 被廣泛用於各大互聯網企業 [13] 的生產環境,這些廠商包括 Facebook 、 Yahoo! [14] 和 LinkedIn [15] 等。
特性
RocksDB 與 LevelDB 一樣,將鍵和值存儲在任意字節數組中,並且數據按鍵或通過提供自定義比較器按字節排序。
RocksDB 提供了 LevelDB 的所有功能,此外還包括:
- 事務 [16]
- 備份 [17] 和快照 [18]
- 列族 [19]
- 布隆過濾器 [20]
- 生存時間 (TTL) 支持 [21]
- 通用壓實 [22]
- 合併運算符 [23]
- 統計收集 [24]
- 地理空間索引 [25]
以及其他 RocksDB 包含但 LevelDB 中沒有的功能 (頁面存檔備份,存於互聯網檔案館)。
RocksDB 並不是一種 SQL 數據庫(儘管在 MyRocks 中結合了 RocksDB 與 MySQL)。類似於 NoSQL 和 dbm 存儲的實現,RocksDB 使用的不是關係數據模型,不支持 SQL 查詢。另外,它也不提供對二級索引的直接支持,不過,用戶可通過列族構建索引。在使用方面,應用程式需要以庫的形式調用 RocksDB,其本身並不提供伺服器或命令行界面。
歷史
2012 年 4 月,時任 Facebook 開發者的 Dhruba Borthakur 在 LevelDB 的基礎上創建了一個新分支,自此開啟了 RocksDB 項目[26] [27]。項目的初衷是提高伺服器在高工作負載下的性能 [28] [29]。
集成
作為一個嵌入式數據庫,RocksDB 可用作大型數據庫管理系統(DBMS)中的存儲引擎。例如,Rockset 使用 RocksDB [30] 用於分析數據處理。
以下項目已將現有數據庫系統替換為 RocksDB,或把 RocksDB 作為備選存儲引擎:
ArangoDB 已將 RocksDB 添加到存儲引擎配置 「mmfiles」 中 [31]。自 ArangoDB 3.4 版本起,RocksDB 將成為默認存儲引擎 [32]。
採用 RocksDB 可顯著提高 Cassandra 的性能。一般情況下快 3-4 倍,個別用例中快至 100 倍。該項目由 Facebook 的 Instagram 團隊開發,他們在開原始碼的同時也發佈了性能結果基準 [33]。
MariaDB 可將 MyRocks 用作存儲引擎,後者為 RocksDB 的一個分支。該功能自 MariaDB 10.2.5(Alpha 版)[34] 起可用,於 2018 年的 MariaDB 10.2.16 版後穩定 [35]。
MongoRocks 項目為 MongoDB 提供了一個存儲模塊,其存儲引擎為 RocksDB [36] [37] [38]。
Rocks Strata 項目與該項目有關。當把 RocksDB 用作存儲引擎時,這個採用 Go 語言編寫的工具可用於管理 MongoDB 的增量備份 [39]。
以 RocksDB 為基礎,MyRocks 項目為 MySQL 提供了一個新型存儲引擎 [40] [41],並於 Percona Live 2016 展示了其詳細信息 [42]。
Oxigraph (頁面存檔備份,存於互聯網檔案館)是一個實現 SPARQL 標準的圖數據庫,它基於RocksDB。
UKV 項目 [43] 允許用戶使用 RocksDB 作為底層鍵值存儲。它對創建、讀取、更新和刪除(CRUD) 這些不同存儲引擎都會涉及的共有操作進行了抽象,並對多個高級語言(包括 Python、 Java 和 Go )進行結構化綁定。
以下數據庫系統和應用程式選擇使用 RocksDB 作為其嵌入式存儲引擎:
Ceph's BlueStore 存儲層採用 RocksDB 對 OSD 設備中的元數據進行管理 [44]。
Apache Flink 採用 RocksDB 存儲檢查點 [45]。
LogDevice 的 LogsDB 構建在 RocksDB 之上 [48]。
自 2018 年以來,Manhattan 分佈式鍵值存儲系統一直採用 RocksDB 作為存儲 Twitter 數據的主要引擎 [49]。
用於運營數據分析的 Rockset (頁面存檔備份,存於互聯網檔案館) 服務採用 RocksDB 作為其存儲引擎 [50]。
在 ssdb-rocks 項目 [51] 中, RocksDB 被用作 SSDB NoSQL 數據庫的存儲引擎 [52]。
YugabyteDB [55] 數據庫採用 RocksDB 的修改版本作為其 DocDB 存儲引擎的一部分。
第三方語言綁定
可用於 RocksDB 的第三方程式語言綁定包括:
參考
外部連結
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.