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) 支持
  • 通用压实
  • 合并运算符
  • 统计收集
  • 地理空间索引

以及其他 [https://github.com/facebook/rocksdb/wiki/Features-Not-in-LevelDB 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
[https://github.com/oxigraph/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
用于运营数据分析的 [http://www.rockset.com Rockset] 服务采用 RocksDB 作为其存储引擎 。

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

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

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

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

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

参考
外部链接
*

评论 (0)

  • 还没有评论,来抢沙发吧。