RocksDB 是一個用於鍵值數據的高性能嵌入式資料庫 [2] [3] [4] [5] [6]。它由 Google LevelDB 分支而來,針對輸入/輸出(I/O)性能受限的負載狀況,對多核處理器(CPUs)進行了優化,可以有效利用高速存儲,如固態驅動器(SSD)等。它採用結構化日誌合併樹(LSM 樹)的資料結構,由 C++ 開發,並在官方提供 C++CJava語言綁定,並由眾多其他第三方語言綁定所支持。 RocksDB 是免費的開源軟體,最初發布於 BSD 3 條款許可下 [7] [8] [9]。2017 年 7 月,項目遷移到 Apache 2.0GPLv2 的雙重許可下 [10]。在將先前的 BSD+Patents 許可條款列入黑名單之後,這一改變有助於它在 Apache 軟體基金會的項目中得到採用 [11] [12]

RocksDB
原作者Dhruba Borthakur
開發者Meta Platforms (was Facebook, Inc.)
首次發布2012年5月,​12年前​(2012-05
當前版本
  • 9.7.3(2024年10月16日;穩定版本)[1]
編輯維基數據鏈接
原始碼庫 編輯維基數據鏈接
程式語言C++
作業系統Windows, macOS, Linux, FreeBSD, OpenBSD, Solaris, AIX
平台Cross-platform
類型Embedded database
許可協議Apache 2.0 or GPL 2
網站rocksdb.org

RocksDB 被廣泛用於各大網際網路企業 [13] 的生產環境,這些廠商包括 FacebookYahoo! [14]LinkedIn [15] 等。

特性

編輯

RocksDB 與 LevelDB 一樣,將鍵和值存儲在任意字節數組中,並且數據按鍵或通過提供自定義比較器按字節排序。

RocksDB 提供了 LevelDB 的所有功能,此外還包括:

以及其他 RocksDB 包含但 LevelDB 中沒有的功能頁面存檔備份,存於網際網路檔案館)。

RocksDB 並不是一種 SQL 資料庫(儘管在 MyRocks 中結合了 RocksDB 與 MySQL)。類似於 NoSQLdbm 存儲的實現,RocksDB 使用的不是關係數據模型,不支持 SQL 查詢。另外,它也不提供對二級索引的直接支持,不過,用戶可通過列族構建索引。在使用方面,應用程式需要以的形式調用 RocksDB,其本身並不提供伺服器或命令行界面

歷史

編輯

2012 年 4 月,時任 Facebook 開發者的 Dhruba Borthakur 在 LevelDB 的基礎上創建了一個新分支,自此開啟了 RocksDB 項目[26] [27]。項目的初衷是提高伺服器在高工作負載下的性能 [28] [29]

集成

編輯

作為一個嵌入式資料庫,RocksDB 可用作大型資料庫管理系統(DBMS)中的存儲引擎。例如,Rockset 使用 RocksDB [30] 用於分析數據處理。

替代後端

編輯

以下項目已將現有資料庫系統替換為 RocksDB,或把 RocksDB 作為備選存儲引擎:

ArangoDB

編輯

ArangoDB 已將 RocksDB 添加到存儲引擎配置 「mmfiles」 中 [31]。自 ArangoDB 3.4 版本起,RocksDB 將成為默認存儲引擎 [32]

Cassandra

編輯

採用 RocksDB 可顯著提高 Cassandra 的性能。一般情況下快 3-4 倍,個別用例中快至 100 倍。該項目由 Facebook 的 Instagram 團隊開發,他們在開原始碼的同時也發布了性能結果基準 [33]

MariaDB

編輯

MariaDB 可將 MyRocks 用作存儲引擎,後者為 RocksDB 的一個分支。該功能自 MariaDB 10.2.5(Alpha 版)[34] 起可用,於 2018 年的 MariaDB 10.2.16 版後穩定 [35]

MongoDB

編輯

MongoRocks 項目為 MongoDB 提供了一個存儲模塊,其存儲引擎為 RocksDB [36] [37] [38]

Rocks Strata 項目與該項目有關。當把 RocksDB 用作存儲引擎時,這個採用 Go 語言編寫的工具可用於管理 MongoDB 的增量備份 [39]

