1. 下载Snappy库
2. 编译leveldb自带的db_bench
$(CXX) $(LDFLAGS) db/db_bench.o $(LIBOBJECTS) $(TESTUTIL) -o $@
为
$(CXX) db/db_bench.o $(LIBOBJECTS) $(TESTUTIL) -o $@ $(LDFLAGS)
为了获取更多的信息,我写了一个简单的测试程序来测试写性能。
g++ src/ldbbench.cpp libleveldb.a -I../leveldb/include -o ldb_test -pthread -lsnappy
我隔10w条记录统计一下运行时间和各层level的个数。
#include <iostream>
#include <cstdlib>
#include <sys/time.h>
#include "leveldb/db.h"
#include "leveldb/env.h"
using namespace std;
using namespace leveldb;
static inline double micro_time(){
struct timeval tim;
double ret;
gettimeofday(&tim, NULL);
ret = tim.tv_sec+(tim.tv_usec/1000000.0);
return ret;
}
int main() {
srand ( time(NULL) );
DB *db ;
Options op;
op.create_if_missing = true;
Status s = DB::Open(op,"/tmp/testdb",&db);
Env * env = Env::Default();
WritableFile *file;
env->NewWritableFile("/tmp/bench.csv",&file);
if(s.ok()){
cout << "create successfully" << endl;
WriteOptions wop;
for(int j=0;j<100;++j){
double start = micro_time();
double cost;
for(int i=0;i<100000;++i){
char key[100];
char value[100];
sprintf(key,"%d_%d",i,rand());
sprintf(value,"%d",rand());
db->Put(wop,key,value);
}
cost = micro_time()-start;
cout << "write successfully:" << j << ",costs "<<cost<<endl;
// report the status
{
//output stats information
string value;
char buffer[40];
for(int i=0;i<7;++i){
sprintf(buffer,"leveldb.num-files-at-level%d",i);
db->GetProperty(buffer,&value);
file->Append(value+",");
}
sprintf(buffer,"%f",cost);
file->Append(buffer);
file->Append("\n");
file->Sync();
}
}
cout << "write completed" << endl;
}
delete db;
file->Close();
delete file;
return 0;
}
得到结果如下:
可以看出 插入时间不稳定,一旦level 0 的文件个数达到8(leveldb在level0 sst file到达8会做流量控制),就会严重的影响插入速度。
数据如下: 前7栏为各level的文件个数,最后一栏为插入时间(单位second).
0,0,0,0,0,0,0,0.312044
0,0,1,0,0,0,0,0.339661
0,1,1,0,0,0,0,0.336554
1,1,1,0,0,0,0,0.338470
2,1,1,0,0,0,0,0.319139
4,1,1,0,0,0,0,0.322158
5,1,1,0,0,0,0,0.411267
6,1,1,0,0,0,0,0.452211
7,1,1,0,0,0,0,0.392227
4,6,1,0,0,0,0,0.599982
5,6,1,0,0,0,0,0.392222
6,6,1,0,0,0,0,0.426607
7,6,1,0,0,0,0,0.450604
0,9,7,0,0,0,0,1.884518
1,9,7,0,0,0,0,0.420226
2,8,8,0,0,0,0,0.395083
3,8,8,0,0,0,0,0.418100
4,7,9,0,0,0,0,0.421611
6,7,9,0,0,0,0,0.415739
7,7,9,0,0,0,0,0.407361
1,14,10,0,0,0,0,2.226791
2,14,10,0,0,0,0,0.401517
3,14,10,0,0,0,0,0.373305
4,13,11,0,0,0,0,0.419741
5,13,11,0,0,0,0,0.409911
6,12,12,0,0,0,0,0.410904
7,12,12,0,0,0,0,0.429305
0,19,15,0,0,0,0,3.586968
2,19,15,0,0,0,0,0.443083
3,18,16,0,0,0,0,0.403899
4,18,16,0,0,0,0,0.427664
5,17,17,0,0,0,0,0.398022
6,16,19,0,0,0,0,0.373106
7,16,19,0,0,0,0,0.381070
0,16,27,0,0,0,0,3.997287
1,16,27,0,0,0,0,0.415576
2,15,29,0,0,0,0,0.395088
3,15,29,0,0,0,0,0.421756
4,15,29,0,0,0,0,0.423345
5,14,30,0,0,0,0,0.443051
6,13,32,0,0,0,0,0.409214
0,21,35,0,0,0,0,3.724305
1,21,35,0,0,0,0,0.394496
2,20,36,0,0,0,0,0.400312
3,20,36,0,0,0,0,0.440494
4,19,36,0,0,0,0,0.401116
5,19,36,0,0,0,0,0.368698
6,19,36,0,0,0,0,0.392624
7,18,37,0,0,0,0,0.421263
0,20,45,0,0,0,0,5.280940
1,20,45,0,0,0,0,0.445995
2,19,46,0,0,0,0,0.427433
3,19,46,0,0,0,0,0.396355
4,19,46,0,0,0,0,0.412447
6,18,47,0,0,0,0,0.425992
7,18,47,0,0,0,0,0.409269
0,22,54,0,0,0,0,4.659271
1,22,54,0,0,0,0,0.353135
2,22,54,0,0,0,0,0.412604
3,22,54,0,0,0,0,0.387365
4,21,55,0,0,0,0,0.447579
5,20,56,0,0,0,0,0.423402
6,20,56,0,0,0,0,0.392983
7,19,58,0,0,0,0,0.372202
0,22,66,0,0,0,0,5.072227
1,22,66,0,0,0,0,0.389874
2,22,66,0,0,0,0,0.375599
4,22,66,0,0,0,0,0.405292
5,22,66,0,0,0,0,0.404367
6,22,66,0,0,0,0,0.394260
7,22,66,0,0,0,0,0.401855
0,24,77,0,0,0,0,5.980508
1,24,77,0,0,0,0,0.388424
2,24,77,0,0,0,0,0.429406
3,23,78,0,0,0,0,0.412908
4,23,78,0,0,0,0,0.428574
5,23,78,0,0,0,0,0.403336
6,22,79,0,0,0,0,0.394216
8,13,89,0,0,0,0,5.377096
1,23,89,0,0,0,0,0.816229
2,23,89,0,0,0,0,0.437396
3,23,89,0,0,0,0,0.399540
4,22,90,0,0,0,0,0.437927
5,22,90,0,0,0,0,0.424814
6,22,90,0,0,0,0,0.411747
7,21,92,0,0,0,0,0.384908
0,25,100,0,0,0,0,6.236974
1,25,100,0,0,0,0,0.403147
3,25,100,0,0,0,0,0.412086
4,25,100,0,0,0,0,0.403978
5,24,102,0,0,0,0,0.398120
6,24,102,0,0,0,0,0.374137
7,24,102,0,0,0,0,0.370625
0,22,102,10,0,0,0,6.692459
1,22,102,10,0,0,0,0.389345
2,22,102,10,0,0,0,0.411086
3,22,102,10,0,0,0,0.404387
4,21,103,10,0,0,0,0.443593
5,21,103,10,0,0,0,0.400221
6,21,103,10,0,0,0,0.414371