Newer
Older
using namespace std;
bool init_rocksdb() {
rocksdb::DB* db;
ADAFS_DATA->rdb_path(ADAFS_DATA->rootdir() + "/meta/rocksdb"s);
rocksdb::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;
#if defined(KV_OPTIMIZE)
#endif
// Disable Write-Ahead Logging if configured
rocksdb::WriteOptions write_options{};
#if !defined(KV_WOL)
write_options.disableWAL = true;
#endif
ADAFS_DATA->rdb_write_options(write_options);
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
ADAFS_DATA->rdb_options(options);
// rocksdb::OptimisticTransactionDB* txn_db;
// rocksdb::OptimisticTransactionOptions txn_options{};
// ADAFS_DATA->txn_rdb_options(txn_options);
ADAFS_DATA->spdlogger()->info("RocksDB options set. About to connect...");
// open DB
// auto s = rocksdb::OptimisticTransactionDB::Open(ADAFS_DATA->rdb_options(), ADAFS_DATA->rdb_path(), &txn_db);
auto s = rocksdb::DB::Open(ADAFS_DATA->rdb_options(), ADAFS_DATA->rdb_path(), &db);
if (s.ok()) {
// db = txn_db->GetBaseDB(); // db connection for db operations without transactions
shared_ptr<rocksdb::DB> s_db(db);
ADAFS_DATA->rdb(s_db);
// shared_ptr<rocksdb::OptimisticTransactionDB> s_txn_db(txn_db);
// ADAFS_DATA->txn_rdb(s_txn_db);
ADAFS_DATA->spdlogger()->info("RocksDB connection established.");
return true;
} else {
ADAFS_DATA->spdlogger()->info("[ERROR] RocksDB connection FAILURE. Exiting...");
return false;
}
}
void optimize_rocksdb(rocksdb::Options& options) {
// rocksdb::BlockBasedTableOptions block_options{};
// block_options.block_size = 16384 * 2;
// options.table_factory.reset(rocksdb::NewBlockBasedTableFactory(block_options));
// experimental settings
// options.write_buffer_size = 512;
// options.max_write_buffer_number = 16;
// options.min_write_buffer_number_to_merge = 4;
// These 4 below have the most impact
options.max_bytes_for_level_base = 2048;
options.max_bytes_for_level_multiplier = 10;
options.target_file_size_base = 256;
options.target_file_size_multiplier = 1;
//
options.max_background_flushes = 1;
options.max_background_compactions = 48;
options.level0_file_num_compaction_trigger = 1;
options.level0_slowdown_writes_trigger = 48;
options.level0_stop_writes_trigger = 56;
// options.arena_block_size = 1024 * 8;
// options.compression = rocksdb::kNoCompression; // doesnt do anything