rocksdb_backup_restore_example.cc 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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/utilities/backup_engine.h"
  11. using ROCKSDB_NAMESPACE::BackupEngine;
  12. using ROCKSDB_NAMESPACE::BackupEngineOptions;
  13. using ROCKSDB_NAMESPACE::BackupEngineReadOnly;
  14. using ROCKSDB_NAMESPACE::BackupInfo;
  15. using ROCKSDB_NAMESPACE::DB;
  16. using ROCKSDB_NAMESPACE::Env;
  17. using ROCKSDB_NAMESPACE::Options;
  18. using ROCKSDB_NAMESPACE::ReadOptions;
  19. using ROCKSDB_NAMESPACE::Status;
  20. using ROCKSDB_NAMESPACE::WriteOptions;
  21. #if defined(OS_WIN)
  22. std::string kDBPath = "C:\\Windows\\TEMP\\rocksdb_example";
  23. #else
  24. std::string kDBPath = "/tmp/rocksdb_example";
  25. #endif
  26. int main() {
  27. DB* db;
  28. Options options;
  29. // Optimize RocksDB. This is the easiest way to get RocksDB to perform well
  30. options.IncreaseParallelism();
  31. options.OptimizeLevelStyleCompaction();
  32. // create the DB if it's not already present
  33. options.create_if_missing = true;
  34. // open DB
  35. Status s = DB::Open(options, kDBPath, &db);
  36. assert(s.ok());
  37. // Put key-value
  38. db->Put(WriteOptions(), "key1", "value1");
  39. assert(s.ok());
  40. // create backup
  41. BackupEngine* backup_engine;
  42. s = BackupEngine::Open(Env::Default(),
  43. BackupEngineOptions("/tmp/rocksdb_example_backup"),
  44. &backup_engine);
  45. assert(s.ok());
  46. backup_engine->CreateNewBackup(db);
  47. assert(s.ok());
  48. std::vector<BackupInfo> backup_info;
  49. backup_engine->GetBackupInfo(&backup_info);
  50. s = backup_engine->VerifyBackup(1);
  51. assert(s.ok());
  52. // Put key-value
  53. db->Put(WriteOptions(), "key2", "value2");
  54. assert(s.ok());
  55. db->Close();
  56. delete db;
  57. db = nullptr;
  58. // restore db to backup 1
  59. BackupEngineReadOnly* backup_engine_ro;
  60. s = BackupEngineReadOnly::Open(
  61. Env::Default(), BackupEngineOptions("/tmp/rocksdb_example_backup"),
  62. &backup_engine_ro);
  63. assert(s.ok());
  64. s = backup_engine_ro->RestoreDBFromBackup(1, "/tmp/rocksdb_example",
  65. "/tmp/rocksdb_example");
  66. assert(s.ok());
  67. // open db again
  68. s = DB::Open(options, kDBPath, &db);
  69. assert(s.ok());
  70. std::string value;
  71. s = db->Get(ReadOptions(), "key1", &value);
  72. assert(!s.IsNotFound());
  73. s = db->Get(ReadOptions(), "key2", &value);
  74. assert(s.IsNotFound());
  75. delete backup_engine;
  76. delete backup_engine_ro;
  77. delete db;
  78. return 0;
  79. }