@zhenni94
2015-08-26T04:49:17.000000Z
字数 2004
阅读 1627
LMDB document: http://symas.com/mdb/doc/
LMDB API: http://symas.com/mdb/doc/group__mdb.html
Example: How to begin and end
// open and beginif (mdb_env_create(&mdb_env) != MDB_SUCCESS)mex_error("mdb_env_create failed");if (mdb_env_set_mapsize(mdb_env, 1099511627776) != MDB_SUCCESS) // 1TBmex_error("mdb_env_set_mapsize failed");if (mdb_env_open(mdb_env, dbname.c_str(), 0, 0664) != MDB_SUCCESS)mex_error("mdb_env_open failed");if (mdb_txn_begin(mdb_env, NULL, 0, &mdb_txn) != MDB_SUCCESS)mex_error("mdb_txn_begin failed");if (mdb_open(mdb_txn, NULL, 0, &mdb_dbi) != MDB_SUCCESS)mex_error("mdb_open failed");// commit and closeif (mdb_txn_commit(mdb_txn) != MDB_SUCCESS)mex_error("mdb_txn_commit failed");mdb_close(mdb_env, mdb_dbi);mdb_env_close(mdb_env);
Example: How to put some data into the database
string value;datum.SerializeToString(&value);// ------- store in db ---------mdb_data.mv_size = value.size();mdb_data.mv_data = reinterpret_cast<void*>(&value[0]);mdb_key.mv_size = keystr.size();mdb_key.mv_data = reinterpret_cast<void*>(&keystr[0]);//save data itemif ((status = mdb_put(mdb_txn, mdb_dbi, &mdb_key, &mdb_data, 0)) != MDB_SUCCESS) {ostringstream oss;oss << "mdb_put failed, status = " << status;mex_error(oss.str());}if (++count % BATCH_N == 0) {// transaction commitif ((status = mdb_txn_commit(mdb_txn)) != MDB_SUCCESS) {ostringstream oss;oss << "mdb_txn_commit failed, status = " << status;mex_error(oss.str());}// transaction beginif ((status = mdb_txn_begin(mdb_env, NULL, 0, &mdb_txn)) != MDB_SUCCESS) {ostringstream oss;oss << "mdb_txn_begin failed, status = " << status;mex_error(oss.str());}ostringstream oss;oss << "Processed " << count << " patches." << std::endl;mex_info(oss.str());}
Example: How to use cursor
int retval;MDB_cursor* cursor;retval = mdb_cursor_open(read_txn_, dbi_, &cursor);CHECK_EQ(retval, MDB_SUCCESS) << mdb_strerror(retval);MDB_val mdbkey;MDB_val mdbval;retval = mdb_cursor_get(cursor, &mdbkey, &mdbval, MDB_LAST);CHECK_EQ(retval, MDB_SUCCESS) << mdb_strerror(retval);mdb_cursor_close(cursor);if (!KCoder::deserialize(reinterpret_cast<char*>(mdbkey.mv_data),mdbkey.mv_size, key)) {LOG(ERROR) << "failed to deserialize key";}