RocksDB
200px | |
Developer(s) | |
---|---|
Initial release | May 2012 |
Stable release | 4.5.1 / April 26, 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] In depth details about MyRocks were presented at Percona Live 2016.[30]
References
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.