- #include <iostream>
- #include <string>
- #include <sstream>
- #include <sys/time.h>
- #include <kcpolydb.h>
- #define PUT_ERROR(msg, inst) cerr << msg << inst.error().name() << endl
- using namespace std;
- using namespace kyotocabinet;
- static inline double micro_time(){
- struct timeval tim;
- double ret;
- gettimeofday(&tim, NULL);
- ret = tim.tv_sec+(tim.tv_usec/1000000.0);
- return ret;
- }
- void seq_write(TreeDB &db){
- double time_consumed = 0;
- char data[512] = {0};
- for(long i=0; i<1000000; i++){
- string key = "key";
- stringstream str;
- double start = 0;
- str << key << i;
- key = str.str();
- strcpy( data, key.c_str() );
- size_t data_len = strlen(data);
- const char *key_ptr = key.c_str();
- size_t key_len = key.length();
- start=micro_time();
- if( !db.set(key_ptr, key_len, data, data_len) ){
- PUT_ERROR("UNABLE TO PUT KEY", db);
- }
- time_consumed += micro_time() - start;
- cout << i << "\\r" ;
- }
- cout << "Time consumed was " << time_consumed << endl;
- }
- void seq_read(TreeDB &db){
- DB::Cursor *cur = db.cursor();
- double start, total = 0;
- if( !cur->jump() ){
- PUT_ERROR("Unable to reset cursor", db);
- }
- char *key;
- const char *data;
- size_t keysz, valsz;
- start = micro_time();
- while( key = cur->get(&keysz, &data, &valsz, true) ){
- total += micro_time() - start;
- delete [] key;
- start = micro_time();
- }
- delete [] key;
- cout << "Time consumed was " << total << endl;
- delete cur;
- }
- void check_order(TreeDB &db){
- db.set("a", "x");
- db.set("c", "y");
- db.set("b", "z");
- DB::Cursor *cur = db.cursor();
- if( !cur->jump() ){
- PUT_ERROR("Unable to reset cursor", db);
- }
- string key, value;
- while( cur->get(&key, &value, true) ){
- cout << "key = " << key << " value = " << value <<endl;
- }
- delete cur;
- }
- int main(int argc, char **argv){
- TreeDB db;
- if( !db.open("test_db", TreeDB::OWRITER | TreeDB::OCREATE)){
- PUT_ERROR("Unable to open DB", db);
- }
- seq_write( db );
- seq_read( db );
- if( !db.close()) {
- PUT_ERROR("Unable to close DB", db);
- }
- return 0;
- }
- //该片段来自于http://www.codesnippet.cn/detail/091020136320.html
来源: http://www.codesnippet.cn/detail/091020136320.html