Skip to content

Instantly share code, notes, and snippets.

@fyrz
Created November 17, 2014 12:06
Show Gist options
  • Save fyrz/62ad143bb79c1247dcc9 to your computer and use it in GitHub Desktop.
Save fyrz/62ad143bb79c1247dcc9 to your computer and use it in GitHub Desktop.
RocksDB - WriteBatchWithIndex BaseIterator example
// Copyright (c) 2013, Facebook, Inc. All rights reserved.
// This source code is licensed under the BSD-style license found in the
// LICENSE file in the root directory of this source tree. An additional grant
// of patent rights can be found in the PATENTS file in the same directory.
#include <cstdio>
#include <string>
#include <iostream>
#include "rocksdb/db.h"
#include "rocksdb/slice.h"
#include "rocksdb/options.h"
#include "rocksdb/utilities/write_batch_with_index.h"
using namespace rocksdb;
std::string kDBPath = "/tmp/rocksdb_simple_example";
int main() {
DB* db;
Options options;
// Optimize RocksDB. This is the easiest way to get RocksDB to perform well
options.IncreaseParallelism();
options.OptimizeLevelStyleCompaction();
// create the DB if it's not already present
options.create_if_missing = true;
// open DB
Status s = DB::Open(options, kDBPath, &db);
assert(s.ok());
// Put key-value
s = db->Put(WriteOptions(), "key", "value");
assert(s.ok());
s = db->Put(WriteOptions(), "key2", "value");
assert(s.ok());
std::string value;
// get value
s = db->Get(ReadOptions(), "key", &value);
assert(s.ok());
assert(value == "value");
ColumnFamilyHandle* handle = db->DefaultColumnFamily();
WriteBatchWithIndex* wbi = new WriteBatchWithIndex(BytewiseComparator(), 0, true);
wbi->Put("key", "valueV2");
Iterator* iter = db->NewIterator(ReadOptions());
Iterator* wbi_iter = wbi->NewIteratorWithBase(handle, iter);
wbi_iter->SeekToFirst();
std::cout << "Value for key: " << wbi_iter->key().ToString() << "\tis: " << wbi_iter->value().ToString() << std::endl;
wbi_iter->Next();
std::cout << "Value for key: " << wbi_iter->key().ToString() << "\tis: " << wbi_iter->value().ToString() << std::endl;
delete db;
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment