// Copyright (c) 2011-present, Facebook, Inc. All rights reserved. // This source code is licensed under both the GPLv2 (found in the // COPYING file in the root directory) and Apache 2.0 License // (found in the LICENSE.Apache file in the root directory). #include <cstdio> #include <string> #include <vector> #include "rocksdb/db.h" #include "rocksdb/slice.h" #include "rocksdb/options.h" using namespace rocksdb; std::string kDBPath = "/tmp/rocksdb_column_families_example"; int main() { // open DB Options options; options.create_if_missing = true; DB* db; Status s = DB::Open(options, kDBPath, &db); assert(s.ok()); // create column family ColumnFamilyHandle* cf; s = db->CreateColumnFamily(ColumnFamilyOptions(), "new_cf", &cf); assert(s.ok()); // close DB delete cf; delete db; // open DB with two column families std::vector<ColumnFamilyDescriptor> column_families; // have to open default column family column_families.push_back(ColumnFamilyDescriptor( kDefaultColumnFamilyName, ColumnFamilyOptions())); // open the new one, too column_families.push_back(ColumnFamilyDescriptor( "new_cf", ColumnFamilyOptions())); std::vector<ColumnFamilyHandle*> handles; s = DB::Open(DBOptions(), kDBPath, column_families, &handles, &db); assert(s.ok()); // put and get from non-default column family s = db->Put(WriteOptions(), handles[1], Slice("key"), Slice("value")); assert(s.ok()); std::string value; s = db->Get(ReadOptions(), handles[1], Slice("key"), &value); assert(s.ok()); // atomic write WriteBatch batch; batch.Put(handles[0], Slice("key2"), Slice("value2")); batch.Put(handles[1], Slice("key3"), Slice("value3")); batch.Delete(handles[0], Slice("key")); s = db->Write(WriteOptions(), &batch); assert(s.ok()); // drop column family s = db->DropColumnFamily(handles[1]); assert(s.ok()); // close db for (auto handle : handles) { delete handle; } delete db; return 0; }