以 RocksDB 為基礎,MyRocks 項目為 MySQL 提供了一個新型存儲引擎 [40] [41],並於 Percona Live 2016 展示了其詳細信息 [42]

Oxigraph

編輯

Oxigraph頁面存檔備份,存於網際網路檔案館)是一個實現 SPARQL 標準的圖資料庫,它基於RocksDB。

UKV 項目 [43] 允許用戶使用 RocksDB 作為底層鍵值存儲。它對創建、讀取、更新和刪除(CRUD) 這些不同存儲引擎都會涉及的共有操作進行了抽象,並對多個高級語言(包括 PythonJavaGo )進行結構化綁定。

嵌入式

編輯

以下資料庫系統和應用程式選擇使用 RocksDB 作為其嵌入式存儲引擎:

Ceph's BlueStore

編輯

Ceph's BlueStore 存儲層採用 RocksDB 對 OSD 設備中的元數據進行管理 [44]

編輯

Apache Flink 採用 RocksDB 存儲檢查點 [45]

FusionDB

編輯

FusionDB [46] 將 RocksDB 作為 XML、鍵值對和 JSON 的存儲引擎 [47]

LogDevice LogsDB

編輯

LogDevice 的 LogsDB 構建在 RocksDB 之上 [48]

Manhattan

編輯

自 2018 年以來,Manhattan 分布式鍵值存儲系統一直採用 RocksDB 作為存儲 Twitter 數據的主要引擎 [49]

Rockset

編輯

用於運營數據分析的 Rockset頁面存檔備份,存於網際網路檔案館) 服務採用 RocksDB 作為其存儲引擎 [50]

在 ssdb-rocks 項目 [51] 中, RocksDB 被用作 SSDB NoSQL 資料庫的存儲引擎 [52]

TiDB 項目 [53] 採用 RocksDB 作為其存儲引擎 [54]

YugabyteDB

編輯

YugabyteDB [55] 資料庫採用 RocksDB 的修改版本作為其 DocDB 存儲引擎的一部分。

第三方語言綁定

編輯

可用於 RocksDB 的第三方程式語言綁定包括:  

參考

