RocksDB

RocksDBは、高性能のkey-valueのデータを格納する組み込みデータベース（英語版）である。LevelDB（英語版）のフォークであり、多数のCPUコアを活用して、入出力（I/O）バウンドなワークロードに対して、ソリッドステートドライブ（SSD）のような高速なストレージを効率よく使用するように最適化されている。log-structured merge-tree（英語版）（LSMツリー）と呼ばれるデータ構造に基づいている。コードはC++で書かれており、C++、C、Javaのための公式のアプリケーションプログラミングインターフェイス（API）バインディングの他、多数のサードパーティの言語バインディングも提供されている。RocksDBはオープンソースソフトウェアであり、当初はBSD 3-clauseライセンスのもとでリリースされていたが、2017年7月、Apache 2.0とGPLv2ライセンスのデュアルライセンスに移行した。これは、Apache Software Foundationが、以前のBSD+Patentsライセンス条項をブラックリストに加えたことに応じたものと考えられている。 RocksDBは、ウェブスケールの様々なエンタープライズのプロダクションシステムで使用されている。使用している企業としては、Facebook、Yahoo!、LinkedInなどがある。 RocksDBは、LevelDBと同様に、任意のデータ型のキーとバリューを格納する。格納されたデータは、キーまたはカスタムのコンパレータ関数によって、バイト単位でソートされる。 RocksDBは、LevelDBのすべての機能に加えて、以下の追加機能を提供する。 トランザクション バックアップとスナップショット Column families（英語版） ブルームフィルタ Time to live（TTL）のサポート Universal compaction Merge operators Statistics collection Geospatial indexing さらにその他の機能については、こちらを参照すること。List of RocksDB features that are not in LevelDB RocksDBはSQLデータベースではない（ただし、MyRocks（英語版）というRocksDBでMySQLの機能を使用できるようにする実装もある）。他のNoSQLやDbmストアと同様、関係データモデルは持たず、SQLクエリもサポートしない。セカンダリインデックスも直接はサポートしないが、ユーザがColumn Familiesを使用して内部的に構築したり、外部的に構築することは可能である。サーバーもコマンドラインインターフェイスも存在しないため、アプリケーションはRocksDBをライブラリとして使用する。 RocksDBは、2012年4月、FacebookでDhruba BorthakurがLevelDBのフォークとして開発した。 初期段階の目標は、サーバーのワークロードのための性能向上だった。 組み込み可能なデータベースであるため、RocksDBは、より大きなデータベース管理システム（DBMS）の内部でストレージエンジンとして使用することができる。たとえば、CockroachDB（英語版）はRocksDBをストレージエンジンとして使用している。 以下のプロジェクトでは、すでに確立しているデータベースシステムをRocksDBで置換したり、代替ストレージエンジンを提供したりしています。 MongoRocksプロジェクトでは、MongoDBのストレージエンジンとしてRocksDBを使用するためのストレージモジュールを開発している。 関連するプログラムとして、Goで書かれたツールであるRocks Strataがある。これを利用すると、RocksDBをストレージエンジンとして使用しているときにMongoDBの増分パックアップが管理できるようになる。 MyRocksプロジェクトでは、MySQLのための新しいRocksDBベースのストレージエンジンを開発している。MyRocksの詳細については、Percona Live 2016でプレゼンテーションされた。 以下のデータベースシステムやアプリケーションは、RocksDBを組み込みのストレージとして使用することを選択している。 ArangoDB（英語版）は、以前使用していたストレージエンジン（"mmfiles"）をRocksDBで置換した。 CephのBlueStoreストレージのレイヤーでは、OSDデバイス上のメタデータ管理のためにRocksDBを使用している。 LogDeviceのLogsDBは、RocksDBの上に構築されている。 バックグラウンドジョブシステムのFacktoryは、RocksDBをストレージとして使用している。 ssdb-rocksプロジェクトでは、SSDB NoSQLデータベースのためのストレージエンジンとしてRocksDBを使用している。 TiDBプロジェクトでは、RocksDBをストレージエンジンとして使用している。 以下の言語では、RocksDBのサードパーティ製のプログラミング言語バインディングが使用できる。 C# D Elixir Erlang Go Haskell Java Node.js Objective-C, and Swift Perl PHP Python Ruby Rust ^ “Performance Benchmarks”. November 29, 2015閲覧。 ^ “Benchmarking the leveldb family”. March 10, 2016閲覧。 ^ “Comparing LevelDB and RocksDB, take 2”. March 10, 2016閲覧。 ^ “Benchmarking LevelDB vs. RocksDB vs. HyperLevelDB vs. LMDB Performance for InfluxDB”. March 10, 2016閲覧。 ^ Golan-Gueta, Guy; Bortnikov, Edward; Hillel, Eschar; Keidar, Idit (April 21, 2015). “Scaling Concurrent Log-Structured Data Stores”. EuroSys '15 Proceedings of the Tenth European Conference on Computer Systems. doi:10.1145/2741948.2741973.  ^ “Facebook’s latest open source effort: a flash-powered database called RocksDB”. March 10, 2016閲覧。 ^ “Under the Hood: Building and open-sourcing RocksDB”. March 10, 2016閲覧。 ^ “RocksDB - Facebook's Database Now Open Source”. March 10, 2016閲覧。 ^ “GitHub pull request”. July 20, 2017閲覧。 ^ “Apache says 'no' to Facebook code libraries”. July 20, 2017閲覧。 ^ “GitHub issue”. July 20, 2017閲覧。 ^ “Users.md”. December 1, 2015閲覧。 ^ “RocksDB on Steroids”. March 10, 2016閲覧。 ^ “Benchmarking Apache Samza: 1.2 million messages per second on a single node”. March 10, 2016閲覧。 ^ “RocksDB transactions”. GitHub. 2016年4月4日閲覧。 ^ “How to backup RocksDB?”. 2017年7月19日閲覧。 ^ “Checkpoints”. 2017年7月19日閲覧。 ^ “Column families in RocksDB”. GitHub. 2016年4月4日閲覧。 ^ “RocksDB bloom filters”. GitHub. 2016年4月4日閲覧。 ^ “RocksDB TTL support”. GitHub. 2016年4月4日閲覧。 ^ “Universal compaction”. GitHub. 2016年4月4日閲覧。 ^ “RocksDB merge operator”. GitHub. 2016年4月4日閲覧。 ^ “RocksDB perf context and IO stats context”. GitHub. 2016年4月4日閲覧。 ^ “Spatial indexing in RocksDB”. rocksdb.org. 2018年7月19日閲覧。 ^ “First commit where RocksDB diverges from LevelDB” (May 10, 2012). March 15, 2016閲覧。 ^ “rocksdb README file” (Nov 30, 2012). March 15, 2016閲覧。 ^ “The History of RocksDB” (November 24, 2013). March 10, 2016閲覧。 ^ Borthakur, Dhruba (November 22, 2013). “RocksDB: A High Performance Embedded Key-Value Store for Flash Storage - Data@Scale”. March 10, 2016閲覧。 “... The story of why we decided to do RocksDB ...” ^ Edwards, Jessica (2015年10月29日). “Hello World: Meet CockroachDB, the Resilient SQL Database”. The New Stack. http://thenewstack.io/cockroachdb-unkillable-distributed-sql-database/ 2016年7月8日閲覧。  ^ “mongodb-partners/mongo-rocks”. 2018年8月28日閲覧。 ^ “Integrating RocksDB with MongoDB”. July 19, 2018閲覧。 ^ “MongoDB + RocksDB at Parse”. December 1, 2015閲覧。 ^ “facebookgo/rocks-strata”. 2018年8月28日閲覧。 ^ “facebook/mysql-5.6”. 2018年8月28日閲覧。 ^ “MyRocks: MySQL on RocksDB”. November 29, 2015閲覧。 ^ “MyRocks Deep Dive”. May 9, 2016閲覧。 ^ “Comparing new RocksDB and MMFiles storage engines”. 2018年8月2日閲覧。 ^ “Storage Devices -- Ceph Documentation”. 2018年8月2日閲覧。 ^ “LogDevice: a distributed data store for logs”. Mark Marchukov, Facebook. 2018年8月2日閲覧。 ^ “contribsys/faktory”. 2018年8月2日閲覧。 ^ “Introducing Faktory”. Mike Perham. 2018年8月2日閲覧。 ^ “ideawu/ssdb-rocks”. 2018年8月2日閲覧。 ^ https://ssdb.io ^ “ideawu/ssdb-rocks”. 2018年8月2日閲覧。 ^ https://pingcap.github.io/blog/2017/07/11/tidbinternal1/#rocksdb ^ “warrenfalk/rocksdb-sharp”. 2018年8月2日閲覧。 ^ “b1naryth1ef/rocksdb”. 2018年8月2日閲覧。 ^ “urbint/rox”. 2018年8月2日閲覧。 ^ “leo-project/erocksdb”. 2018年8月2日閲覧。 ^ “barrel-db/erlang-rocksdb”. 2018年8月2日閲覧。 ^ “tecbot/gorocksdb”. 2018年8月2日閲覧。 ^ “rocksdb-haskell: Haskell bindings to RocksDB”. 2018年8月2日閲覧。 ^ “RocksJava”. 2018年8月2日閲覧。 ^ “rocksdb”. 2018年8月2日閲覧。 ^ “iabudiab/ObjectiveRocks”. 2018年8月2日閲覧。 ^ “RocksDB - Perl extension for RocksDB - metacpan.org”. 2018年8月2日閲覧。 ^ “Photonios/rocksdb-php”. 2018年8月2日閲覧。 ^ “stephan-hof/pyrocksdb”. 2018年8月2日閲覧。 ^ “rocksdb-ruby - RubyGems.org - your community gem host”. 2018年8月2日閲覧。 ^ “spacejam/rust-rocksdb”. 2018年8月2日閲覧。 公式ウェブサイト RocksDB Users mailing list Wiki of documentation Source Code repository Rocksdb.dev Facebook Group