The rocksdb
library provides a persistent key value store. Keys
and values are arbitrary byte arrays. The keys are ordered within the key value
store according to a user-specified comparator function.
The library is maintained by the Facebook Database Engineering Team, and is based on leveldb, by Sanjay Ghemawat and Jeff Dean at Google.
This overview gives some simple examples of how RocksDB is used. For the story of why RocksDB was created in the first place, see Dhruba Borthakur's introductory talk from the Data @ Scale 2013 conference.
Opening A Database
A rocksdb
database has a name which corresponds to a file
system directory. All of the contents of database are stored in this directory.
The following example shows how to open a database, creating it if necessary:
#include <assert> #include "rocksdb/db.h" rocksdb::DB* db; rocksdb::Options options; options.create_if_missing = true; rocksdb::Status status = rocksdb::DB::Open(options, "/tmp/testdb", &db); assert(status.ok()); ...
If you want to raise an error if the database already exists, add the following
line before the rocksdb::DB::Open
call:
options.error_if_exists = true;
Status
You may have noticed the rocksdb::Status
type above. Values of this
type are returned by most functions in rocksdb
that may encounter
an error. You can check if such a result is ok, and also print an associated
error message:
rocksdb::Status s = ...; if (!s.ok()) cerr << s.ToString() << endl;
Closing A Database
When you are done with a database, just delete the database object. For example:
/* open the db as described above */ /* do something with db */ delete db;
Reads And Writes
The database provides Put
, Delete
, and
Get
methods to modify/query the database. For example, the
following code moves the value stored under key1
to
key2
.
std::string value; rocksdb::Status s = db->Get(rocksdb::ReadOptions(), key1, &value); if (s.ok()) s = db->Put(rocksdb::WriteOptions(), key2, value); if (s.ok()) s = db->Delete(rocksdb::WriteOptions(), key1);
Further documentation
These are just simple examples of how RocksDB is used. The full documentation is
available within the
/doc
folder of the project.
In addition, further details about the RocksDB implementation may be found in the following documents: