#include #include #include #include #include "leveldb/db.h" #define TEST_FREQUENCY (10000) char* randomstr() { static char buf[1024]; int len = rand() % 768 + 255; for (int i = 0; i < len; ++i) { buf[i] = 'A' + rand() % 26; } buf[len] = '\0'; return buf; } int main() { leveldb::DB* db; leveldb::Options options; options.create_if_missing = true; // 打开数据库 leveldb::Status status = leveldb::DB::Open(options, "./testdb", &db); assert(status.ok()); srand(2017); std::string k[TEST_FREQUENCY]; for (int i = 0; i < TEST_FREQUENCY; ++i) { k[i] = (randomstr()); } std::string v("壹贰叁肆伍陆柒捌玖拾"); v.append(v).append(v).append(v).append(v).append(v); // 测试添加 { auto start = std::chrono::system_clock::now(); for (int i = 0; i < TEST_FREQUENCY; ++i) { status = db->Put(leveldb::WriteOptions(), k[i], v); assert(status.ok()); } auto end = std::chrono::system_clock::now(); auto duration = std::chrono::duration_cast(end - start); std::cout << TEST_FREQUENCY <<"次添加耗时: " << double(duration.count()) * std::chrono::microseconds::period::num / std::chrono::microseconds::period::den << "秒" << std::endl; } // 测试获取 { auto start = std::chrono::system_clock::now(); std::string v2[TEST_FREQUENCY]; for (int i = 0; i < TEST_FREQUENCY; ++i) { status = db->Get(leveldb::ReadOptions(), k[i], &v2[i]); assert(status.ok()); } auto end = std::chrono::system_clock::now(); auto duration = std::chrono::duration_cast(end - start); std::cout << TEST_FREQUENCY <<"次获取耗时: " << double(duration.count()) * std::chrono::microseconds::period::num / std::chrono::microseconds::period::den << "秒" << std::endl; // 验证获取结果是否正确 std::string ss; for (int i = 0; i < TEST_FREQUENCY; ++i) { if (v2[i] != v) { std::cout << "第 " << i << " 个结果不正确" << std::endl; std::cout << v2[i] << std::endl; } } } // 测试修改 { auto start = std::chrono::system_clock::now(); v.append(v); for (int i = 0; i < TEST_FREQUENCY; ++i) { status = db->Put(leveldb::WriteOptions(), k[i], v); assert(status.ok()); } auto end = std::chrono::system_clock::now(); auto duration = std::chrono::duration_cast(end - start); std::cout << TEST_FREQUENCY <<"次修改耗时: " << double(duration.count()) * std::chrono::microseconds::period::num / std::chrono::microseconds::period::den << "秒" << std::endl; } // 测试删除 { auto start = std::chrono::system_clock::now(); for (int i = 0; i < TEST_FREQUENCY; ++i) { status = db->Delete(leveldb::WriteOptions(), k[i]); assert(status.ok()); } auto end = std::chrono::system_clock::now(); auto duration = std::chrono::duration_cast(end - start); std::cout << TEST_FREQUENCY <<"次删除耗时: " << double(duration.count()) * std::chrono::microseconds::period::num / std::chrono::microseconds::period::den << "秒" << std::endl; } delete db; return 0; }