RocksDB

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

RocksDB 被广泛用于各大互联网企业  的生产环境，这些厂商包括 Facebook 、 Yahoo!  和 LinkedIn  等。

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

RocksDB 提供了 LevelDB 的所有功能，此外还包括：

 事务 
 备份  和快照 
 列族 
 布隆过滤器 
 生存时间 (TTL) 支持 
 通用压实 
 合并运算符 
 统计收集 
 地理空间索引 

以及其他  RocksDB 包含但 LevelDB 中没有的功能 。

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

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

 集成 
作为一个嵌入式数据库，RocksDB 可用作大型数据库管理系统（DBMS）中的存储引擎。例如，Rockset 使用 RocksDB  用于分析数据处理。

 替代后端 
以下项目已将现有数据库系统替换为 RocksDB，或把 RocksDB 作为备选存储引擎：

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

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

 MariaDB 
MariaDB 可将 MyRocks 用作存储引擎，后者为 RocksDB 的一个分支。该功能自 MariaDB 10.2.5（Alpha 版） 起可用，于 2018 年的 MariaDB 10.2.16 版后稳定 。

 MongoDB 
MongoRocks 项目为 MongoDB 提供了一个存储模块，其存储引擎为 RocksDB   。

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

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

 Oxigraph 
Oxigraph 是一个实现 SPARQL 标准的图数据库，它基于RocksDB。

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

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

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

 Apache Flink 
Apache Flink 采用 RocksDB 存储检查点 。

 FusionDB 
FusionDB  将 RocksDB 作为 XML、键值对和 JSON 的存储引擎 。

 LogDevice LogsDB 
LogDevice 的 LogsDB 构建在 RocksDB 之上 。

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

 Rockset 
用于运营数据分析的 Rockset  服务采用 RocksDB 作为其存储引擎 。

 SSDB 
在 ssdb-rocks 项目  中， RocksDB 被用作 SSDB NoSQL 数据库的存储引擎 。

 TiDB 
TiDB 项目  采用 RocksDB 作为其存储引擎 。

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

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


 C
 C#
 Chicken Scheme
 D
 Elixir
 Erlang
 Go
 Haskell
 Java
 Node.js
 Nim
 Objective-C, and Swift
 OCaml
 Perl
 PHP
 Prolog
 Python
 Ruby
 Rust

 参考 

 外部链接 


Category:键-值数据库
Category:Facebook軟體
Category:C++函式庫
Category:嵌入式資料庫
Category:数据库引擎
Category:NoSQL