RocksDB
RocksDBは、高性能の[1][2][3][4][5]key-valueのデータを格納する組み込みデータベースである。LevelDBのフォークであり、多数のCPUコアを活用して、入出力(I/O)バウンドなワークロードに対して、ソリッドステートドライブ(SSD)のような高速なストレージを効率よく使用するように最適化されている。log-structured merge-tree(LSMツリー)と呼ばれるデータ構造に基づいている。コードはC++で書かれており、C++、C、Javaのための公式のアプリケーションプログラミングインターフェイス(API)バインディングの他、多数のサードパーティの言語バインディングも提供されている。RocksDBはオープンソースソフトウェアであり、当初はBSD 3-clauseライセンスのもとでリリースされていた[6][7][8]が、2017年7月、Apache 2.0とGPLv2ライセンスのデュアルライセンスに移行した[9]。これは、Apache Software Foundationが、以前のBSD+Patentsライセンス条項をブラックリストに加えたことに応じたものと考えられている[10][11]。
|
| |
| 開発元 | |
|---|---|
| 初版 | 2012年5月 |
| 最新版 |
6.0.2
/ 2019年4月23日 |
| リポジトリ | |
| プログラミング 言語 | C++ |
| 対応OS | Windows、macOS、Linux、FreeBSD |
| サポート状況 | プロダクション |
| 種別 | 組み込みデータベース |
| ライセンス | Apache 2.0またはGPL 2 |
| 公式サイト |
rocksdb |
RocksDBは、ウェブスケールの様々なエンタープライズのプロダクションシステムで使用されている[12]。使用している企業としては、Facebook、Yahoo![13]、LinkedIn[14]などがある。
機能
RocksDBは、LevelDBと同様に、任意のデータ型のキーとバリューを格納する。格納されたデータは、キーまたはカスタムのコンパレータ関数によって、バイト単位でソートされる。
RocksDBは、LevelDBのすべての機能に加えて、以下の追加機能を提供する。
- トランザクション[15]
- バックアップ[16]とスナップショット[17]
- Column families[18]
- ブルームフィルタ[19]
- Time to live(TTL)のサポート[20]
- Universal compaction[21]
- Merge operators[22]
- Statistics collection[23]
- Geospatial indexing[24]
さらにその他の機能については、こちらを参照すること。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のフォークとして開発した[25][26]。 初期段階の目標は、サーバーのワークロードのための性能向上だった[27][28]。
インテグレーション
組み込み可能なデータベースであるため、RocksDBは、より大きなデータベース管理システム(DBMS)の内部でストレージエンジンとして使用することができる。たとえば、CockroachDBはRocksDBをストレージエンジンとして使用している[29]。
代替バックエンド
以下のプロジェクトでは、すでに確立しているデータベースシステムをRocksDBで置換したり、代替ストレージエンジンを提供したりしています。
MongoDB
MongoRocksプロジェクトでは、MongoDBのストレージエンジンとしてRocksDBを使用するためのストレージモジュールを開発している[30][31][32]。
関連するプログラムとして、Goで書かれたツールであるRocks Strataがある。これを利用すると、RocksDBをストレージエンジンとして使用しているときにMongoDBの増分パックアップが管理できるようになる[33]。
MySQL
MyRocksプロジェクトでは、MySQLのための新しいRocksDBベースのストレージエンジンを開発している[34][35]。MyRocksの詳細については、Percona Live 2016でプレゼンテーションされた[36]。
組み込み
以下のデータベースシステムやアプリケーションは、RocksDBを組み込みのストレージとして使用することを選択している。
ArangoDB
ArangoDBは、以前使用していたストレージエンジン("mmfiles")をRocksDBで置換した[37]。
LogDevice LogsDB
LogDeviceのLogsDBは、RocksDBの上に構築されている[39]。
サードパーティの言語バインディング
以下の言語では、RocksDBのサードパーティ製のプログラミング言語バインディングが使用できる。
参考文献
- “Performance Benchmarks”. 2015年11月29日閲覧。
- “Benchmarking the leveldb family”. 2016年3月10日閲覧。
- “Comparing LevelDB and RocksDB, take 2”. 2016年3月10日閲覧。
- “Benchmarking LevelDB vs. RocksDB vs. HyperLevelDB vs. LMDB Performance for InfluxDB”. 2016年3月10日閲覧。
- 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”. 2016年3月10日閲覧。
- “Under the Hood: Building and open-sourcing RocksDB”. 2016年3月10日閲覧。
- “RocksDB - Facebook's Database Now Open Source”. 2016年3月10日閲覧。
- “GitHub pull request”. 2017年7月20日閲覧。
- “Apache says 'no' to Facebook code libraries”. 2017年7月20日閲覧。
- “GitHub issue”. 2017年7月20日閲覧。
- “Users.md”. 2015年12月1日閲覧。
- “RocksDB on Steroids”. 2016年3月10日閲覧。
- “Benchmarking Apache Samza: 1.2 million messages per second on a single node”. 2016年3月10日閲覧。
- “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” (2012年5月10日). 2016年3月15日閲覧。
- “rocksdb README file” (2012年11月30日). 2016年3月15日閲覧。
- “The History of RocksDB” (2013年11月24日). 2016年3月10日閲覧。
- Borthakur, Dhruba (2013年11月22日). “RocksDB: A High Performance Embedded Key-Value Store for Flash Storage - Data@Scale”. 2016年3月10日閲覧。 “... 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 2016年7月8日閲覧。
- “mongodb-partners/mongo-rocks”. 2018年8月28日閲覧。
- “Integrating RocksDB with MongoDB”. 2018年7月19日閲覧。
- “MongoDB + RocksDB at Parse”. 2015年12月1日閲覧。
- “facebookgo/rocks-strata”. 2018年8月28日閲覧。
- “facebook/mysql-5.6”. 2018年8月28日閲覧。
- “MyRocks: MySQL on RocksDB”. 2015年11月29日閲覧。
- “MyRocks Deep Dive”. 2016年5月9日閲覧。
- “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日閲覧。