#include #include #include #include #include #include #include #include #include #include #include // gg -static bench.cc -lrocksdb -O2 #include "instant.h" int main() { rocksdb::Options options; options.disable_auto_compactions = true; options.create_if_missing = true; options.max_write_buffer_number = 3; options.target_file_size_base = 64 << 20; options.write_buffer_size = 64 << 20; options.level0_file_num_compaction_trigger = 500; options.max_bytes_for_level_base = 2 << 30; rocksdb::OptimisticTransactionDB *db; std::string db_root = "/home/abby/rocksdb_tmp"; std::filesystem::remove_all(db_root); std::cout << "db_root " << db_root << '\n'; auto s = rocksdb::OptimisticTransactionDB::Open(options, db_root, &db); assert(s.ok()); std::vector keys {}; constexpr size_t count = 100000; for (size_t i = 0; i < count; ++i) { keys.push_back(std::format("{:08}", i)); } auto ropt = rocksdb::ReadOptions(); auto wopt = rocksdb::WriteOptions(); std::string val; auto b = nm::Instant::now(); for (auto &x : keys) { auto kv = db->BeginTransaction(wopt); kv->Put(x, x); kv->Commit(); } auto e1 = b.elapse_ms(); b.reset(); for (auto &x : keys) { auto kv = db->BeginTransaction(wopt); kv->Get(ropt, x, &val); kv->Commit(); } auto e2 = b.elapse_ms(); delete db; s = rocksdb::OptimisticTransactionDB::Open(options, db_root, &db); assert(s.ok()); b.reset(); for (auto &x : keys) { auto kv = db->BeginTransaction(wopt); kv->Get(ropt, x, &val); kv->Commit(); } auto e3 = b.elapse_ms(); std::cout << std::format("{:<10}{}ms\n{:<10}{}ms\n{:<10}{}ms\n", "put", (size_t)e1, "hot get", (size_t)e2, "cold get", (size_t)e3); }