RocksDB

维基百科,自由的百科全书
跳转到导航 跳转到搜索
RocksDB
File:Rocksdb-icon.svg
原作者Dhruba Borthakur
开发者Meta Platforms (was Facebook, Inc.)
首次发布2012年5月,​14年前​(2012-05
当前版本
    Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
    源代码库
    • {{URL|example.com|可选的显示文本}}
    Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
    编程语言C++
    引擎
      Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
      操作系统Windows, macOS, Linux, FreeBSD, OpenBSD, Solaris, AIX
      平台Cross-platform
      类型Embedded database
      许可协议Apache 2.0 or GPL 2
      网站rocksdb.org

      RocksDB 是一个用于键值数据的高性能嵌入式数据库 [1] [2] [3] [4] [5]。它由 Google LevelDB 分支而来,针对输入/输出(I/O)性能受限的负载状况,对多核处理器(CPUs)进行了优化,可以有效利用高速存储,如固态驱动器(SSD)等。它采用结构化日志合并树(LSM 树)的数据结构,由 C++ 开发,并在官方提供 C++CJava语言绑定,并由众多其他第三方语言绑定所支持。 RocksDB 是免费的开源软件,最初发布于 BSD 3 条款许可下 [6] [7] [8]。2017 年 7 月,项目迁移到 Apache 2.0GPLv2 的双重许可下 [9]。在将先前的 BSD+Patents 许可条款列入黑名单之后,这一改变有助于它在 Apache 软件基金会的项目中得到采用 [10] [11]

      RocksDB 被广泛用于各大互联网企业 [12] 的生产环境,这些厂商包括 FacebookYahoo! [13]LinkedIn [14] 等。

      特性[编辑]

      RocksDB 与 LevelDB 一样,将键和值存储在任意字节数组中,并且数据按键或通过提供自定义比较器按字节排序。

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

      以及其他 RocksDB 包含但 LevelDB 中没有的功能页面存档备份,存于互联网档案馆)。

      RocksDB 并不是一种 SQL 数据库(尽管在 MyRocks 中结合了 RocksDB 与 MySQL)。类似于 NoSQLdbm 存储的实现,RocksDB 使用的不是关系数据模型,不支持 SQL 查询。另外,它也不提供对二级索引的直接支持,不过,用户可通过列族构建索引。在使用方面,应用程序需要以的形式调用 RocksDB,其本身并不提供服务器或命令行界面

      历史[编辑]

      2012 年 4 月,时任 Facebook 开发者的 Dhruba Borthakur 在 LevelDB 的基础上创建了一个新分支,自此开启了 RocksDB 项目[25] [26]。项目的初衷是提高服务器在高工作负载下的性能 [27] [28]

      集成[编辑]

      作为一个嵌入式数据库,RocksDB 可用作大型数据库管理系统(DBMS)中的存储引擎。例如,Rockset 使用 RocksDB [29] 用于分析数据处理。

      替代后端[编辑]

      以下项目已将现有数据库系统替换为 RocksDB,或把 RocksDB 作为备选存储引擎:

      ArangoDB[编辑]

      ArangoDB 已将 RocksDB 添加到存储引擎配置 “mmfiles” 中 [30]。自 ArangoDB 3.4 版本起,RocksDB 将成为默认存储引擎 [31]

      Cassandra[编辑]

      采用 RocksDB 可显著提高 Cassandra 的性能。一般情况下快 3-4 倍,个别用例中快至 100 倍。该项目由 Facebook 的 Instagram 团队开发,他们在开源代码的同时也发布了性能结果基准 [32]

      MariaDB[编辑]

      MariaDB 可将 MyRocks 用作存储引擎,后者为 RocksDB 的一个分支。该功能自 MariaDB 10.2.5(Alpha 版)[33] 起可用,于 2018 年的 MariaDB 10.2.16 版后稳定 [34]

      MongoDB[编辑]

      MongoRocks 项目为 MongoDB 提供了一个存储模块,其存储引擎为 RocksDB [35] [36] [37]

      Rocks Strata 项目与该项目有关。当把 RocksDB 用作存储引擎时,这个采用Go语言编写的工具可用于管理 MongoDB 的增量备份 [38]

      MySQL[编辑]

      以 RocksDB 为基础,MyRocks 项目为 MySQL 提供了一个新型存储引擎 [39] [40],并于 Percona Live 2016 展示了其详细信息 [41]

      Oxigraph[编辑]

      Oxigraph页面存档备份,存于互联网档案馆)是一个实现 SPARQL 标准的图数据库,它基于RocksDB。

      UKV 项目 [42] 允许用户使用 RocksDB 作为底层键值存储。它对创建、读取、更新和删除(CRUD) 这些不同存储引擎都会涉及的共有操作进行了抽象,并对多个高级语言(包括 PythonJavaGo)进行结构化绑定。

      嵌入式[编辑]

      以下数据库系统和应用程序选择使用 RocksDB 作为其嵌入式存储引擎:

      Ceph's BlueStore[编辑]

      Ceph's BlueStore 存储层采用 RocksDB 对 OSD 设备中的元数据进行管理 [43]

      Apache Flink[编辑]

      Apache Flink 采用 RocksDB 存储检查点 [44]

      FusionDB[编辑]

      FusionDB [45] 将 RocksDB 作为 XML、键值对和 JSON 的存储引擎 [46]

      LogDevice LogsDB[编辑]

      LogDevice 的 LogsDB 构建在 RocksDB 之上 [47]

      Manhattan[编辑]

      自 2018 年以来,Manhattan 分布式键值存储系统一直采用 RocksDB 作为存储 Twitter 数据的主要引擎 [48]

      Rockset[编辑]

      用于运营数据分析的 Rockset页面存档备份,存于互联网档案馆) 服务采用 RocksDB 作为其存储引擎 [49]

      SSDB[编辑]

      在 ssdb-rocks 项目 [50] 中, RocksDB 被用作 SSDB NoSQL 数据库的存储引擎 [51]

      TiDB[编辑]

      TiDB 项目 [52] 采用 RocksDB 作为其存储引擎 [53]

      YugabyteDB[编辑]

      YugabyteDB [54] 数据库采用 RocksDB 的修改版本作为其 DocDB 存储引擎的一部分。

      第三方语言绑定[编辑]

      可用于 RocksDB 的第三方编程语言绑定包括:  

      参考[编辑]

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

      外部链接[编辑]