column_families_example.cc 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
  2. // This source code is licensed under both the GPLv2 (found in the
  3. // COPYING file in the root directory) and Apache 2.0 License
  4. // (found in the LICENSE.Apache file in the root directory).
  5. #include <cstdio>
  6. #include <string>
  7. #include <vector>
  8. #include "rocksdb/db.h"
  9. #include "rocksdb/options.h"
  10. #include "rocksdb/slice.h"
  11. #if defined(OS_WIN)
  12. std::string kDBPath = "C:\\Windows\\TEMP\\rocksdb_column_families_example";
  13. #else
  14. std::string kDBPath = "/tmp/rocksdb_column_families_example";
  15. #endif
  16. using ROCKSDB_NAMESPACE::ColumnFamilyDescriptor;
  17. using ROCKSDB_NAMESPACE::ColumnFamilyHandle;
  18. using ROCKSDB_NAMESPACE::ColumnFamilyOptions;
  19. using ROCKSDB_NAMESPACE::DB;
  20. using ROCKSDB_NAMESPACE::DBOptions;
  21. using ROCKSDB_NAMESPACE::Options;
  22. using ROCKSDB_NAMESPACE::ReadOptions;
  23. using ROCKSDB_NAMESPACE::Slice;
  24. using ROCKSDB_NAMESPACE::Status;
  25. using ROCKSDB_NAMESPACE::WriteBatch;
  26. using ROCKSDB_NAMESPACE::WriteOptions;
  27. int main() {
  28. // open DB
  29. Options options;
  30. options.create_if_missing = true;
  31. DB* db;
  32. Status s = DB::Open(options, kDBPath, &db);
  33. assert(s.ok());
  34. // create column family
  35. ColumnFamilyHandle* cf;
  36. s = db->CreateColumnFamily(ColumnFamilyOptions(), "new_cf", &cf);
  37. assert(s.ok());
  38. // close DB
  39. s = db->DestroyColumnFamilyHandle(cf);
  40. assert(s.ok());
  41. delete db;
  42. // open DB with two column families
  43. std::vector<ColumnFamilyDescriptor> column_families;
  44. // have to open default column family
  45. column_families.push_back(ColumnFamilyDescriptor(
  46. ROCKSDB_NAMESPACE::kDefaultColumnFamilyName, ColumnFamilyOptions()));
  47. // open the new one, too
  48. column_families.push_back(
  49. ColumnFamilyDescriptor("new_cf", ColumnFamilyOptions()));
  50. std::vector<ColumnFamilyHandle*> handles;
  51. s = DB::Open(DBOptions(), kDBPath, column_families, &handles, &db);
  52. assert(s.ok());
  53. // put and get from non-default column family
  54. s = db->Put(WriteOptions(), handles[1], Slice("key"), Slice("value"));
  55. assert(s.ok());
  56. std::string value;
  57. s = db->Get(ReadOptions(), handles[1], Slice("key"), &value);
  58. assert(s.ok());
  59. // atomic write
  60. WriteBatch batch;
  61. batch.Put(handles[0], Slice("key2"), Slice("value2"));
  62. batch.Put(handles[1], Slice("key3"), Slice("value3"));
  63. batch.Delete(handles[0], Slice("key"));
  64. s = db->Write(WriteOptions(), &batch);
  65. assert(s.ok());
  66. // drop column family
  67. s = db->DropColumnFamily(handles[1]);
  68. assert(s.ok());
  69. // close db
  70. for (auto handle : handles) {
  71. s = db->DestroyColumnFamilyHandle(handle);
  72. assert(s.ok());
  73. }
  74. delete db;
  75. return 0;
  76. }