summaryrefslogtreecommitdiff
path: root/db/db_bench.cc
diff options
context:
space:
mode:
authorjorlow@chromium.org <jorlow@chromium.org@62dab493-f737-651d-591e-8d6aee1b9529>2011-03-21 19:40:57 +0000
committerjorlow@chromium.org <jorlow@chromium.org@62dab493-f737-651d-591e-8d6aee1b9529>2011-03-21 19:40:57 +0000
commit0e389254905fc246271ca991e203d95031c93559 (patch)
tree32cd0421f16f1941079ba212e69dab68d209041d /db/db_bench.cc
parent24ba6148694a68d010fe0c515616390abc12c5c4 (diff)
downloadleveldb-0e389254905fc246271ca991e203d95031c93559.tar.gz
Sync in bug fixes
git-svn-id: https://leveldb.googlecode.com/svn/trunk@9 62dab493-f737-651d-591e-8d6aee1b9529
Diffstat (limited to 'db/db_bench.cc')
-rw-r--r--db/db_bench.cc60
1 files changed, 42 insertions, 18 deletions
diff --git a/db/db_bench.cc b/db/db_bench.cc
index 4ccdd5a..db8deea 100644
--- a/db/db_bench.cc
+++ b/db/db_bench.cc
@@ -35,9 +35,11 @@ static const char* FLAGS_benchmarks =
"writerandom,"
"sync,tenth,tenth,writerandom,nosync,normal,"
"readseq,"
+ "readreverse,"
"readrandom,"
"compact,"
"readseq,"
+ "readreverse,"
"readrandom,"
"writebig";
@@ -167,7 +169,7 @@ class Benchmark {
message_.append(rate);
}
- fprintf(stdout, "%-12s : %10.3f micros/op;%s%s\n",
+ fprintf(stdout, "%-12s : %11.3f micros/op;%s%s\n",
name.ToString().c_str(),
(finish - start_) * 1e6 / done_,
(message_.empty() ? "" : " "),
@@ -179,7 +181,11 @@ class Benchmark {
}
public:
- enum Order { SEQUENTIAL, RANDOM };
+ enum Order {
+ SEQUENTIAL,
+ REVERSE, // Currently only supported for reads
+ RANDOM
+ };
Benchmark() : cache_(NewLRUCache(200<<20)),
db_(NULL),
@@ -239,6 +245,8 @@ class Benchmark {
Write(RANDOM, num_ / 1000, 100 * 1000);
} else if (name == Slice("readseq")) {
Read(SEQUENTIAL);
+ } else if (name == Slice("readreverse")) {
+ Read(REVERSE);
} else if (name == Slice("readrandom")) {
Read(RANDOM);
} else if (name == Slice("compact")) {
@@ -284,23 +292,39 @@ class Benchmark {
void Read(Order order) {
ReadOptions options;
- if (order == SEQUENTIAL) {
- Iterator* iter = db_->NewIterator(options);
- int i = 0;
- for (iter->SeekToFirst(); i < num_ && iter->Valid(); iter->Next()) {
- bytes_ += iter->key().size() + iter->value().size();
- FinishedSingleOp();
- ++i;
+ switch (order) {
+ case SEQUENTIAL: {
+ Iterator* iter = db_->NewIterator(options);
+ int i = 0;
+ for (iter->SeekToFirst(); i < num_ && iter->Valid(); iter->Next()) {
+ bytes_ += iter->key().size() + iter->value().size();
+ FinishedSingleOp();
+ ++i;
+ }
+ delete iter;
+ break;
}
- delete iter;
- } else {
- std::string value;
- for (int i = 0; i < num_; i++) {
- char key[100];
- const int k = (order == SEQUENTIAL) ? i : (rand_.Next() % FLAGS_num);
- snprintf(key, sizeof(key), "%012d", k);
- db_->Get(options, key, &value);
- FinishedSingleOp();
+ case REVERSE: {
+ Iterator* iter = db_->NewIterator(options);
+ int i = 0;
+ for (iter->SeekToLast(); i < num_ && iter->Valid(); iter->Prev()) {
+ bytes_ += iter->key().size() + iter->value().size();
+ FinishedSingleOp();
+ ++i;
+ }
+ delete iter;
+ break;
+ }
+ case RANDOM: {
+ std::string value;
+ for (int i = 0; i < num_; i++) {
+ char key[100];
+ const int k = (order == SEQUENTIAL) ? i : (rand_.Next() % FLAGS_num);
+ snprintf(key, sizeof(key), "%012d", k);
+ db_->Get(options, key, &value);
+ FinishedSingleOp();
+ }
+ break;
}
}
}