成员:余明阳 包亦晟
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

122 rivejä
4.4 KiB

#include "leveldb/db.h"
#include "leveldb/my_leveldb.h"
#include <iostream>
using namespace std;
using namespace leveldb;
// ÍÌÍÂÁ¿
void TestThroughput(int num_operations) {
WriteOptions writeOptions;
ReadOptions readOptions;
Options options;
options.create_if_missing = true;
auto db1 = new MyLevelDB(options, "testThroughput");
std::string key = "k_";
FieldArray fields = {{"name", "Customer#000000001"},
{"address", "IVhzIApeRb"},
{"phone", "25-989-741-2988"}};
//д
auto start_time1 = std::chrono::steady_clock::now();
for (int i = 0; i < num_operations; ++i) {
db1->PutWithFields(WriteOptions(), key + to_string(i), fields);
}
auto end_time1 = std::chrono::steady_clock::now();
auto duration1 =
chrono::duration_cast<chrono::milliseconds>(end_time1 - start_time1)
.count();
cout << "Put Op Throughput: " << num_operations * 1000 / duration1 << " OPS" << endl;
//¶Á
string str;
auto start_time2 = std::chrono::steady_clock::now();
for (int i = 0; i < num_operations*100; ++i) {
db1->Get(ReadOptions(), key, &str);
}
auto end_time2 = std::chrono::steady_clock::now();
auto duration2 =
chrono::duration_cast<chrono::milliseconds>(end_time2 - start_time2)
.count();
//cout << duration2 << endl;
cout << "Get Op Throughput: " << num_operations*100 * 1000 / duration2 << " OPS"
<< endl;
//×ֶβéÕÒ
std::vector<std::string> keys;
auto start_time3 = std::chrono::steady_clock::now();
for (int i = 0; i < num_operations; ++i) {
db1->FindKeysByField(ReadOptions(), fields[0],&keys);
}
auto end_time3 = std::chrono::steady_clock::now();
auto duration3 =
chrono::duration_cast<chrono::milliseconds>(end_time3 - start_time3)
.count();
cout << "FindKeysByField Op Throughput: " << num_operations * 1000 / duration3 << " OPS"
<< endl;
}
// ÑÓ³Ù
void TestLatency(int num_operations) {
Options options;
options.create_if_missing = true;
auto db = new MyLevelDB(options, "testLatency");
std::string key = "k_";
FieldArray fields = {{"name", "Customer#000000001"},
{"address", "IVhzIApeRb"},
{"phone", "25-989-741-2988"}};
//Put
int64_t latency1 = 0;
int64_t tollatency = 0;
auto end_time1 = std::chrono::steady_clock::now();
auto last_time1 = end_time1;
for (int i = 0; i < num_operations*100; ++i) {
// Operations
db->PutWithFields(WriteOptions(), key + to_string(i), fields);
end_time1 = std::chrono::steady_clock::now();
latency1 = std::chrono::duration_cast<std::chrono::milliseconds>(end_time1 -
last_time1)
.count();
last_time1 = end_time1;
tollatency += latency1;
}
std::cout << num_operations*100<<" put op averange latency:" << (double)tollatency / num_operations<< std::endl;
//Get
int64_t latency2 = 0;
tollatency = 0;
auto end_time2 = std::chrono::steady_clock::now();
auto last_time2 = end_time2;
std::string str;
for (int i = 0; i < num_operations*100; ++i) {
// Operations
db->Get(ReadOptions(), key + to_string(i),&str );
end_time2 = std::chrono::steady_clock::now();
latency2 = std::chrono::duration_cast<std::chrono::milliseconds>(end_time2 -
last_time2)
.count();
last_time2 = end_time2;
tollatency += latency2;
}
std::cout << num_operations*100
<< " Get operation averange latency:" << (double)tollatency / num_operations
<< std::endl;
//FindKeysByField
int64_t latency3 = 0;
tollatency = 0;
auto end_time3 = std::chrono::steady_clock::now();
auto last_time3 = end_time3;
std::vector<std::string> keys;
for (int i = 0; i < 50; ++i) {
// Operations
db->FindKeysByField(ReadOptions(), fields[0], &keys);
end_time3 = std::chrono::steady_clock::now();
latency3 = std::chrono::duration_cast<std::chrono::milliseconds>(end_time3 -
last_time3)
.count();
last_time3 = end_time3;
tollatency += latency3;
}
std::cout << 50 << " FindKeysByField operation averange latency:"
<< (double)tollatency / num_operations << "ms"
<< std::endl;
}
int main() {
TestThroughput(100);
TestLatency(1000);
}