編輯
  1. ^ https://github.com/facebook/rocksdb/releases/tag/v9.7.3; 出版日期: 2024年10月16日; 檢索日期: 2024年10月16日.
  2. ^ Performance Benchmarks. GitHub. [November 29, 2015]. (原始內容存檔於2019-08-31). 
  3. ^ Benchmarking the leveldb family. 7 July 2014 [March 10, 2016]. (原始內容存檔於2020-02-24). 
  4. ^ Comparing LevelDB and RocksDB, take 2. 27 April 2015 [March 10, 2016]. (原始內容存檔於2020-02-24). 
  5. ^ Benchmarking LevelDB vs. RocksDB vs. HyperLevelDB vs. LMDB Performance for InfluxDB. 20 June 2014 [March 10, 2016]. (原始內容存檔於2020-02-24). 
  6. ^ Golan-Gueta, Guy; Bortnikov, Edward; Hillel, Eschar; Keidar, Idit. Scaling concurrent log-structured data stores. April 21, 2015: 1–14. ISBN 9781450332385. doi:10.1145/2741948.2741973. 
  7. ^ Facebook's latest open source effort: a flash-powered database called RocksDB. 21 November 2013 [March 10, 2016]. (原始內容存檔於2020-02-24). 
  8. ^ Under the Hood: Building and open-sourcing RocksDB. Facebook. [March 10, 2016]. (原始內容存檔於2019-10-19). 
  9. ^ RocksDB - Facebook's Database Now Open Source. [March 10, 2016]. (原始內容存檔於2020-02-24). 
  10. ^ GitHub pull request. GitHub. [July 20, 2017]. (原始內容存檔於2020-02-29). 
  11. ^ Apache says 'no' to Facebook code libraries. The Register. [July 20, 2017]. (原始內容存檔於2020-02-24). 
  12. ^ GitHub issue. GitHub. [July 20, 2017]. (原始內容存檔於2020-02-29). 
  13. ^ Users.md. GitHub. [December 1, 2015]. (原始內容存檔於2020-02-29). 
  14. ^ RocksDB on Steroids. [March 10, 2016]. (原始內容存檔於2020-02-24). 
  15. ^ Benchmarking Apache Samza: 1.2 million messages per second on a single node. [March 10, 2016]. (原始內容存檔於2020-02-24). 
  16. ^ RocksDB transactions. GitHub. [2016-04-04]. (原始內容存檔於2020-02-29). 
  17. ^ How to backup RocksDB?. GitHub. [2017-07-19]. (原始內容存檔於2024-01-31). 
  18. ^ Checkpoints. GitHub. [2017-07-19]. (原始內容存檔於2020-02-29). 
  19. ^ Column families in RocksDB. GitHub. [2016-04-04]. (原始內容存檔於2019-07-17). 
  20. ^ RocksDB bloom filters. GitHub. [2016-04-04]. (原始內容存檔於2019-06-09). 
  21. ^ RocksDB TTL support. GitHub. [2016-04-04]. (原始內容存檔於2015-04-05). 
  22. ^ Universal compaction. GitHub. [2016-04-04]. (原始內容存檔於2015-04-05). 
  23. ^ RocksDB merge operator. GitHub. [2016-04-04]. (原始內容存檔於2020-02-18). 
  24. ^ RocksDB perf context and IO stats context. GitHub. [2016-04-04]. (原始內容存檔於2020-02-29). 
  25. ^ Spatial indexing in RocksDB. rocksdb.org. [2018-07-19]. (原始內容存檔於2020-02-24). 
  26. ^ First commit where RocksDB diverges from LevelDB. GitHub. May 10, 2012 [March 15, 2016]. (原始內容存檔於2020-02-29). 
  27. ^ Rocksdb readme file. GitHub. Nov 30, 2012 [March 15, 2016]. (原始內容存檔於2020-02-29). 
  28. ^ The History of RocksDB. November 24, 2013 [March 10, 2016]. (原始內容存檔於2020-02-24). 
  29. ^ Borthakur, Dhruba. RocksDB: A High Performance Embedded Key-Value Store for Flash Storage - Data@Scale. YouTube. November 22, 2013 [March 10, 2016]. (原始內容存檔於2019-08-31). ... The story of why we decided to do RocksDB ... 
  30. ^ Dhoot, Sandeep. How We Use RocksDB at Rockset. rockset.com. 2019-06-27 [2023-03-01]. (原始內容存檔於2019-07-09). 
  31. ^ Comparing new RocksDB and MMFiles storage engines. [2024-01-31]. (原始內容存檔於2023-12-09). 
  32. ^ RC1 ArangoDB 3.4 - Whats new?. 6 September 2018 [2024-01-31]. (原始內容存檔於2020-02-24). 
  33. ^ Open-sourcing a 10x reduction in Apache Cassandra tail latency. 5 March 2018 [2024-01-31]. (原始內容存檔於2021-01-12). 
  34. ^ MyRocks. MariaDB KnowledgeBase. [2019-04-28]. (原始內容存檔於2019-12-18). 
  35. ^ MariaDB 10.2.16 Release Notes. [2024-01-31]. (原始內容存檔於2020-08-03). 
  36. ^ mongodb-partners/mongo-rocks. GitHub. 29 October 2021 [2024-01-31]. (原始內容存檔於2018-06-11). 
  37. ^ Integrating RocksDB with MongoDB. [July 19, 2018]. (原始內容存檔於2020-02-24). 
  38. ^ MongoDB + RocksDB at Parse. [December 1, 2015]. (原始內容存檔於2017-10-21). 
  39. ^ facebookgo/rocks-strata. GitHub. 31 October 2021 [2024-01-31]. (原始內容存檔於2018-06-11). 
  40. ^ facebook/mysql-5.6. GitHub. 2 November 2021 [2024-01-31]. (原始內容存檔於2019-11-15). 
  41. ^ MyRocks: MySQL on RocksDB (PDF). [November 29, 2015]. (原始內容存檔 (PDF)於2016-03-16). 
  42. ^ MyRocks Deep Dive. 19 April 2016 [May 9, 2016]. (原始內容存檔於2016-12-16). 
  43. ^ 43.0 43.1 43.2 43.3 43.4 unum-cloud/ukv. GitHub. 28 December 2022 [2024-01-31]. (原始內容存檔於2023-03-07). 
  44. ^ Storage Devices -- Ceph Documentation. [2024-01-31]. (原始內容存檔於2020-02-24). 
  45. ^ Apache Flink 1.8 Documentation: State Backends. ci.apache.org. [2019-08-11]. (原始內容存檔於2018-10-25). 
  46. ^ FusionDB. Evolved Binary. [2024-01-31]. (原始內容存檔於2020-02-13). 
  47. ^ The Design and Implementation of FusionDB (PDF). XML Prague. [2024-01-31]. (原始內容存檔 (PDF)於2019-02-20). 
  48. ^ LogDevice: a distributed data store for logs. Mark Marchukov, Facebook. 31 August 2017 [2024-01-31]. (原始內容存檔於2017-10-06). 
  49. ^ Adopting RocksDB within Manhattan. Twitter. 28 December 2022 [2024-01-31]. (原始內容存檔於2024-03-27). 
  50. ^ How we use RocksDB at Rockset. rockset.com. [2019-07-10]. (原始內容存檔於2019-07-09) (英語). 
  51. ^ ideawu/ssdb-rocks. GitHub. 21 August 2021 [2024-01-31]. (原始內容存檔於2018-06-11). 
  52. ^ 存档副本. [2024-01-31]. (原始內容存檔於2018-01-05). 
  53. ^ pingcap/tidb. GitHub. 4 November 2021 [2024-01-31]. (原始內容存檔於2020-02-21). 
  54. ^ TiDB Internal (I) - Data Storage. Shen Li. 11 July 2017 [2024-01-31]. (原始內容存檔於2022-05-19). 
  55. ^ How We Built a High Performance Document Store on RocksDB?. 20 February 2019 [2024-01-31]. (原始內容存檔於2022-07-29). 
  56. ^ warrenfalk/rocksdb-sharp. GitHub. 28 September 2021 [2024-01-31]. (原始內容存檔於2018-06-11). 
  57. ^ chicken-rocksdb. [2024-01-31]. (原始內容存檔於2024-02-05). 
  58. ^ b1naryth1ef/rocksdb. GitHub. 22 October 2019 [2024-01-31]. (原始內容存檔於2018-06-13). 
  59. ^ urbint/rox. GitHub. September 2021 [2024-01-31]. (原始內容存檔於2018-06-13). 
  60. ^ leo-project/erocksdb. GitHub. September 2021 [2024-01-31]. (原始內容存檔於2018-06-11). 
  61. ^ barrel-db/erlang-rocksdb. [2024-01-31]. (原始內容存檔於2020-02-24). 
  62. ^ tecbot/gorocksdb. GitHub. 29 October 2021 [2024-01-31]. (原始內容存檔於2018-06-11). 
  63. ^ rocksdb-haskell: Haskell bindings to RocksDB. [2024-01-31]. (原始內容存檔於2020-02-24). 
  64. ^ RocksJava. GitHub. [2024-01-31]. (原始內容存檔於2014-07-01). 
  65. ^ rocksdb. 25 March 2022. 
  66. ^ rocksdb. GitHub. [2024-01-31]. (原始內容存檔於2023-05-28). 
  67. ^ iabudiab/ObjectiveRocks. GitHub. 2 August 2021 [2024-01-31]. (原始內容存檔於2018-06-11). 
  68. ^ OCaml bindings for RocksDB. GitHub. 8 October 2021 [2024-01-31]. (原始內容存檔於2020-02-29). 
  69. ^ An OCaml RocksDb binding using ocaml-ctypes. GitHub. 28 September 2020 [2024-01-31]. (原始內容存檔於2018-06-11). 
  70. ^ RocksDB - Perl extension for RocksDB - metacpan.org. [2024-01-31]. (原始內容存檔於2020-02-24). 
  71. ^ Photonios/rocksdb-php. GitHub. 11 August 2021 [2024-01-31]. (原始內容存檔於2018-06-11). 
  72. ^ SWI-Prolog interface for RocksDB. [2024-01-31]. (原始內容存檔於2018-06-04). 
  73. ^ stephan-hof/pyrocksdb. GitHub. 27 October 2021 [2024-01-31]. (原始內容存檔於2018-06-10). 
  74. ^ rocksdb-ruby - RubyGems.org - your community gem host. [2024-01-31]. (原始內容存檔於2020-02-24). 
  75. ^ spacejam/rust-rocksdb. GitHub. 2 November 2021 [2024-01-31]. (原始內容存檔於2018-06-11). 

外部連結

編輯