RocksDB

出典: フリー百科事典『ウィキペディア(Wikipedia)』

出典: フリー百科事典『ウィキペディア(Wikipedia)』
RocksDB
Rocksdb-icon.svg
開発元 Facebook
初版 2012年5月(7年前) (2012-05
最新版 6.0.2 / 2019年4月23日(8か月前) (2019-04-23
リポジトリ github.com/facebook/rocksdb
プログラミング言語 C++
対応OS WindowsmacOSLinuxFreeBSD
サポート状況 プロダクション
種別 組み込みデータベース
ライセンス Apache 2.0またはGPL 2
公式サイト rocksdb.org
テンプレートを表示

RocksDBは、高性能の[1][2][3][4][5]key-valueのデータを格納する組み込みデータベース英語版である。LevelDB英語版のフォークであり、多数のCPUコアを活用して、入出力(I/O)バウンドなワークロードに対して、ソリッドステートドライブ(SSD)のような高速なストレージを効率よく使用するように最適化されている。log-structured merge-tree英語版(LSMツリー)と呼ばれるデータ構造に基づいている。コードはC++で書かれており、C++、CJavaのための公式のアプリケーションプログラミングインターフェイス(API)バインディングの他、多数のサードパーティの言語バインディングも提供されている。RocksDBはオープンソースソフトウェアであり、当初はBSD 3-clauseライセンスのもとでリリースされていた[6][7][8]が、2017年7月、Apache 2.0とGPLv2ライセンスのデュアルライセンスに移行した[9]。これは、Apache Software Foundationが、以前のBSD+Patentsライセンス条項をブラックリストに加えたことに応じたものと考えられている[10][11]

RocksDBは、ウェブスケールの様々なエンタープライズのプロダクションシステムで使用されている[12]。使用している企業としては、FacebookYahoo![13]LinkedIn[14]などがある。

機能[編集]

RocksDBは、LevelDBと同様に、任意のデータ型のキーとバリューを格納する。格納されたデータは、キーまたはカスタムのコンパレータ関数によって、バイト単位でソートされる。

RocksDBは、LevelDBのすべての機能に加えて、以下の追加機能を提供する。

さらにその他の機能については、こちらを参照すること。List of RocksDB features that are not in LevelDB

RocksDBはSQLデータベースではない(ただし、MyRocks英語版というRocksDBでMySQLの機能を使用できるようにする実装もある)。他のNoSQLDbmストアと同様、関係データモデルは持たず、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]

Cassandra[編集]

組み込み[編集]

以下のデータベースシステムやアプリケーションは、RocksDBを組み込みのストレージとして使用することを選択している。

ArangoDB[編集]

ArangoDB英語版は、以前使用していたストレージエンジン("mmfiles")をRocksDBで置換した[37]

CephのBlueStore[編集]

CephのBlueStoreストレージのレイヤーでは、OSDデバイス上のメタデータ管理のためにRocksDBを使用している[38]

LogDevice LogsDB[編集]

LogDeviceのLogsDBは、RocksDBの上に構築されている[39]

Faktory[編集]

バックグラウンドジョブシステムのFacktory[40]は、RocksDBをストレージとして使用している[41]

SSDB[編集]

ssdb-rocks[42]プロジェクトでは、SSDB[43] NoSQLデータベースのためのストレージエンジンとしてRocksDBを使用している。

TiDB[編集]

TiDB[44]プロジェクトでは、RocksDBをストレージエンジンとして使用している[45]

サードパーティの言語バインディング[編集]

以下の言語では、RocksDBのサードパーティ製のプログラミング言語バインディングが使用できる。

参考文献[編集]

  1. ^ Performance Benchmarks”. 2015年11月29日閲覧。
  2. ^ Benchmarking the leveldb family”. 2016年3月10日閲覧。
  3. ^ Comparing LevelDB and RocksDB, take 2”. 2016年3月10日閲覧。
  4. ^ Benchmarking LevelDB vs. RocksDB vs. HyperLevelDB vs. LMDB Performance for InfluxDB”. 2016年3月10日閲覧。
  5. ^ 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. 
  6. ^ Facebook’s latest open source effort: a flash-powered database called RocksDB”. 2016年3月10日閲覧。
  7. ^ Under the Hood: Building and open-sourcing RocksDB”. 2016年3月10日閲覧。
  8. ^ RocksDB - Facebook's Database Now Open Source”. 2016年3月10日閲覧。
  9. ^ GitHub pull request”. 2017年7月20日閲覧。
  10. ^ Apache says 'no' to Facebook code libraries”. 2017年7月20日閲覧。
  11. ^ GitHub issue”. 2017年7月20日閲覧。
  12. ^ Users.md”. 2015年12月1日閲覧。
  13. ^ RocksDB on Steroids”. 2016年3月10日閲覧。
  14. ^ Benchmarking Apache Samza: 1.2 million messages per second on a single node”. 2016年3月10日閲覧。
  15. ^ RocksDB transactions”. GitHub. 2016年4月4日閲覧。
  16. ^ How to backup RocksDB?”. 2017年7月19日閲覧。
  17. ^ Checkpoints”. 2017年7月19日閲覧。
  18. ^ Column families in RocksDB”. GitHub. 2016年4月4日閲覧。
  19. ^ RocksDB bloom filters”. GitHub. 2016年4月4日閲覧。
  20. ^ RocksDB TTL support”. GitHub. 2016年4月4日閲覧。
  21. ^ Universal compaction”. GitHub. 2016年4月4日閲覧。
  22. ^ RocksDB merge operator”. GitHub. 2016年4月4日閲覧。
  23. ^ RocksDB perf context and IO stats context”. GitHub. 2016年4月4日閲覧。
  24. ^ Spatial indexing in RocksDB”. rocksdb.org. 2018年7月19日閲覧。
  25. ^ First commit where RocksDB diverges from LevelDB” (2012年5月10日). 2016年3月15日閲覧。
  26. ^ rocksdb README file” (2012年11月30日). 2016年3月15日閲覧。
  27. ^ The History of RocksDB” (2013年11月24日). 2016年3月10日閲覧。
  28. ^ 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 ...”
  29. ^ 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日閲覧。 
  30. ^ mongodb-partners/mongo-rocks”. 2018年8月28日閲覧。
  31. ^ Integrating RocksDB with MongoDB”. 2018年7月19日閲覧。
  32. ^ MongoDB + RocksDB at Parse”. 2015年12月1日閲覧。
  33. ^ facebookgo/rocks-strata”. 2018年8月28日閲覧。
  34. ^ facebook/mysql-5.6”. 2018年8月28日閲覧。
  35. ^ MyRocks: MySQL on RocksDB”. 2015年11月29日閲覧。
  36. ^ MyRocks Deep Dive”. 2016年5月9日閲覧。
  37. ^ Comparing new RocksDB and MMFiles storage engines”. 2018年8月2日閲覧。
  38. ^ Storage Devices -- Ceph Documentation”. 2018年8月2日閲覧。
  39. ^ LogDevice: a distributed data store for logs”. Mark Marchukov, Facebook. 2018年8月2日閲覧。
  40. ^ contribsys/faktory”. 2018年8月2日閲覧。
  41. ^ Introducing Faktory”. Mike Perham. 2018年8月2日閲覧。
  42. ^ ideawu/ssdb-rocks”. 2018年8月2日閲覧。
  43. ^ https://ssdb.io
  44. ^ ideawu/ssdb-rocks”. 2018年8月2日閲覧。
  45. ^ https://pingcap.github.io/blog/2017/07/11/tidbinternal1/#rocksdb
  46. ^ warrenfalk/rocksdb-sharp”. 2018年8月2日閲覧。
  47. ^ b1naryth1ef/rocksdb”. 2018年8月2日閲覧。
  48. ^ urbint/rox”. 2018年8月2日閲覧。
  49. ^ leo-project/erocksdb”. 2018年8月2日閲覧。
  50. ^ barrel-db/erlang-rocksdb”. 2018年8月2日閲覧。
  51. ^ tecbot/gorocksdb”. 2018年8月2日閲覧。
  52. ^ rocksdb-haskell: Haskell bindings to RocksDB”. 2018年8月2日閲覧。
  53. ^ RocksJava”. 2018年8月2日閲覧。
  54. ^ rocksdb”. 2018年8月2日閲覧。
  55. ^ iabudiab/ObjectiveRocks”. 2018年8月2日閲覧。
  56. ^ RocksDB - Perl extension for RocksDB - metacpan.org”. 2018年8月2日閲覧。
  57. ^ Photonios/rocksdb-php”. 2018年8月2日閲覧。
  58. ^ stephan-hof/pyrocksdb”. 2018年8月2日閲覧。
  59. ^ rocksdb-ruby - RubyGems.org - your community gem host”. 2018年8月2日閲覧。
  60. ^ spacejam/rust-rocksdb”. 2018年8月2日閲覧。