资源简介
该代码是C++ MongoDB的连接池代码实现。代码封装了一个连接池类对象,通过该对象提供的连接池来操作MongoDB,提升了性能,减少了数据库连接资源的开销。
代码片段和文件信息
//函数返回0:成功 >0 出错
class cmongo{
public:
//默认构造函数,默认连接数为1
cmongo();
//传入连接数到构造函数,默认连接数为size
cmongo(int size);
//析构函数
~cmongo();
public:
//设置tcp读写超时时间
int set_wr_timeout(double t);
//连接
int conn(string mhost=“127.0.0.1“int mport=27017);
//设置db collection
int setdb(string mdbstring mcollection);
int setindex(string key);
//查询
int get(map& outvector instring keystring key_val);
//投递一批要查询的字段,fields为要查询哪些字段
int gets(map< stringmap >& routvector fieldsvector instring key);
//dump key-value dumpkey对应一个value
int dumpkey(map< stringstring >& routstring keystring val);
//dump key->map dumpkey对应一组value
int dumpvals(map< stringmap >& routvector instring key);
//写入
int set(map instring keystring key_val);
//批量写入
//更新接口,批量更新key=“id“
// “123456“:
// “123457“:
int sets(map< stringmap > instring key);
//删除
int remove(string keystring key_val);
private:
string doc;
//tcp读写超时时间
double wr_timeout;
pthread_mutex_t _jobmux;
sem_t _jobsem;
map _joblst;
pthread_mutex_t _dbmux;
};
cmongo::cmongo(int size){
//doc
doc=string(DB_DB)+“.“+string(DB_COLLECTION);
wr_timeout=3;
//最大连接0-200
if(size<0){
size=1;
}
if(size>200){
size=200;
}
if(_joblst.size()>0){
return;
}
bool auto_conn=true;
pthread_mutex_init(&_jobmuxNULL);
if((sem_init(&_jobsem00))<0){
return;
}
pthread_mutex_lock(&_jobmux);
for(int i=0;i DBClientConnection* pconn = new DBClientConnection(auto_conn0wr_timeout);
if(pconn != NULL){
_joblst[pconn]=false;
}
}
pthread_mutex_unlock(&_jobmux);
}
cmongo::~cmongo(){
doc=““;
pthread_mutex_lock(&_jobmux);
map::iterator it=_joblst.begin();
while(it != _joblst.end()){
delete it->first;
it++;
}
pthread_mutex_unlock(&_jobmux);
}
int cmongo::set_wr_timeout(double t){
wr_timeout=t;
return RET_OK;
}
int cmongo::conn(string mhostint mport){
pthread_mutex_lock(&_jobmux);
map::iterator it=_joblst.begin();
while(it!=_joblst.end()){
string errmsg=““;
HostAndPort hp(mhostmport);
if(!(it->first->connect(hperrmsg))){
cerr<<“connect mhost:“< it->second=true;
}
sem_post(&_jobsem);
it++;
}
- 上一篇:C++编写的后方交会程序
- 下一篇:简单多线程socket聊天室程序(c语言)
评论
共有 条评论