RocksDB
Developer(s) | |
---|---|
Initial release | May 2012 |
Stable release | 4.4 / February 18, 2016 |
Development status | production |
Written in | C++ |
Operating system | Linux, OS X, FreeBSD, Windows |
Type | Embedded database |
License | BSD 3-clause |
Website |
www |
RocksDB is an open source[1][2][3] high performance[4][5][6][7][8] embedded database for key-value data. RocksDB is a fork of LevelDB which has been optimized to take advantage of many CPU cores and make efficient use of fast storage, such as solid-state drives (SSD), for IO bound workloads. It is based on a Log-structured merge-tree (LSM) data structure. RocksDB is written in C++ and provides official application programming interface (API) language bindings for C++, C and Java, 3rd-party bindings also exist for Go[9] and Python.[10]
RocksDB is used in production systems at various web-scale enterprises [11] including Facebook, Yahoo![12] and LinkedIn.[13]
Features
RocksDB, like LevelDB, stores keys and values in arbitrary byte arrays, and data is sorted byte-wise by key or by providing a custom comparator.
RocksDB provides all of the features of LevelDB and in addition provides:
- Column Families[14]
- Bloom Filters[15]
- Transactions[16]
- TTL (Time to Live) Support[17]
- Universal Compaction[18]
- Merge Operators[19]
- Statistics Collection[20]
- Geo-spatial[21]
RocksDB is not a SQL database (although #MyRocks combines RocksDB with MySQL). Like other NoSQL and Dbm stores, it does not have a relational data model and it does not support SQL queries. Also, it has no direct support for secondary indexes, however a user may build their own internally using Column Families or externally. Applications use RocksDB as a library, as it does not provide a server or command-line interface.
History
RocksDB was started at Facebook by Dhruba Borthakur [22][23] in April 2012 as a fork of LevelDB with the initial stated goal of improving performance for server workloads.[24][25]
Integration
As an embeddable database, RocksDB can be used as a storage engine within a larger database management system (DBMS). For example, CockroachDB uses RocksDB as its storage engine.[26]
The following projects have been started to replace the storage engines of already-established database systems with RocksDB:
MongoDB
The MongoRocks project provides a storage module for MongoDB where the storage engine is RocksDB.[27][28]
Of related interest is Rocks Strata which is a tool written in Go which allows managing incremental backups of MongoDB when RocksDB is used as the storage engine.
MySQL
The MyRocks project creates a new RocksDB based storage engine for MySQL.[29]
References
- ↑ "Facebook’s latest open source effort: a flash-powered database called RocksDB". Retrieved March 10, 2016.
- ↑ "Under the Hood: Building and open-sourcing RocksDB". Retrieved March 10, 2016.
- ↑ "RocksDB - Facebook's Database Now Open Source". Retrieved March 10, 2016.
- ↑ "Performance Benchmarks". Retrieved November 29, 2015.
- ↑ "Benchmarking the leveldb family". Retrieved March 10, 2016.
- ↑ "Comparing LevelDB and RocksDB, take 2". Retrieved March 10, 2016.
- ↑ "Benchmarking LevelDB vs. RocksDB vs. HyperLevelDB vs. LMDB Performance for InfluxDB". Retrieved 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.
- ↑ "gorocksdb, a Go wrapper for RocksDB". Retrieved November 29, 2015.
- ↑ "pyrocksdb". Retrieved November 29, 2015.
- ↑ "Users.md". Retrieved December 1, 2015.
- ↑ "RocksDB on Steroids". Retrieved March 10, 2016.
- ↑ "Benchmarking Apache Samza: 1.2 million messages per second on a single node". Retrieved March 10, 2016.
- ↑ "Column families in RocksDB". GitHub. Retrieved 2016-04-04.
- ↑ "RocksDB bloom filters". GitHub. Retrieved 2016-04-04.
- ↑ "RocksDB transactions". GitHub. Retrieved 2016-04-04.
- ↑ "RocksDB TTL support". GitHub. Retrieved 2016-04-04.
- ↑ "Universal compaction". GitHub. Retrieved 2016-04-04.
- ↑ "RocksDB merge operator". GitHub. Retrieved 2016-04-04.
- ↑ "RocksDB perf context and IO stats context". GitHub. Retrieved 2016-04-04.
- ↑ "Spatial indexing in RocksDB « RocksDB". rocksdb.org. Retrieved 2016-04-04.
- ↑ "First commit where RocksDB diverges from LevelDB". May 10, 2012. Retrieved March 15, 2016.
- ↑ "rocksdb README file". Nov 30, 2012. Retrieved March 15, 2016.
- ↑ "The History of RocksDB". November 24, 2013. Retrieved March 10, 2016.
- ↑ Borthakur, Dhruba (November 22, 2013). "RocksDB: A High Performance Embedded Key-Value Store for Flash Storage - Data@Scale". Retrieved March 10, 2016.
... The story of why we decided to do RocksDB ...
- ↑ Edwards, Jessica (2015-10). "Hello World: Meet CockroachDB, the Resilient SQL Database". The New Stack. Retrieved 2016-03-26. Check date values in:
|date=
(help) - ↑ "Integrating RocksDB with MongoDB". Retrieved December 1, 2015.
- ↑ "MongoDB + RocksDB at Parse". Retrieved December 1, 2015.
- ↑ "MyRocks: MySQL on RocksDB" (PDF). Retrieved November 29, 2015.
External links
- Official website
- RocksDB Users mailing list
- Wiki of documentation
- Source Code repository
- Rocksdb.dev Facebook Group