rust-rocksdb

running

Install RocksDB. rust-rocksdb has been tested with version 3.8.1 on linux and OSX.

Cargo.toml

rust [dependencies] rocksdb = "~0.0.3"

Code

```rust extern crate rocksdb; use rocksdb::RocksDB;

fn main() { let db = RocksDB::opendefault("/path/for/rocksdb/storage").unwrap(); db.put(b"my key", b"my value"); db.get(b"my key") .map( |value| { println!("retrieved value {}", value.toutf8().unwrap()) }) .onabsent( || { println!("value not found") }) .onerror( |e| { println!("operational problem encountered: {}", e) });

db.delete(b"my key");
db.close();

} ```

Rustic Merge Operator

```rust extern crate rocksdb; use rocksdb::{RocksDBOptions, RocksDB, MergeOperands};

fn concatmerge(newkey: &[u8], existingval: Option<&[u8]>, mut operands: &mut MergeOperands) -> Vec { let mut result: Vec = Vec::withcapacity(operands.sizehint().val0()); match existingval { Some(v) => result.pushall(v), None => (), } for op in operands { result.pushall(op); } result }

fn main() { let path = "/path/to/rocksdb"; let opts = RocksDBOptions::new(); opts.createifmissing(true); opts.addmergeoperator("test operator", concatmerge); let db = RocksDB::open(opts, path).unwrap(); let p = db.put(b"k1", b"a"); db.merge(b"k1", b"b"); db.merge(b"k1", b"c"); db.merge(b"k1", b"d"); db.merge(b"k1", b"efg"); let r = db.get(b"k1"); assert!(r.unwrap().toutf8().unwrap() == "abcdefg"); db.close(); } ```

Apply Some Tunings

Please read the official tuning guide, and most importantly, measure performance under realistic workloads with realistic hardware. ```rust use rocksdb::{RocksDBOptions, RocksDB, newbloomfilter}; use rocksdb::RocksDBCompactionStyle::RocksDBUniversalCompaction;

fn tunedforsomebodyelsesdisk() -> RocksDB { let path = "rustrocksdboptimizetest"; let opts = RocksDBOptions::new(); opts.createifmissing(true); opts.setblocksize(524288); opts.setmaxopenfiles(10000); opts.setusefsync(false); opts.setbytespersync(8388608); opts.setdisabledatasync(false); opts.setblockcachesizemb(1024); opts.settablecachenumshardbits(6); opts.setmaxwritebuffernumber(32); opts.setwritebuffersize(536870912); opts.settargetfilesizebase(1073741824); opts.setminwritebuffernumbertomerge(4); opts.setlevelzerostopwritestrigger(2000); opts.setlevelzeroslowdownwritestrigger(0); opts.setcompactionstyle(RocksDBUniversalCompaction); opts.setmaxbackgroundcompactions(4); opts.setmaxbackgroundflushes(4); opts.setfilterdeletes(false); opts.setdisableauto_compactions(true);

let filter = new_bloom_filter(10);
opts.set_filter(filter);

RocksDB::open(opts, path).unwrap()

} ```

status

Feedback and pull requests welcome!