• 大小: 12KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-17
  • 语言: C/C++
  • 标签: mongodb  

资源简介

该代码是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++;
    }
  

评论

共有 条评论